必须确认两节点NVMe设备UUID完全一致,否则ASM无法跨节点识别同一盘;实操用lsblk -d -o NAME,UUID比对,不一致则停操并检查存储映射或NVMe-oF配置。
确认NVMe设备是否被RAC节点统一识别
oracle rac要求所有节点看到的共享nvme设备必须具有**完全一致的设备路径和uuid**,否则asm无法跨节点识别同一块盘。常见错误是:节点a看到/dev/nvme0n1,节点b看到/dev/nvme1n1,或uuid不一致(尤其在多控制器/多路径场景下)。
实操建议:
- 在两个节点同时执行:
lsblk -d -o NAME,MODEL,SERIAL,UUID,比对新增NVMe设备的UUID字段是否严格一致 - 若使用联想存储,主机端查UUID优先用:
ls -l /dev/disk/by-id/ | grep nvme,再结合nvme list输出中的Subsystem NQN交叉验证 - 超融合环境务必用:
/lib/udev/scsi_id -g -u -d /dev/nvme0n1(注意替换设备名),不能只依赖lsblk的UUID——部分NVMe驱动不暴露标准UUID - 发现UUID不一致?立即停止后续操作,回溯存储侧LUN映射或NVMe-oF命名空间配置
UDEV规则绑定NVMe设备为ASM专用路径
直接用/dev/nvme0n1这类动态路径注册ASM磁盘组极危险:内核重扫描后设备名可能变为/dev/nvme0n2,导致ASM误删磁盘或挂载失败。必须通过UDEV固化为/dev/asm_diskN形式。
实操建议:
- 编辑
/etc/udev/rules.d/98-oracle-asm.rules,添加类似规则:KERNEL=="nvme*[0-9]n[0-9]", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d /dev/$name", SYMLINK+="asm_disk%n", OWNER="grid", GROUP="asmadmin", MODE="0660" - 关键点:
PROGRAM必须调用scsi_id校验设备唯一性,不能只靠KERNEL匹配;%n取的是NVMe命名中的namespace编号(如nvme0n1的n1),确保编号稳定 - 重载规则后,强制触发:
/sbin/udevadm control --reload-rules && /sbin/udevadm trigger --subsystem-match=block - 验证:
ll /dev/asm_disk*应显示软链接指向正确的/dev/nvme*?,且属主为grid:asmadmin
ASM磁盘组添加NVMe盘时的REBALANCE参数陷阱
NVMe设备IOPS远高于传统SAS/SATA盘,但默认ALTER DISKGROUP ... REBALANCE POWER 1会严重拖慢速度,甚至因IO饱和导致集群心跳超时。而盲目设高POWER值(如11)又可能压垮NVMe控制器队列。
实操建议:
- 首次添加单块NVMe盘,推荐起始
POWER 4;添加多块(≥3)时,用POWER 6并监控V$ASM_OPERATION的EST_MINUTES - 务必在添加前检查当前负载:
SELECT * FROM V$ASM_DISK_IOSTAT WHERE IO_TYPE IN ('READ','WRITE'),避免在业务高峰执行 - 若REBALANCE卡在
EST_MINUTES = 0或持续STATE = EXECUTING超30分钟,立即终止:ALTER DISKGROUP DATA STOP REBALANCE,检查/var/log/messages中是否有NVMe timeout或reset日志 - NVMe盘加入后,观察
V$ASM_DISK中HEADER_STATUS是否为MEMBER,而非PROVISIONED——后者说明UDEV权限或ASM权限未生效
为什么NVMe在RAC中不推荐直接用于OCR/Voting Disk
虽然NVMe性能强,但Oracle官方文档明确指出:OCR和voting disk所在的磁盘组必须启用EXTERNAL REDUNDANCY,且底层存储需具备“写顺序保证”(write ordering guarantee)。多数NVMe-oF或直连NVMe阵列在故障切换时无法100%保证该特性,易引发脑裂。
实操建议:
- OCR/Voting Disk务必放在ASM磁盘组上,且该磁盘组后端使用
ASM或SAN(非NVMe直连),例如:DATA组用NVMe,OCR_VOTE组用光纤SAN LUN - 若必须用NVMe承载OCR,需确认存储厂商文档明确支持“persistent reservation + write ordering”,并在创建磁盘组时显式指定:
CREATE DISKGROUP OCR_VOTE EXTERNAL REDUNDANCY DISK '/dev/asm_disk9' ATTRIBUTE 'compatible.asm'='19.0' - 部署后必须运行
crsctl query css votedisk和ocrcheck -local双重验证,任何一项失败都不可进入生产
NVMe协议本身没问题,问题永远出在“一致性”和“可控性”上——节点间设备视图不一致、UDEV绑定不稳定、REBALANCE失控、OCR底层保障缺失,这四点踩中任意一个,RAC集群就可能在扩容瞬间失联。


















