导读:本期聚焦于IT柏拉图创作的《Oracle RAC节点被驱逐是什么原因?常见触发场景与排查思路详解》,敬请观看详情。Oracle RAC集群中某个节点突然重启,告警日志里出现节点驱逐记录,这是DBA经常遇到又最让人头疼的问题之一。节点驱逐本质上是集群软件为了保护数据一致性而采取的自救行为,但触发原因五花八门:可能是心跳网络抖动、磁盘心跳超时,也可能是节点负载过高导致进程无响应、CSSD或LMS进程被挂起,还有misscount、disktimeout等参数配置不合理埋下的隐患。本文将从驱逐机制的基本原理讲起,逐项分析网络、存储、主机资源、数据库层四类常见诱因,并结合告警日志、OCR、os watcher等工具给出系统化的排查方法,帮助你在故障发生时快速定位根因,避免盲目重启。

Oracle RAC的节点驱逐(Node Eviction)是集群管理中最高频也最容易误判的故障之一。表面上看起来是某个节点毫无征兆地重启了,实际上驱逐是Clusterware在检测到节点健康状态异常后,为了保护集群数据一致性而主动执行的自救动作。被驱逐的节点会执行重启(版本不同行为略有差异),如果根因没有找到,问题往往会反复出现。要彻底解决,必须先理解驱逐的判定机制,再按网络、存储、主机、数据库四个层面逐项排查。

Oracle RAC节点被驱逐是什么原因?常见触发场景与排查思路详解

一、节点驱逐的判定机制:CSSD如何决定踢掉一个节点

RAC集群中每个节点都运行着CSSD(Cluster Synchronization Service Daemon)进程,它负责维护集群成员资格。节点之间通过两种心跳交换存活信息:一种是网络心跳,走私有互联网络(interconnect),默认每秒一次;另一种是磁盘心跳,通过投票磁盘(Voting Disk)进行,用于网络心跳失效时的仲裁。当CSSD在misscount(默认30秒,11g后部分平台为60秒)时间内没有收到某节点的网络心跳,或节点在disktimeout(默认200秒)内无法完成磁盘心跳,就会判定该节点失联并触发驱逐。

驱逐本身分两种情形:一种是本节点CSSD发现自身无法与集群通信,主动执行自我重启,日志中通常表现为rebooting due to communication failure;另一种是被其他节点判定死亡后通过网络指令强制重启。11.2.0.2之后的版本引入了Agent框架和自我驱逐的细化分级,很多场景下节点会先尝试自我修复,只有无法恢复才真正reboot。理解这一点很重要:日志里出现的驱逐只是结果,真正的病灶可能在CSSD进程被饿死、心跳链路中断或投票盘响应缓慢等更底层的位置。

-- 查看当前集群的心跳相关配置
crsctl get css misscount
crsctl get css disktimeout
crsctl get css reboottime
-- 查看集群节点状态与投票盘信息
crsctl query css votedisk
olsnodes -s -t

一个常见误区是把misscount调大来掩盖问题。如果心跳延迟的根因是主机严重swap或IO hang,调大参数只会延后驱逐发生的时间,并不能避免故障,甚至可能在脑裂(Split Brain)风险上留下隐患。参数调整必须建立在根因明确的基础上。

二、网络与存储层面:心跳链路是最常见的诱因

统计实际案例,网络问题占RAC驱逐原因的相当大比例。私有网络抖动、交换机故障、网卡驱动缺陷、bonding配置不当,都会导致网络心跳在misscount窗口内丢失。排查时要重点关注gi_home/log/节点名/alert节点名.log中的驱逐记录前后时间段,通常会看到类似misscount 30 has expirednetwork is not communicating的提示。配合OSW(OS Watcher Black Box)的netstat、slinux数据归档,可以还原故障时刻私有网络的丢包和重传情况。此外,如果互联网络经过了非专用交换机,或与其他业务流量共享带宽,大流量传输引发的网络延迟同样可能触发驱逐,这也是Oracle强烈要求interconnect使用独立高速网络的原因。

磁盘心跳问题同样不可忽视。存储阵列响应缓慢、多路径软件切换超时、Voting Disk所在LUN的IO延迟超过disktimeout,都会让节点被判定为异常。值得注意的细节是:如果Voting Disk放在ASM磁盘组中,而该磁盘组同时还承载OCR和数据文件,一旦存储出现整体性IO hang,磁盘心跳与业务IO会同时受害,问题会表现为数据库层面大量enq等待与节点驱逐并存。排查存储问题时,除了查看alert log中的Waiting for DVIO类记录,还应结合存储侧的性能数据和主机端的iostat、多路径日志一起分析。

# 检查私有网络配置与丢包情况
netstat -s | grep -i -E "retrans|drop"
ifconfig -a | grep -A1 bond
# 查看GI告警日志中的驱逐相关记录
grep -i -E "evict|misscount|reboot" $GRID_HOME/log/`hostname -s`/alert`hostname -s`.log
# 检查投票盘IO响应
crsctl query css votedisk
crsctl stat res -t

三、主机资源与数据库进程:被忽视的软件层杀手

很多驱逐案例最终定位到的是主机资源问题而非硬件故障。最典型的是CPU严重耗尽或大量swap:当节点负载过高时,CSSD进程可能长时间得不到调度,无法按时发出心跳,集群便认为节点死亡。这类问题的隐蔽之处在于,重启后负载下降,一切看起来正常,只有OSW的历史数据才能还原真相。同样的道理,LMS进程(Global Cache Service的Server进程)如果因为数据文件IO hang或bug而长时间阻塞,也可能通过reconfig机制引发节点重启。排查时应重点检查故障时刻的vmstat、top数据,看是否存在runq持续高于CPU核数、swap in/out活跃、CPU single user mode占比异常等情况。

数据库和集群软件自身的缺陷也是重要来源。比如特定版本CSSD、OHASD的已知bug,GRID打补丁不及时,或者第三方软件(如监控Agent、防病毒进程)误杀或挂起Oracle关键进程。Oracle MOS上大量已知问题都对应着特定的patch,遇到无明确外部诱因的驱逐时,核对GI和DB的PSU版本、检索已知bug是必做步骤。另外,内存管理参数配置不当,比如vm.min_free_kbytes设置过低导致内存耗尽时进程被OOM Killer杀掉,也可能间接造成驱逐。

# 从OSW归档中回溯故障时刻的负载
cd /osw/archive/vmstat
# 关注 r 列(runq)、si/so(swap) 、cs 上下文切换
# 检查Oracle关键进程是否被OOM杀掉
dmesg | grep -i -E "kill|oom"
grep -i "out of memory" /var/log/messages
# 检查CSSD进程的调度延迟痕迹
grep -i " scheduling delay " $GRID_HOME/log/`hostname -s`/cssd/ocssd.log

最后需要提醒的是,每次驱逐发生后务必保留完整的故障现场:alert log、ocssd.log、OSW归档、主机messages日志,以及Automatic Diagnostic Repository下的驱逐相关trace文件。没有这些证据,后续的根因分析基本无从谈起。日常运维中建议部署OSW或exawatcher并保证归档周期覆盖数天,同时对私有网络做冗余和监控,这两项投入能显著降低驱逐问题的定位难度。

Oracle RAC节点驱逐OCR修改时间:2026-09-05 13:52:37

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50947.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。