前段时间接到深圳同事的反应,有个oracle集群中的一台负载过高,为了排查问题,系统已经重启了,但是系统重启后,6块仲裁盘丢失了。
为了查明原因,登入系统后,执行df -h,发现系统的/boot分区变成了mpathap1,进入/dev/mapper目录,发现多了mpathap1-3 三个文件。初步判断是由于系统自带多路径软件导致,查看了初始的配置/etc/multipath.conf 其中并未添加屏蔽本地磁盘的设置。于是手动按文档添加后,由于改变的是系统本地分区,所以需要重启系统,发现重启后,问题依旧;继续尝试了/etc/fstab的修改,将boot直接绑定到/dev/sda,结果系统重启不正常,只能进单用户修改。尝试卸载multipath软件后重启,原以为系统会自动恢复到初始状态,结果重启后无法进入系统,需要单用户模式进入,并重新安装软件。进入/dev/下查看是否有sda1-3发现系统并没有此分区。最终确认系统重启后系统已被多路径软件将分区篡改,而且不可逆,如果解决此问题只能重新安装系统。所以配置多路径前,一定要把本地磁盘给屏蔽掉。而且此问题的发生概率很小,因为之前也重启过很多次,所以配置时千万小心。
通过执行 multipath -ll 发现两台的wwid 对应的磁盘盘符是错乱的,以后查看的时候看来确实需要仔细,这里耽误了很长时间,因为有15个盘符,一个一个对确实挺费事。为了避免盘符错乱,修改了/etc/multipath.conf ,为每个wwid对应了一个固定的盘符。
方法:
multipath {
wwid 36005076802810fb3000000000000007d
alias mpathf
}
然后执行
multipath -F 清除配置。
service multipathd restart 重启服务。
multipath -v2 重新扫描。
multipath -ll
至此磁盘对应关系解决了,剩下的工作就是DBA的事情了。
附录添加方法: 执行/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/sda 查看对应的wwid
然后添加:
blacklist {
wwid 36234567890abcde01c6a312c0a867e33
}
这样就把本地盘给屏蔽掉了,而不是直接放开默认注释:
#blacklist {
# wwid 0x6234567890abcde01c6a312c0a867e33
# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
# devnode "^hd[a-z]"
#}
这个屏蔽掉光驱等外置设备,如果直接屏蔽设备也可以写成devnode "^sd[a-z]*"