在Oracle RAC集群的部署过程中,共享存储的配置质量直接决定了整个集群的稳定性。生产环境中,为了实现存储链路冗余,服务器通常通过两条甚至更多条光纤链路连接到存储阵列,这就会导致同一个LUN在操作系统层面出现多个设备名称,比如/dev/sdb和/dev/sdc实际指向的是同一块物理磁盘。如果不做任何处理,Oracle的ASM实例会把这些设备当成不同磁盘,一旦其中一条链路抖动或切换,就可能引发节点驱逐等严重故障。本文将以Linux平台为例,详细讲解multipath多路径的配置方法以及ASM共享磁盘的完整创建流程。

一、为什么RAC环境必须配置多路径
首先需要理解多路径存在的必要性。当服务器配置了双HBA卡、每个HBA卡分别连接到存储的两个控制器时,一块LUN会被识别为多个块设备。以常见的双链路为例,系统会识别出/dev/sdb和/dev/sdc两个设备,通过scsi_id查询会发现它们的wwid完全相同,说明这其实是同一条通往同一块LUN的不同路径。
如果ASM直接使用/dev/sdb这样的裸设备名,会带来两个严重问题。第一,设备名不具备稳定性,Linux内核在扫描SCSI总线时,设备名的分配顺序与扫描顺序有关,服务器重启或存储链路恢复后,sdb和sdc完全可能互换身份,导致ASM找不到原本的磁盘。第二,没有故障切换能力,当sdb对应的物理链路出现故障时,即使sdc链路依然健康,正在通过sdb下发的IO也会直接失败。
Device Mapper Multipath(DM-Multipath)组件正是为了解决这些问题而生的。它将多条物理路径聚合成一个虚拟设备(通常为/dev/mapper/xxx),对上层的ASM屏蔽底层路径细节,并在路径故障时自动把IO切换到健康路径上,配合udev规则固定设备权限后,就能为RAC提供一个稳定可靠的共享磁盘访问入口。
二、multipath多路径的安装与配置
主流的Linux发行版默认可能没有安装多路径软件,需要先确认并安装相关组件。在RHEL或Oracle Linux环境下执行以下命令即可:
# 检查是否已安装 rpm -qa | grep device-mapper-multipath # 未安装则通过yum安装 yum install -y device-mapper-multipath # 启动并设置开机自启 systemctl enable --now multipathd
安装完成后,核心工作是编写/etc/multipath.conf配置文件。这个文件定义了路径聚合策略、别名以及路径选择算法。对于Oracle RAC场景,推荐的配置如下:
defaults {
user_friendly_names yes
find_multipaths yes
}
blacklist {
devnode "^(ram|raw|loop|fd|sr|scd)[0-9]*"
devnode "^sd[a-z]+$" # 实际项目中按需调整
}
multipaths {
multipath {
wwid "3600a0980383036345a2b4c5d6e7f8a9b"
alias ocr_vote
}
multipath {
wwid "3600a0980383036345a2b4c5d6e7f8a9c"
alias data01
}
}
配置中的wwid是全局唯一的磁盘标识,可以通过multipath -ll命令或者/lib/udev/scsi_id -g -u /dev/sdb来获取。建议为RAC的每块共享磁盘设置语义清晰的别名,比如ocr_vote、data01、fra01等,方便后续维护时一眼识别磁盘用途。blacklist部分需要特别注意,要把操作系统本地盘排除在外,避免本地磁盘被聚合进多路径设备。
修改完配置后执行multipath -rr重新加载,再用multipath -ll验证聚合结果。正常情况下会看到类似下面的输出,显示两条路径分别处于ready状态,并按照设定的策略工作:
ocr_vote (3600a0980383036345a2b4c5d6e7f8a9b) dm-2 size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 1:0:0:1 sdb 8:16 active ready running | `- 2:0:0:1 sdd 8:48 active ready running
三、udev规则绑定与权限设置
多路径设备创建好之后,还面临最后一个问题:设备属主和权限。ASM磁盘需要被grid用户的asmadmin组读写,而系统默认创建的mapper设备属主是root,直接使用会报权限错误。虽然可以直接用chown修改,但每次重启后权限会还原,因此必须借助udev规则实现持久化。
针对multipath设备,推荐通过wwid匹配的方式编写udev规则,创建文件/etc/udev/rules.d/99-oracle-asmdevices.rules,内容示例如下:
KERNEL=="dm-*", ENV{DM_UUID}=="mpath-3600a0980383036345a2b4c5d6e7f8a9b", \
OWNER:="grid", GROUP:="asmadmin", MODE:="0660"
KERNEL=="dm-*", ENV{DM_UUID}=="mpath-3600a0980383036345a2b4c5d6e7f8a9c", \
OWNER:="grid", GROUP:="asmadmin", MODE:="0660"
这里的DM_UUID是multipath设备特有的环境变量,值为mpath-前缀加上wwid,比直接匹配设备名可靠得多。规则编写完成后,执行udevadm control --reload-rules和udevadm trigger重新触发,或者干脆重启服务器验证。检查时执行ls -l /dev/mapper/,确认ocr_vote和data01的属主为grid、属组为asmadmin、权限为0660即表示配置成功。
需要强调的是,RAC是集群环境,所有节点的multipath.conf中的wwid、别名以及udev规则必须完全一致,否则不同节点看到的设备映射关系会错乱,创建磁盘组时可能把IO写到不同的物理磁盘上,造成数据损坏。建议配置完成后在两个节点分别执行multipath -ll并逐项比对输出。
四、ASM磁盘组的创建与验证
多路径设备就绪后,就可以进入ASM阶段。如果使用AFD(ASM Filter Driver)或者直接使用裸设备路径,在创建磁盘组时指定/dev/mapper/ocr_vote即可。通过grid用户启动asmca图形工具,或使用SQL语句创建磁盘组的典型方式如下:
CREATE DISKGROUP OCR_VOTE NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/mapper/ocr_vote' NAME ocr_vote_1
FAILGROUP fg2 DISK '/dev/mapper/ocr_vote_2' NAME ocr_vote_2
ATTRIBUTE 'compatible.asm'='19.0.0.0',
'au_size'='4M';
创建成功后,建议做一轮完整的验证:首先在两个节点分别查询v$asm_disk视图,确认所有磁盘的HEADER_STATUS为MEMBER且PATH一致;然后通过dd或kfed工具简单读取设备头信息,验证节点间确实访问的是同一块磁盘;最后可以模拟一条链路故障,比如临时拔掉一根光纤线,观察multipath -ll中路径状态的变化以及ASM层面的IO是否平滑切换,这是检验多路径配置是否真正生效的最直接手段。
此外还有一些实践经验值得参考。OCR和Voting Disk所在的磁盘组建议使用NORMAL冗余并保证故障组分布在不同的存储控制器上;数据磁盘组应根据容量规划合理选择外部冗余或正常冗余;磁盘组的AU大小设置为4M对大数据库的性能更有利。所有配置变更都应在业务低峰期进行,并提前保存好multipath.conf和udev规则的备份副本,方便故障时快速回滚。
总结来说,RAC共享磁盘配置的核心思路可以概括为三步:用multipath把多条物理路径聚合成稳定设备,用udev固化设备属主和权限,最后把聚合设备交给ASM管理。每一步都做到位并在多节点间保持一致,整个集群的存储基础才算是牢靠的。
Oracle RACmultipathASM磁盘修改时间:2026-09-02 20:51:05