VMware虚拟机部署Oracle RAC,共享存储的稳定性核心在于为每个数据库节点配置独立的SCSI控制器,并为每块共享磁盘创建独立的虚拟磁盘(VMDK),同时设置SCSI共享类型为“物理”或“虚拟”,禁用VMotion和存储DRS等自动迁移功能。
共享存储为什么总在虚拟机RAC里“翻车”
很多DBA在物理机上跑RAC轻车熟路,一旦迁移到VMware vSphere环境就频繁遇到节点驱逐、ASM磁盘头冲突、I/O性能断崖式下跌,这不是Oracle出了问题,而是对VMware的虚拟存储层理解不够透彻。
虚拟机里的共享磁盘和物理机接存储阵列完全是两种逻辑,物理机上,两台数据库服务器通过FC或iSCSI直接访问同一套LUN,操作系统能看到真实的SCSI磁盘设备,而在VMware环境里,所谓“共享”需要虚拟化平台模拟出多个虚机都能看到的SCSI设备,这种模拟层的处理方式稍有差池,就会触发Oracle集群件(Clusterware)的误判。
行业共识认为,90%以上的虚拟机RAC部署故障都集中在共享存储配置这一环节,内核参数调错了可以改,网络心跳不通可以加网卡,但存储配置如果从一开始就是错的,后续排查代价极高,甚至需要重建整个集群。
共享存储配置的核心规则:独立控制器与独立虚拟磁盘
每个节点必须有单独的SCSI控制器
这是最容易踩坑的地方,很多实施人员习惯在VMware里把所有磁盘都挂到默认的SCSI控制器上,对于普通应用虚机,这种做法没问题,但对于RAC节点,必须为每个节点划分独立的SCSI控制器编号。
具体操作路径:编辑虚拟机设置 → 添加SCSI控制器 → 将控制器类型设置为“LSI Logic SAS”或“VMware Paravirtual”,然后为这个控制器分配一个独立的SCSI ID(比如控制器0和控制器1),重点是,RAC节点1使用控制器0,RAC节点2必须使用控制器1,两根控制器总线在虚拟化层是物理隔离的,这是保证SCSI-3持久预留(Persistent Reservation)能正常工作的前提。
每块共享磁盘必须是独立的VMDK文件
这同样是高频错误点,部分实施人员为了图省事,在虚拟机设置里把ASM磁盘组所需的五六个磁盘直接做成一个大VMDK,在虚机内部再分区使用,这种做法在Oracle ASM环境下绝对不可行,因为ASM要求每个磁盘拥有独立的设备标识,而来自同一VMDK的分区会被识别为同一SCSI设备的不同分区。
正确的做法是:每个ASM磁盘对应一个独立的VMDK文件,假设规划了三块ASM磁盘用于数据组、一块用于FRA组、一块用于OCR和Voting File组,那就需要创建五个独立的VMDK文件,每个文件在虚拟机上挂载为单独的SCSI设备。
SCSI共享类型选择:物理还是虚拟
VMware提供两种SCSI共享模式:物理(Physical)和虚拟(Virtual),在RAC场景下,这两个选项对应不同的使用场景:
- 虚拟模式(Virtual):允许多个虚机共享同一SCSI设备,由VMware ESXi统一调度I/O,这种模式下虚机内的操作系统看到的是虚拟SCSI设备,Oracle ASM发出的SCSI-3 Persistent Reserve命令会被VMware正确传递。
- 物理模式(Physical):直接将物理LUN映射给虚机,类似于物理机的裸设备映射(RDM),这种模式下I/O路径更短,延迟更低,但需要保证ESXi主机有足够的SCSI设备可用。
业内专家指出,如果追求极致性能和稳定性,推荐使用物理模式配合RDM映射;如果更看重管理灵活性,虚拟模式搭配VMware Paravirtual SCSI控制器也能达到不错的性能水平,关键是在实施前明确选型,混合使用容易导致ASM磁盘组无法正常加载。
实操步骤:从创建共享磁盘到挂载完成的完整路径
以下是一个经过多轮环境验证的配置流程,适用于VMware vSphere 6.5及以上版本:
- 关闭两台虚机电源后,编辑节点1的虚拟机设置,添加一块新磁盘,选择“使用现有虚拟磁盘”或“创建新虚拟磁盘”。
- 在磁盘创建向导中,设置磁盘大小为实际需要值(建议以GB为单位),选择“厚置备延迟置零”或“厚置备快速置零”格式,不要选择“精简置备”,因为精简置备在I/O频繁情况下容易出现存储队列拥塞。
- 将新创建的VMDK挂载到节点1的独立SCSI控制器(如控制器1),SCSI节点号从0:0开始递增,不要与系统盘所在控制器重复。
- 重复上述步骤,在节点1上创建并挂载全部共享磁盘,每块磁盘独立VMDK。
- 关闭节点1虚拟机(如果刚才开着),打开节点2的虚拟机设置,添加设备 → 选择“现有磁盘” → 浏览数据存储,找到节点1上创建的那些VMDK文件,全部选中并挂载到节点2的独立SCSI控制器(如控制器1)。
- 检查两台虚机的SCSI控制器配置,确保节点1和节点2的共享磁盘在各自虚机内的SCSI ID完全一致(如节点1的ASM磁盘1是1:0,节点2的同一磁盘也必须是1:0)。
- 开机顺序没有强制要求,但建议首先启动节点1,确认OCR和Voting File磁盘正常加载后,再启动节点2加入集群。
- 在两台虚机内部执行
ls /dev/sd查看磁盘设备,确认设备名前缀一致,如果发现设备名不一致,可以通过udev绑定或ASMLib配置固定权限。
验证共享存储是否生效的简单方法:在节点1上对某块ASM磁盘执行dd if=/dev/sdX of=/tmp/test.bin bs=1024 count=100写入测试文件,然后在节点2上读取同一块磁盘,如果能正常读出数据,说明存储共享配置没有问题。
存储路径与I/O延迟:虚拟机RAC性能的分水岭
多路径策略必须显式配置
VMware默认的路径选择策略是“最近使用”,在单台存储控制器环境下没问题,但在双控制器存储阵列上,这种默认策略可能导致两条节点走不同的ACTIVE路径,引起ASM负载不均衡和轻微的性能抖动,建议在VMware Host Client中,为共享VMDK对应的存储设备设置固定的路径选择策略为“循环”(Round Robin),并将IOPS限制从默认的1000调整为1。
虚拟磁盘总线类型对性能的影响
在生产环境中,共享VMDK的总线类型对IOPS影响明显,LSI Logic SAS兼容性最佳,适合绝大多数Linux和Windows发行版;VMware Paravirtual性能更高,但需要确认虚拟机操作系统是否自带驱动,尤其是Oracle Linux和RHEL 6.4以前的版本,需要手动安装VMware的pvscsi驱动。
根据存储性能测试数据,PVSCSI控制器在随机读写场景下的IOPS,通常比LSI Logic SAS高出约20%到30%,但在小数据块传输下,两者差异不大,对于OLTP类高并发小数据块负载,LSI Logic SAS在稳定性和兼容性上更让人安心。
与VMware虚拟化特性相关的坑:哪些功能必须关闭
RAC对存储的访问有很强的时序要求,VMware提供的很多高可用、负载均衡特性在这种场景下反而会成为“捣乱者”,以下是必须在RAC节点虚拟机上关闭或调整的功能:
- VMotion/热迁移:绝对禁止,无论虚机是否在运行,都不能对RAC节点执行实时迁移,共享磁盘在迁移过程中的SCSI总线重置,轻则导致ASM磁盘组需要重新mount,重则直接引起节点驱逐。
-
Storage DR S:存储级DRS会在数据存储之间进行复制迁移,这会打断Oracle对SCSI设备ID的识别,如需将所有RAC节点固定在同一数据存储集群中,明确排除自动迁移策略。
- Snapshot快照:不要对RAC节点虚拟机拍摄快照,快照会破坏共享磁盘的SCSI-3预留机制,Oracle Clusterware会误认为另一节点已经失联。
- 内存回收和热插拔:确保关闭虚拟机内存热添加功能,这会导致内存地址重映射,引起不可预测的问题。
据相关统计,以上几个功能误启用造成的RAC存储故障占比相当大,实施时必须在虚拟机高级参数(Advanced Parameters)中显式设置disk.EnableUUID = "TRUE",以保留SCSI磁盘的UUID标识。
常见问题排查与Q&A
对于已经配置好的虚拟机RAC,如何确认共享存储配置是合理的?
在任意节点执行asmcmd lsdsk -p查看磁盘路径和ASM磁盘头信息,然后参照VMware的存储映射规则逐项核对:每块ASM磁盘是否独立VMDK、两台虚机的SCSI控制器是否独立、SCSI设备ID是否一致,如果不确定,建议通过闭云快照和离线备份进行验证。
如果配置了共享存储但节点启动后ASM实例起不来,最常见的原因是什么?
大概率是SCSI控制器配置错误,检查虚拟机的.vmx文件,确认共享磁盘所挂载的SCSI控制器ID在两个节点上一致,并且不存在同一物理VMDK被同时挂载到同一控制器的冲突情况,还有一种常见情况是没有设置disk.EnableUUID参数,导致ASM无法稳定识别磁盘。
精简置备的VMDK能否作为RAC共享存储?
不推荐,尤其在存储容量充裕情况下应避免,精简置备在性能上有一定劣势,且面临快照或其他虚拟化操作时,I/O错误恢复时间较长,如果确实因磁盘空间局限使用了精简置备,务必开启存储的TRIM和UNMAP功能,并定期进行碎片整理。
写在最后
虚拟机RAC的共享存储配置,本质上是一道“虚拟化理解+数据库要求”的交叉题,只要掌握了独立控制器、独立VMDK、严格SCSI ID映射、禁用动态迁移这四条关键规则,稳定运行没有悬念,把物理机的习惯带到虚拟化环境,或者盲目接受VMware默认配置,才是故障的根源,在实施前花半小时规划清楚存储布局,远胜于上线后花三天时间排查节点驱逐。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/629362.html





