multipath配置错误导致的云平台虚拟机挂载云硬盘失败
客户反馈云平台商业存储类型的云硬盘无法挂载上(cinder通过FC协议对接),但是ceph类型云硬盘使用正常.
登录打开cinder的debug模式,在volume日志没有显示任何错误信息,日志显示cinder有删除映射关系的操作.
继续查看挂载虚拟机的所在计算节点的nova-compute日志,发现如下错误. Failed to execute command multipath -l /dev/sdai
在所在的计算节点执行 报错的multipath -l /dev/sdai,确实返回值不为0
执行lsblk命令,发现所在计算节点有大量sdaX的block设备
对其他block设备执行multipath -l命令,返回值正常(如下图,对sdu设备,multipath -l执行正常).
因为是multipath执行命令出错,于是检查multipath的配置文件 /etc/multipath.conf
如上图,multipath.conf配置文件中,配置了黑名单配置(后来联系部署同事,其反馈这个配置是他们加上去).其本意是将计算节点的三块本地盘sda,sdb,sdc三个block设备不纳入multipath的的路径聚合中.问题出现这个这个黑名单配置的正则表达式有问题.因为随着映射到计算节点的block设备的增加,设备名是从sda到sdX等用尽后,新的block设备名会从sdaX开始,而这些sdaX的设备,不是本地盘,是要被multipath聚合的.
解决办法:
multipath.conf配置文件中,黑名单的配置,sda,sdb,sdc三个本地block设备,采用wwid的方式(通过scsi_id命令取回每个设备的wwid,每个块设备的wwid是唯一的).
修改完multipath后,重启multipathd,之后云硬盘挂载正常(如下图,multipath -l /dev/sdai返回值已经为0).
注:如果multipath.conf的黑名单配置,仍采用devnode模式,要修改为"^sda$"的写法.这样就不会误杀一些正常需要聚合的block设备了.