虚拟机实现RAC在技术上完全可行,但性能、共享存储和脑裂控制是三大核心难点,需要针对性架构设计才能保障生产级稳定。
对于很多预算有限又想要高可用架构的团队来说,Oracle RAC一直是个”想碰又不敢碰”的东西,物理机两节点起步就是几十万开销,再加上共享存储、万兆网络,小公司根本扛不住,于是不少人把目光投向虚拟机用VMware或者KVM跑RAC,成本能砍掉一大截,但虚拟化环境下跑RAC,坑比想象中多得多,今天咱们就聊聊这块硬骨头怎么啃。
虚拟机做RAC稳定吗?先看架构层面怎么选
很多人一上来就问”虚拟机做RAC稳定吗”,其实这个问题本身就有问题,RAC跑在虚拟机上稳不稳定,不取决于虚拟化本身,而取决于你怎么设计这个虚拟化环境。
行业共识认为,Oracle RAC在虚拟机上的行为与物理机有较大差异,主要集中在I/O延迟和时钟同步两个层面。 如果底层架构设计合理,虚拟化RAC完全可以承载中等规模的生产业务。
虚拟化平台选择:VMware还是KVM
选平台之前,先搞清楚自己的场景,测试环境怎么折腾都行,生产环境就得认真对待。
- VMware vSphere:成熟度最高,对Oracle的兼容性验证做得最充分,vMotion配合RAC的注意事项也有一套官方文档,缺点是授权成本偏高。
- KVM + Proxmox:开源免费,近年来的版本对数据库负载的支持已经比较完善,缺点是踩坑时需要自己翻社区,运维门槛高一些。
- Hyper-V:能用,但Oracle官方对Hyper-V的支持矩阵相对保守,生产环境建议谨慎。
CPU和内存的预留策略
虚拟机跑RAC最容易犯的错就是把CPU和内存设置得”刚刚好”,Oracle的RAC节点对资源抖动极其敏感,资源争抢会直接体现在性能和稳定性上。
生产环境建议配置: - CPU:预留全部核心,关闭超线程(或至少绑核) - 内存:完全预留,禁止内存气球回收 - 网卡:使用SR-IOV或PCI直通,绕开虚拟交换机 - 磁盘:独立存储路径,不与其他虚拟机共享数据盘
这些配置在VMware里对应的是”Reserve all guest memory”和”Shares = High”,在KVM里对应的是vcpus=8搭配emulatorpin以及memory backening指定hugepages。
Oracle RAC虚拟机共享存储怎么选?这步决定成败
共享存储是RAC的命门,放在虚拟机环境下更是如此,RAC要求所有节点能同时读写同一份数据文件,这本身就够复杂了,再叠加一层虚拟化,问题就变成了”虚拟化层怎么把共享盘暴露给多个虚拟机”。
Oracle RAC虚拟机共享存储的选型思路,本质上是在问”你的虚拟化平台支持哪种共享盘方式”。

