ASM磁盘在节点间显示为不同设备名是因为多路径未生效,导致各节点直接识别底层HBA路径(如/dev/sdb),而ASM要求所有节点上同一LUN必须映射为完全一致的设备路径,否则asmca无法识别共享盘或建库报ORA-15018。
ASM磁盘为什么在节点间显示为不同设备名
因为 linux 多路径软件(如 device-mapper-multipath)未生效或未正确绑定,导致每个节点直接看到底层 hba 路径(如 /dev/sdb、/dev/sdc),而这些路径在重启或重扫后极易错位。asm 要求同一物理 lun 在所有节点上必须映射为**完全一致的设备路径**,否则 asmca 无法识别为共享盘,甚至建库时报 ora-15018: diskgroup cannot be created。
- 确认多路径服务已启用:
systemctl is-active multipathd,不是inactive - 检查是否识别出多路径设备:
multipath -ll输出中应有类似mypath (3600a09803830444f4a2b4e5f6789abcd) dm-2 NETAPP,LUN的行 - 确保
/etc/multipath.conf中启用了user_friendly_names yes,并为关键存储厂商(如NETAPP、EMC、HDS)配置了正确的devices块(否则默认策略可能不启用多路径) - 别依赖
/dev/mapper/mpathX直接给 ASM 用——它不稳定;要用/dev/mapper/xxx的 symlink(如/dev/oracleasm/disks/DISK01)或 WWID 绑定的永久路径
如何让 ASM 稳定识别多路径盘(非 /dev/mapper/…)
Oracle 官方推荐且 RAC 实际生产中最可靠的方式,是用 udev 规则把多路径设备的 WWID 映射到固定路径(如 /dev/asm-disk1),再由 oracleasm 初始化。绕过 /dev/mapper/ 是因为它的主次号(major:minor)在 multipath 重载时可能变化,而 udev + WWID 绑定不受影响。
- 查 WWID:
scsi_id -g -u -d /dev/sdb(注意:RHEL7+ 必须用scsi_id,不能用已废弃的scsi_id -g -s) - 写 udev 规则(
/etc/udev/rules.d/99-oracle-asm.rules):ACTION=="add|change", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="3600a09803830444f4a2b4e5f6789abcd", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
- 重载规则:
udevadm control --reload-rules && udevadm trigger,然后检查ls -l /dev/asm-disk*是否存在且属主正确 -
oracleasm初始化时只认/dev/asm-disk1这类路径,不认/dev/mapper/mpathX或原始/dev/sdX
ASM 磁盘组冗余级别选 NORMAL 还是 HIGH?
选 NORMAL 是绝大多数 RAC 生产环境的实际选择,不是因为“够用”,而是因为 HIGH 在双节点 RAC 下几乎无容错价值,反而显著拖慢写性能,并增加磁盘空间开销(3副本 vs 2副本)。
- NORMAL 要求至少 3 块 failure group(通常每块盘一个 FG),可容忍 1 个 failure group 故障(即 1 个节点或 1 个存储控制器故障)
- HIGH 要求至少 5 块 failure group 才能真正防双点故障;双节点 RAC 若只配 2 个 FG(每个节点 1 组盘),HIGH 实际等效于 EXTERNAL(无冗余)
- 如果底层存储本身已做 RAID10 或双活镜像(如 VMAX、FlashArray),ASM 冗余应设为 EXTERNAL,避免重复保护浪费 IOPS
-
CREATE DISKGROUP时显式指定FAILUREGROUP,别依赖 ASM 自动分组——自动分组常把同控制器下的盘分进同一 FG,失去容错意义
为什么 asmca 创建磁盘组总卡在“Discovering disks…”
本质是 grid 用户没权限读取你指定的设备路径,或路径根本没被系统识别为块设备。不是界面卡,是底层 libasm 调用 open() 失败后无限重试。
- 运行
su - grid -c "asmcmd lsdsk",看输出是否为空或报ORA-15032: not all alterations performed;若为空,说明 ASM 实例根本看不到盘 - 检查设备权限:
ls -l /dev/asm-disk*,必须是grid:asmadmin且权限为brw-rw----;常见坑是 udev 规则写了OWNER但忘了GROUP,或asmadmin组没加进 grid 用户的 secondary groups(id grid验证) - 确认
ASMLIB未启用(RHEL7+ 已弃用):若误装了oracleasmlib,会干扰 udev 设备发现,必须卸载并清理/etc/sysconfig/oracleasm - 别在
asmca图形界面里输/dev/mapper/mpathX—— 它大概率没权限打开,且路径不持久
最麻烦的其实是 failure group 划分逻辑和多路径策略的耦合:一块盘属于哪个 controller、走哪条 HBA、是否被 multipath 正确聚合,这些物理层细节一旦错,上层 ASM 就永远“看不见”它。调的时候得一层层从 lsscsi → multipath -ll → scsi_id → udevadm info 拿证据,不能只盯 asmca 界面。

















