Oracle RAC脑裂根本诱因是ocssd.bin进程因CPU、内存或I/O挤压导致调度延迟,击穿misscount超时阈值,而非单纯网络中断;其本质是资源争抢暴露仲裁机制的时间敏感性硬约束。

ocssd.bin 调度延迟直接触发脑裂
重负载下 ocssd.bin 无法按时执行心跳逻辑,不是配置问题,是系统资源硬约束:
- CPU 持续 >80%:Linux CFS 调度器推迟唤醒,心跳发送间隔从 1 秒拉长到 25–28 秒,misscount(默认 30 秒)只剩 2–5 秒容错
- 内存 swap 频繁:
ocssd.bin堆内存被换出,恢复需毫秒级等待,几次叠加就超时 - Voting Disk 所在 ASM 磁盘组 I/O 延迟 >150ms:clssnmCheckDskInfo 写票失败,CSSD 放弃磁盘心跳兜底,完全依赖已不稳的网络心跳
- 未启用大页(HugePages):
ocssd.binfallback 到普通页,TLB miss 激增,CPU 开销翻倍
验证方式:top -p $(pgrep ocssd) 查看 %CPU 和 TIME+;grep -i "swap" /proc/meminfo 确认是否 swap;iostat -x 1 5 观察 voting disk 对应 ASM 磁盘的 await 和 %util。
私网单路径是脑裂高发源头
单网卡、单交换机、甚至双网卡连同一台交换机,都等于把集群仲裁押在一根线上:
-
oifcfg getif必须显示私网接口(如bond0)被正确识别;若显示为空或错误名,CSSD 静默降级为单路径,crsctl stat res -t | grep network会显示 OFFLINE - 两台私网交换机必须物理隔离:不同品牌、不同供电回路、不同上联链路;严禁堆叠或虚拟化成逻辑单设备
- 私网子网(如
192.168.100.0/24)必须关闭 ICMP 重定向和代理 ARP:sysctl net.ipv4.conf.bond0.send_redirects=0、sysctl net.ipv4.conf.bond0.proxy_arp=0 - 拔线验证不能只拔一根网线:要分别拔 eth1(连交换机 A)、拔交换机 A 上联、再同时拔,观察
crsctl check cluster -all是否维持多节点在线
关键命令:ping -I bond0 -c 5 <peer_node_private_ip> 丢包率必须为 0;tcpdump -i bond0 port 12345 确认心跳包始终从活跃链路发出且对端稳定收到。
HAIP 初始化失败是 UDP 层静默中断
HAIP(High Availability IP)子接口没起来,不代表 ping 得通,而是底层 UDP 通信已失效:
-
ifconfig -a | grep 169.254必须看到类似enp0s9:1的 HAIP 子接口;没有即说明 HAIP 未完成绑定 -
arping -I eth1 -c 3 169.254.10.10失败?立即检查sysctl net.ipv4.conf.eth1.rp_filter—— 必须为0或2,不能是1 - 防火墙不止关
firewalld:iptables -L -n | grep -E "(169\.254|12345|12346)"确保 INPUT 链没 DROP 相关包 -
$GRID_HOME/log/<hostname>/cssd/ocssd.log出现has a disk HB, but no network HB即锁定 UDP 层故障
HAIP 不是可选项——它是 Oracle 11.2+ 强制启用的私网冗余机制,禁用或初始化失败会导致 CSSD 心跳走不通。
misscount 与 disktimeout 是串行判断链,不是并行开关
很多人调大 disktimeout 以为能兜底,其实它只在仲裁启动后才生效:
-
crsctl get css misscount返回 30,但业务高峰时ocssd.bin实际心跳间隔已达 28 秒 → 仲裁已启动 - 此时
disktimeout(默认 200 秒)才开始计时,但 voting disk I/O 若已延迟 180ms+,多次写票失败后 CSSD 直接放弃等待,按旧投票记录自裁 - 两节点集群最危险信号:
ocssd.log中反复出现clssnmWaitForAckstimeout或clssnmSendSyncfailed;crsctl stat res -t | grep ora.cluster_interconnect.haip在 ONLINE/OFFLINE 间抖动 - 不要盲目调大 misscount:它延长的是“疑似死亡”窗口,反而增加脑裂持续时间;优先保障
ocssd.bin调度稳定性
真正难处理的不是参数值本身,而是负载波动时 misscount 和 disktimeout 同时失守——这时靠调参没用,必须从资源隔离、进程优先级、I/O 路径优化入手。


















