虚拟机搭建RAC会遇到哪些常见问题?如何快速解决

虚拟机搭建RAC,最大的挑战不在Oracle本身,而在虚拟化层的共享存储、网络心跳和时钟同步这三道坎,把这三块理顺,RAC跑在虚拟机上和物理机没有本质差别。

行业共识认为,RAC(Real Application Clusters)上云的难点从来不是Oracle Grid Infrastructure的安装脚本,而是底层虚拟化资源是否满足Oracle集群的“洁癖”,存储路径漂移、心跳网卡丢包、时间跳变导致CTD(Cluster Time Daemon)误判节点宕机,这些问题在物理机上几十年不遇,在虚拟机上却是家常便饭,30招拆解完,你会发现多数事故都可以在规划阶段提前规避。

虚拟机搭建RAC和物理机有什么区别?先认清这3道坎

物理机装RAC,硬件资源独占,操作系统对设备的识别顺序稳定,虚拟机不一样,虚拟化层引入了三层不确定性:SCSI设备扫描顺序、虚拟网卡的MAC地址绑定、以及CPU调度延迟,这三个变量叠加,直接导致集群节点互相“失联”。

  • 设备识别不稳定:VMware默认的pvscsi控制器在重启后,磁盘盘符可能从/dev/sdb变成/dev/sdc,UDEV规则如果没写好,ASM磁盘组直接识别不到。
  • 网络延迟升高:虚拟交换机(vSwitch)默认的流量整形策略会引入微秒级延迟,而RAC的私有网络心跳超时阈值是net_message_timeout,如果延迟抖动超过这个值,节点会被踢出集群。
  • 时间不可控:宿主机NTP(Network Time Protocol)时间和虚拟机内部NTP互相干扰,导致节点间时钟差超过Misscount参数允许的范围,集群直接脑裂。

业内专家指出,解决以上问题不需要有多么高深的虚拟化知识,核心思路就一条:把虚拟机当物理机管理,所有共享资源必须静态化、独立化、专有化。

共享存储的坑:RAC集群存储规划与虚拟磁盘配置

共享存储是RAC的命根子,虚拟化环境里,ASM(Automatic Storage Management)磁盘的常见问题,大纲如下。

第1招:虚拟磁盘必须开启“独立”模式

在VMware中,默认虚拟磁盘是“与快照一起”的,一旦你给虚拟机拍了快照,ASM磁盘组的I/O会被冻结,OCR(Oracle Cluster Registry)和Voting Disk所在的磁盘组直接进入只读状态。要点:创建共享虚拟磁盘时,磁盘模式务必选择“独立-持久化”,这能让快照操作不会波及集群盘。

  • 操作路径:编辑虚拟机设置 → 硬盘 → 高级选项 → 磁盘模式 → 独立持久化。
  • 注意:如果使用vSAN或RDM(Raw Device Mapping),确认存储策略允许“独立”标签。

第2招:SCSI控制器必须启用“总线共享”

Oracle通过SCSI-3 Persistent Reservation管理Voting Disk的磁盘仲裁,如果虚拟机的SCSI控制器没有开启“虚拟SCSI总线共享”,两个节点会互相抢占磁盘锁,表现为voting disk丢失,crsctl stat res -t命令出现大量红色ERROR。

  • 关键选项:SCSI控制器类型选择VMware Paravirtual,然后将SCSI总线共享设为“物理”或“虚拟”。
  • 适合场景:单台ESXi主机内的多台虚拟机共享存储,用“虚拟”即可;跨物理机场景要选RDM直通或vSAN,而不是简单分布式虚拟磁盘。

第3招:ASM磁盘路径必须用UUID绑定,不用设备名

在Linux环境下,/dev/sdb这种设备名在虚拟机重启后极容易变化,使用/etc/udev/rules.d/99-oracle-asm.rules,通过每个磁盘的WWID或UUID生成稳定的设备路径,是必须做到的。

  • 获取UUID:/usr/lib/udev/scsi_id -g -u -d /dev/sdb
  • 正则规则示例:KERNEL=="sd", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29...", SYMLINK+="oracleasm/disk1"
  • 这套配置做完,还要执行udevadm trigger,不然设备节点不会立即生效。

    虚拟机搭建RAC会遇到哪些常见问题?如何快速解决

第4招:NFS方式搭建共享存储,只适合测试环境

不少新手图省事,直接拿NFS(Network File System)当共享存储,NFS作为RAC共享盘的缺点是网络协议栈开销大,极易出现I/O路径高延迟,导致ASM磁盘组force dismount,物理环境下机架很稳,但虚拟化环境的NFS走的是vSwitch到vSwitch,经过软件协议栈,延迟更难控。

第5招:vSAN上创建共享盘,必须用独立VMDK