虚拟化层共享磁盘最简单但风险最大
VMware的RDM(Raw Device Mapping)和KVM的共享virtio-blk是两种常见做法,操作上不复杂,但存在一个致命问题: 虚拟化层的锁机制在极端情况下会干涉Oracle的分布式锁管理(DLM) ,具体表现为ASM实例启动时检测到I/O挂起,甚至直接触发节点驱逐。
iSCSI直通测试环境的性价比之选
把存储设备或者存储服务器上的iSCSI LUN直接映射给虚拟机,虚拟机里的ASM自己去管理盘符,绕开了虚拟化层的存储协议转换,这套方案配置起来很灵活,也方便扩展,常见做法是在存储侧划分LUN,通过iSCSI把LUN映射给RAC节点,操作路径大致是:
存储侧:targetcli配置iSCSI target -> 划分LUN 虚拟机侧:安装iscsi-initiator-utils -> 发现target -> 登录 -> 配置multipath Oracle侧:ASM扫描磁盘 -> 创建磁盘组 -> 建库
这套方案底层的延迟比方案一低一些,但仍受限于虚拟网络和宿主机网卡性能。
NFS最容易上手但别抱太高期望
Oracle RAC是支持NFS作为共享存储的,只要满足特定版本和挂载参数,虚拟机场景下,用宿主机做一个NFS服务器,把目录导出给RAC节点,确实能跑起来,适合什么场景?测试、开发、演示,绝对不适合生产,NFS的锁机制和I/O一致性在重负载下有天然短板,日志文件写在NFS上大概率遇到”log file sync”等待事件飙升。
下表把三种方式的适用场景做了个汇总:
| 存储方案 | 配置难度 | 性能表现 | 生产可用性 |
|---|---|---|---|
| 虚拟化层共享盘 | 低 | 一般 | 低,有锁冲突风险 |
| iSCSI直通 | 中 | 较好 | 可接受,需充分调优 |
| NFS | 最低 | 较差 | 仅限测试环境 |
如果问”Oracle RAC虚拟机共享存储怎么选”,多数生产案例给出的答案是iSCSI直通加多路径。 这也是目前网上各类实施博客里通过率最高的路径。
虚拟机网络配置:比物理机多走一公里的隐性问题
网络这块经常有人忽略,理由是”虚拟网卡又不是真网卡,配置上不就完事了吗”,问题恰恰出在这里虚拟交换机的引入会导致延迟抖动和包丢失,虽然单看不大,但叠加起来足以触发RAC的节点驱逐机制。
私有网络必须走独立网卡
RAC节点间的心跳通信(Cache Fusion)对延迟的敏感度极高,在物理机上,心跳通常走单独的物理网卡或直连线,在虚拟机上,这个”隔离”很容易被忽略所有流量混在同一个虚拟交换机上,数据库业务流量和心跳流量互相抢占带宽。

建议把心跳网络单独划分一个VLAN或者独立虚拟交换机,有条件的话直接开一个专用的vSwitch,同时考虑使用VMXNET3或virtio驱动,别用默认的e1000。
GNS和VIP网络要注意的额外细节
- VIP(虚拟IP)在虚拟化环境下存在”漂移”的额外路径,一定要关闭虚拟化层的网卡热插拔功能
- 主机名解析建议用/etc/hosts,不依赖DNS,减少故障点
- 在VMware里,如果启用了vMotion,注意VIP的MAC地址变化可能导致应用连接中断
生产环境Oracle RAC虚拟机部署实操步骤
不谈操作只谈概念没有意义,下面给出一套较为成熟的部署路径,这套路径基于iSCSI直通加KVM虚拟化的组合,适合大多数愿意折腾的技术团队。
第一步:宿主机和虚拟机基础配置
宿主机建议使用专用SSD或NVMe硬盘存储虚拟机文件,虚拟机数据盘走iSCSI LUN,虚拟机本身的系统盘放在本地存储,ASM数据盘走共享存储,操作系统选择上,Oracle Linux 7/8 + Oracle 19c RAC是目前兼容性最好、参考资料最全的组合。
第二步:共享存储规划
在存储服务器上用targetcli创建两个LUN,一个给OCR/Voting Disk,一个给数据文件 2. 在虚拟机里登录iSCSI target,配置multipath 3. 用multipath -ll确认盘符,尽量绑定固定盘符 4. 通过udev规则把ASM磁盘的用户属主改为grid:asmadmin 5. 重启multipathd服务,确认盘符持久化
第三步:RAC安装的核心注意点
安装GI(Grid Infrastructure)之前,有几个检查项绕过不掉:
- 两节点的
/etc/hosts必须一致,私有IP和公有IP必须分开 - 共享磁盘的权限和属主必须正确
- 时钟同步用chrony或NTP,不要用虚拟机自带的时间同步,避免时间跳跃
- 防火墙要放行Oracle相关端口
- 虚拟机BIOS里开启CPU虚拟化特性,否则
cluvfy会报警
安装过程中用到cluvfy做预检查时,出现少量warning是正常的,但任何与共享存储或网络相关的error都必须处理完再继续,这一步偷懒,后面ASM实例起不来,还得回头查。
OCR和Voting Disk放哪个磁盘组、分配多大空间”是很多初学者的疑问,常见的建议是单独划分一个小磁盘组专门存放OCR和Voting Disk,确保故障域隔离,避免数据盘空间耗尽影响集群元数据写入。
第四步:安装后的性能调优
装完不是结束,恰恰是调优的开始,针对虚拟化环境,重点调优以下几处:
- 网络参数:调整socket缓冲区大小,降低心跳延迟
- I/O调度器:改成none或noop,减少虚拟化层排队延迟
- CPU绑定:把虚拟机CPU绑定到固定物理核,避免NUMA跨节点访问
- 内存透明大页:关闭透明大页,显式配置hugepages,减少TLB miss

