必须用multipath管理共享磁盘,否则rac因节点间设备名不一致而启动失败;linux内核通过多路径识别同一lun会产生/dev/sdb、/dev/sdc等不同名称,asm无法容忍此不确定性,导致ora-15018或crs-2674报错。

必须用多路径(multipath)管理共享磁盘,否则RAC启动时会因设备名不一致直接失败。
为什么multipath不是可选项而是强制前提
RAC所有节点必须看到完全一致的磁盘路径,而Linux内核在识别SAN存储时,常通过多条物理路径发现同一块LUN,导致出现/dev/sdb、/dev/sdc等不同设备名。ASM无法容忍这种不确定性——节点A认为/dev/sdb是OCR盘,节点B却把它当数据盘,集群根本起不来。
- 典型报错:
ORA-15018: diskgroup cannot be created或CRS-2674: Start of 'ora.asm' on 'node1' failed - 验证方法:在每个节点执行
ls -l /dev/disk/by-path/ | grep -i emc(按实际存储厂商替换emc),确认同一LUN有多个路径条目 - 关键动作:必须禁用系统默认的
rdm或sd设备自动映射,只让multipathd输出统一别名(如/dev/mapper/mpatha)
multipath.conf里最关键的三处配置
Oracle 19c RAC对多路径策略极其敏感,以下配置经生产环境验证(EMC PowerStore + OL7.9):
- 全局段必须关闭
find_multipaths:find_multipaths no—— 否则multipathd会忽略你手动定义的WWID - 设备段需显式绑定存储厂商和产品:
device { vendor "DGC" ; product ".*" ; path_grouping_policy multibus ; path_selector "round-robin 0" ; failback immediate ; no_path_retry 30 ; }(DGC是EMC常见vendor ID,IBM、HUAWEI需对应调整) - 必须为OCR/Voting Disk专用磁盘设置
no_path_retry fail:wwid 36006016092d02f001b4a9e4b3a1b1e11 { no_path_retry fail; }—— 防止心跳磁盘短暂离线触发误判
改完后执行 systemctl restart multipathd && multipath -F && multipath -v2,确认输出中所有目标磁盘都显示status=active且无ghost字样。
UDEV规则与ASM磁盘标签的协作顺序
仅靠multipath还不够,ASM需要稳定设备名用于oracleasm初始化。顺序错了就会卡在asmca界面找不到磁盘:
- 先确保
multipath已生成/dev/mapper/mpatha等设备,再基于它写UDEV规则:SUBSYSTEM=="mapper", KERNEL=="mpatha", SYMLINK+="asm-disk1" -
oracleasm初始化必须指向UDEV软链:oracleasm createdisk OCR /dev/asm-disk1,而非/dev/mapper/mpatha—— 后者重启后可能变化 - 检查最终效果:
oracleasm listdisks应返回OCR、DATA等标签,且每个节点输出完全一致;ls -l /dev/oracleasm/disks/应指向/dev/asm-disk*软链
最容易被忽略的是:multipath服务必须设为开机自启(systemctl enable multipathd),且早于oracleasm启动。曾有客户因启动顺序颠倒,导致RAC节点反复掉出集群。