vSAN(VMware Virtual SAN)虽然支持共享虚拟磁盘,但它默认的存储策略是“条带化+镜像”,RAC的OCR盘对数据一致性要求极高,不建议开去重压缩,共享盘独立VMDK是vSAN唯一支持的方式,你需要将存储策略的容错方法设为“RAID-1镜像”,并关闭“混合磁盘”加速。

第6招:多路径管理的配置陷阱

虚拟机上使用LVM(Logical Volume Manager)管理共享磁盘会导致元数据冲突,给RAC用的ASM磁盘,禁止做LVM逻辑卷,禁止在共享盘上做文件系统。

存储方式 性能 管理复杂度 生产环境适用性
独立VMDK 高 简单 适用
RDM 高 中等 适用
NFS 低 简单 不适用
iSCSI 中 复杂 有条件适用

网络与心跳:跨节点通信延迟与丢包的解决细节

RAC的私有网络(Private Interconnect)是集群的生命线,虚拟机化环境下,心跳超时是最头疼的就是高可用性问题。

第7招:私网网卡必须走专用虚拟交换机

不建议把心跳网卡和公共业务网卡放在同一个vSwitch上,广播风暴、ARP泛洪等状况会影响心跳延迟,设一个专属vSwitch,仅给心跳网卡使用,是更稳妥的做法,能有效隔离流量干扰。

第8招:关闭vSwitch上的流量整形

VMware vSwitch的默认流量整形策略会引入几十毫秒的额外延迟,需要关闭vSwitch的“流量整形”功能,同时将MTU(Maximum Transmission Unit)设置为9000(Jumbo Frame),降低大包传输的CPU占用。

  • 无特殊需求时,不要对心跳网卡启用VMXNET3的“TCP Segmentation Offload”卸载,部分网卡驱动在虚拟化环境下会导致硬件校验和错误。

第9招:调整私网网卡的“中断合并”阈值

网卡中断合并(Interrupt Coalescing)会把多个小包合成一个中断处理,这本来是降低CPU占用的,但RAC的心跳包很小、频率固定,合并后会让节点产生“为什么半天没收到心跳”的误判,这会导致集群上报节点被驱逐。

# ethtool命令调整中断合并,以eth1为例
ethtool -C eth1 rx-usecs 0 tx-usecs 0

第10招:两节点RAC建议配置双心跳网卡做冗余

虚拟化环境的宿主机网卡故障会导致vSwitch链路中断,建议配置两块心跳网卡,Oracle层面的HAIP(Highly Available IP)会自动负载均衡。多块心跳网卡必须确认系统路由表不冲突,否则走错网口反而加剧延迟。

第11招:接在分布式交换机上的心跳流量要开“独立”

自建的VDS(VMware Distributed Switch)如果开启“NIC Team”负载均衡模式为“基于IP哈希”,心跳节点UDP流可能被分配到不同物理网卡,导致乱序,最简单粗暴的方法:设两台虚拟交换机的上行链路均为单物理网卡,不捆绑。

时间同步与系统层配置:虚拟机的隐形炸弹

第12招:禁止宿主机和虚拟机同时跑时间同步

VMware Tools的“时间同步”功能和Linux内核的NTP/Chrony服务会互相抢占系统时间,配置节点间时钟偏差超过阈值,集群直接进入脑裂防护模式。

虚拟机搭建RAC会遇到哪些常见问题?如何快速解决

操作:在.vmx配置文件中添加tools.syncTime = "FALSE",然后统一用外部Chronyd服务器,国内常用简米云NTP服务器;如果你没有外部NTP联通条件,必须指定一个RAC节点做本地NTP源。

第13招:关闭虚拟机的CPU热插拔

VMware允许动态增加CPU,但Oracle RAC对CPU核心数变化非常敏感,若虚拟机的CPU数量发生变化,Oracle的lm_rtm进程会认为拓扑结构变动,轻则性能抖动,重则集群重启,在虚拟机设置里取消“启用CPU热插拔”勾选。

第14招:时钟源必须使用TSC,而不是HPET

高性能事件定时器的精度在虚拟化环境下远不如CPU的TSC(Time Stamp Counter),在/grub.conf的内核启动项加入clocksource=tsc notsc,避免时间漂移引起CTD频繁波动。

第15招:内存大页(HugePages)必须设置

虚拟机内存大户担心的内存分配问题在RAC中也很重要,Oracle SGA要求使用大页内存,如果在Linux上没启用HugePages,DB的SGA会占用几千个小页,CPU Maga Lock竞争直接拖垮数据库。

# 设置vm.nr_hugepages为SGA大小的1.5倍(单位2MB)
echo 'vm.nr_hugepages=2048' >> /etc/sysctl.conf
sysctl -p