虚拟机RAC性能损失有多大?用数据说话
关于性能损失,业界没有统一共识,但也别指望虚拟化无损。较为主流的说法是虚拟机RAC相比物理机有10%-20%的性能损失,主要体现在I/O路径上,计算密集型负载影响较小。 如果你跑的是OLTP业务,并且存储走iSCSI直通加SSD后端,损失的体感不会太明显,如果跑的是OLAP大查询,CPU的虚拟化开销会放大,性能衰减会更明显。
这种情况下,建议把大查询的并行度(Parallel Degree)适当调低,同时考虑在ASM层面设置合理的_asm_allow_only_raw_devices参数,避免不必要的路径转换开销。
实施中容易踩的坑
坑一:忘了关闭透明大页
Linux的透明大页对Oracle数据库有已知的负面性能影响,RAC环境尤为突出,不关闭会出现典型的gc buffer busy acquire等待事件飙升,关闭方式:
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
同时修改/etc/rc.d/rc.local确保重启后依然生效。
坑二:存储多路径没配好
如果多路径配置不当,会出现I/O在两条路径上来回切换,导致ASM磁盘被标记为offline,这种情况的典型现象是ORA-15040报错,排查时留意multipath -ll输出中的路径状态,确认所有路径都是active。
坑三:虚拟化层的快照功能
在RAC虚拟机上打快照是危险的,尤其是包含数据盘的快照,Oracle RAC的多个节点同时写一份数据,快照回滚会导致数据文件与控制文件不一致,轻则实例崩溃,重则数据损坏,如果非要用快照做备份,务必把RAC完全停机后再操作。
常见问题解答
虚拟机做RAC稳定吗?能长期跑生产吗?
在共享存储使用iSCSI直通、网络隔离到位、资源预留充分的条件下,虚拟机RAC可以长期满足中等规模生产需求,不少企业已在这种架构上运行了数年,需要接受的是运维复杂度会比物理机略高,建议对底层虚拟化有足够掌握。
单机虚拟机上能模拟RAC吗?
单机跑RAC常用做法是搭建两套虚拟机,共享同一存储,若想在一台虚拟机内跑多节点,可用Docker或Podman模拟,但推荐直接用VirtualBox开两台虚拟机,配VirtualBox的共享磁盘,虽然性能一般,但流程与真实环境接近。
Oracle RAC虚拟机共享存储用NFS还是iSCSI?
生产推荐iSCSI,测试可NFS,若预算和网络条件允许,建议直接上FC或NVMe-oF,性能上限更高,只是配套成本也明显更高,低成本的Oracle RAC方案里,iSCSI是最佳折中。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/919157.html


评论列表(4条)
读了这篇文章,我深有感触。作者对虚拟机做的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是虚拟机做部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对虚拟机做的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对虚拟机做的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!