首先需要明确一个关键区分:当遇到节点“自动下线”时,很多人的第一反应是系统崩溃或进程异常,但真正值得警惕的是——节点本身并未宕机,而是被 CSSD 主动踢出集群。这种驱逐(eviction)在 Flex Cluster 模式下尤为隐蔽,因为你可能看到节点状态显示在线,但集群却认为它已失联,从而强制将其移出。

如何判断是 CSSD 主动驱逐还是系统崩溃
不要只盯着系统重启时间看,那容易产生误导。必须结合日志和进程状态进行对照分析:
- 先检查
ocssd.log文件,搜索node eviction initiated或reboot advisory。如果该时间戳早于dmesg或/var/log/messages中的重启记录,则大概率是集群主动驱逐,而非系统自身故障 - 执行
crsctl stat res -t命令:如果所有资源都显示OFFLINE,但crsctl check cluster -all却显示节点 “ONLINE”——这意味着节点虽然已注册但未成功加入通信环,处于一种不上不下的中间状态 - 再查看进程状态:运行
ps -ef | grep cssd,若 cssd 进程消失或僵死,而 ohasd 仍在运行,则十有八九是心跳中断后,CSSD 自行终止了自身进程
完成这三个检查点后,基本就能断定是驱逐还是崩溃。
Flex Cluster 模式下三大隐性驱逐根源
Flex 架构放大了底层不稳定的影响,尤其是在 hub/leaf 分离后,问题更容易被掩盖
根因一:voting disk 所在的 ASM 磁盘组 IO 延迟过高。通过 iostat -x 1 检查,若 %util 超过 95% 或 await 超过 50ms,则磁盘心跳大概率已超时,即使调大 disktimeout 参数也无法挽回。
根因二:私有网络“假连通”。NIC offload 设置(例如 ethtool -K eth1 gro on)可能导致 TCP 重传异常,虽然 ping 可以通,但 traceroute -n 显示路径不稳定。这种表面连通实则不稳定的状态最具迷惑性。
根因三:ora.cluster_interconnect.haip 服务未启动。使用 ip a | grep 169.254 检查,若无输出,则说明 HAIP 已失效。此时 hub node 之间的心跳中断,leaf node 因依赖 hub 而集体失联。
Flex Cluster 特有风险:leaf node 间接导致 hub 驱逐
leaf node 本身不参与 voting,但绝不可认为它安全。它通过 hub node 访问数据,一旦其上运行的应用出现异常(例如大量占用私有网络带宽或触发内核资源争用,如 UDP socket flood),就可能拖垮所连接 hub node 的网络栈,最终导致该 hub node 被其他 hub node 驱逐。
如何排查?首先检查 netstat -s | grep -i "receiving errors" 和 cat /proc/net/snmp | grep -i "Udp:",确认是否存在 UDP 接收溢出。当 leaf node 上运行中间件时,若未限制网络连接数或未禁用 Nagle 算法,私有网络拥塞将进一步加剧。如果 hub node 的 cssd 日志中频繁出现 missed heartbeat from node X,而 X 是 leaf node,则问题并非出在 leaf node 本身,而是其所连接的 hub 节点负载过高。
Flex Cluster 的分层设计使得故障定位更加隐蔽:leaf node 未宕机并不代表 hub node 安全;hub node 未报错也不意味着私有网络链路健康。真正需要监控的重点是:HAIP 是否在线、voting disk 的 IO 响应时间、以及通过 traceroute 检查到每个私有网络 IP 的路径稳定性。一旦遗漏这些细节,驱逐就会成为常态。