没有大页内存时,RAC实例的CPU使用率会虚高,表现是us%不高但sys CPU满负荷,数据库整体卡顿。

第16招:注意在配置kernel.shmall和kernel.shmmax

虚拟机内存一般大于物理机,但内核参数里共享内存上限,常被搞错,两个节点必须一致,设置kernel.shmmax=物理内存的一半,kernel.shmall=物理页数的一半,并确保lock bits设置正确。

第17招:sysctl.conf参数在虚拟机快照恢复后会丢

快照回滚后,/etc/sysctl.conf文件回退到旧版本,但运行中的内核内存参数仍是新值,RAC重启后才会加载旧参数,这时没法保证集群配置一致。所以快照回滚后,必须立即重新执行一遍sysctl -p并重启集群服务。

UDEV绑定与ASM磁盘访问:多节点映射失败的终极解法

第18招:UDEV规则要同步到所有节点

手动在node1写了UDEV规则,却忘了复制到node2,是最常见的低级错误,ASM磁盘在node2上变成/dev/sde、/dev/sdf,ASM实例无法正常启动。

第19招:udev规则文件必须设置OWNER为oracle:asmadmin

权限错误时会显示“ORACLE not available”或“ORA-15062”,确保UDEV规则中的OWNER为grid用户(或oracle用户,以实际部署为准),GROUP为asmadmin,同时加MODE=0660。

# 示例片段
KERNEL=="sdb1", OWNER="grid", GROUP="asmadmin", MODE="0660"

第20招:ASM_DISKSTRING只认特定的盘符

在Grid Infrastructure安装时,如果ASM_DISKSTRING指定了/dev/oracleasm/,那么普通/dev/sdb盘就不会被识别,在虚拟机环境中建议ASM_DISKSTRING设为`/dev/oracleasm/`,你不需要总改它。

第21招:两节点启动顺序不一致导致磁盘盘符摆动

node1先开机,sdb是节点一;node2先开机,sdb在node2变成不同的盘,必须用UID绑定来避免,EUDEV绑定了之后还需要再检查一遍/udev,确认Symlink都在。

安装部署与性能验证:怎么确认RAC在虚拟机上是健康的

第22招:runcluvfy.sh的检查项,尽量全过别跳过

每次安装前建议执行cluvfy stage -pre crsinst -n rac1,rac2 -fixup -verbose,它检查的东西比官方文档更细,虚拟机环境最常见的问题是内存锁(MEMLOCK)不够,这个参数在/etc/security/limits.conf里容易漏掉。

第23招:GRID在虚拟机上安装时,必须勾选“为集群配置为Flex Cluster”

官方强烈建议RAC在虚拟机上使用Admin-Managed数据库,默认的Flex Cluster配置能避免很多因节点心跳的虚拟网卡排错问题,该选项存在于Grid安装的配置页面,很多新手会直接忽略。

虚拟机搭建RAC会遇到哪些常见问题?如何快速解决

第24招:虚拟网卡的RX队列要增加

当RAC的业务放在虚拟机上,大量本地连接请求会进入公网(Public)网卡,VMXNET3的RX队列默认只有一个,会导致单核CPU跑满,RAC的TCP回包延迟升高,在虚拟机设置里给网卡增加队列数,或者用ethtool设置channel:

ethtool -L eth0 combined 4

第25招:IO调度器设为none或noop

虚拟机的底层I/O已经被虚拟化层排序,Linux内核的CFQ(Completely Fair Queueing)调度器会多做一遍无意义调度,将块设备IO调度器改为none,多路径时用noop。

echo 'echo noop > /sys/block/sda/queue/scheduler' >> /etc/rc.d/rc.local

第26招:ASM的AU_SIZE适合设大还是设小

虚拟环境的存储适合使用大AU(Allocation Unit)减少元数据分配冲突,配合1MB的ASM磁盘,当外部存储为SSD时,设置AU_SIZE=4M,日志文件组disk_recovery_file_size会分担更大压力,多数情况下,大量小文件系统IO类型适合1MB,大量大文件适合4MB。

第27招:必须检查Redo Log大小和Group数量

VMware的I/O延迟在极端情况可能有几十毫秒,为了配得上这个延迟,redo log建议比物理机增大30%左右,确保每组redo有2个成员,分布在不同虚拟磁盘上,定位用户:如果你用的是云主机,redo落盘延迟比物理机大,需要增加GROUP数量。

第28招:TODO:DB的DB_WRITER_PROCESSES建议等于物理CPU核数

在RAC生产环境中,虚拟机的CPU超分比不要超过1:1.5,如果宿主机负载过高,DBWR进程被调度延迟,RAC会出现“log file sync”等待事件,查询系统表:

show parameter db_writer_processes;

无法动态调整时,必须重启实例。

第29招:禁用Linux透明大页

透明大页(THP)在虚拟化场景,内存碎片化严重,RAC上的SQL执行计划容易卡顿,关闭方法写入/etc/rc.local:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

第30招:拔掉虚拟机的CD-ROM和软驱

很多兜底方案是拔掉光驱、软驱,这些设备在虚拟化层面会被RAC安装脚本误认为硬件变更,引起“CLSRSC-216”错误,拔掉后安装顺畅。

常见问题解答:虚拟机搭建RAC高频疑问

问:虚拟机搭建RAC,用VMware还是VirtualBox?

VMware ESXi是更成熟的企业级选择,各方面都好;VirtualBox能免费完成实验,但要真正解决共享磁盘的问题,需要自己手工配置VMDK的“独立共享”模式,日常练习用VirtualBox,生产或严肃测试不建议。

问:Oracle RAC对虚拟机的CPU和内存有什么最低要求?

官方要求至少2核CPU、4GB内存,但实际搭建双节点RAC,建议物理内存至少16GB,每个节点分配2-4个vCPU,虚拟化环境内存过小,SGA设不上去,ASM实例和DB实例互相争抢内存,日志文件切换慢是必然的。

问:RAC在虚拟机上坏了,怎么最快的定位是虚拟层还是Oracle层?

先停掉Oracle层面的集群服务,用iperf3打心跳网卡的带宽和延迟,如果延迟超过10ms,是网络问题;再对比宿主机磁盘的真实读写速率,低于200MB/s就要检讨存储配置,虚拟化层的问题,要回到宿主机去查,不要一直盯着oracle的alert日志。

虚拟机上跑RAC,多花点时间在设计虚拟化环境上,比调试Oracle本身更能解决问题,共享存储的独立性、心跳网络的隔离、时间同步的收敛,这三点按上面的招数做扎实,集群会稳定得多。这30招里,独立磁盘模式、UUID绑定、禁用时间同步是解决诸多实际问题的三个关键点,建议优先检查这几项。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/922508.html

赞 (0)
上一篇 2026年10月19日 14:08
下一篇 2026年10月19日 14:14

相关推荐

  • 唯品会域名多少钱,唯品会域名转让价格是多少?

    唯品会作为国内领先的特卖电商平台,其核心域名vipshop.com的估值早已达到数千万甚至上亿元人民币,属于企业核心的无形资产,在公开市场上无法直接购买,对于唯品会而言,这个域名的价值不仅仅在于其注册成本,更在于其承载的巨大品牌流量、用户信任度以及多年来积累的SEO权重,从专业域名投资和企业资产评估的角度来看……

    2026年2月25日
    02554
  • 织梦CMS二级域名如何设置?,织梦CMS二级域名怎么配置

    在2026年百度搜索算法体系下,DedeCMS二级域名的正确部署策略是提升网站权重与流量入口的关键,但必须严格遵循“内容独立、权重互通、避免重复”的实战原则,否则将面临降权风险,DedeCMS二级域名部署的2026年技术规范与实战指南基于百度搜索资源平台的配置标准2026年百度搜索资源平台强调,二级域名被视为独……

    2026年7月19日
    01372
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 域名系统包括什么?域名系统包括哪些部分?

    域名系统(DNS)是互联网的地址解析枢纽,其核心组成包括域名空间、域名服务器、解析协议三部分,三者协同工作使得用户可访问网站,域名系统的核心组成部分1 域名空间层次结构域名空间采用树形层级命名,从根域向下延伸,根域标注为“.”,其下为顶级域(如.com、.cn、.org),再向下为二级域及子域,每个节点对应一个……

    2026年7月19日
    01321
  • TK域名DNS怎么设置才正确?,TK域名DNS设置方法有哪些

    tk域名完全支持修改DNS服务器,通过将域名DNS指向Cloudflare、阿里云DNS等第三方服务,不仅能获得更快的解析速度,还能实现更灵活的资源记录管理, 本文将从修改方法、性能对比、常见问题三个维度,结合2026年域名行业最新实践,帮你全面掌握tk域名DNS配置,tk域名DNS修改方法修改前准备确保拥有t……

    2026年7月19日
    01351

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(4条)

  • cute593lover的头像
    cute593lover 2026年10月19日 14:10

    这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是独立部分,给了我很多新的思路。感谢分享这么好的内容!

  • 粉bot393的头像
    粉bot393 2026年10月19日 14:10

    读了这篇文章,我深有感触。作者对独立的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!

  • 大开心7524的头像
    大开心7524 2026年10月19日 14:11

    这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于独立的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!

    • lucky735fan的头像
      lucky735fan 2026年10月19日 14:12

      @大开心7524:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是独立部分,给了我很多新的思路。感谢分享这么好的内容!