如何快速判断ocssd.log中是否真的丢失了网络心跳
不要只查看alert.log或/var/log/messages,这些日志记录的是最终结果而非根本原因。正确的排查路径是直接分析ocssd.log文件,路径为:/oracle/11.2.0/grid/log/。

- 搜索
CRS-1611:该错误表示连续丢失了75%的心跳包。附带的时间值(例如in 6.512 seconds)越小,表明恢复窗口越窄,问题越紧迫。 - 搜索
CRS-1610:表示心跳丢失率已达90%,逼近驱逐阈值。如果只有当前节点报告此错误,而其他节点未出现对应的CRS-1612(“this node was evicted by node X”),则很可能是本端接收数据包异常,例如网卡rx_discards非零或遇到中断风暴。 - 搜索
CRS-1607:表明驱逐已执行,节点即将重启。此时执行crsctl stat res -t会失败,但crsctl stat res -t -init仍可显示底层资源状态。
如果多个节点在同一时间段密集出现上述日志,则可基本排除单点故障,应重点排查底层网络抖动或配置不一致问题。
为什么修改私网网卡名称或IP地址后HAIP无法启动
这是很多运维人员容易踩的坑。从Oracle 11.2.0.2版本开始,RAC采用HAIP替代传统的bonding技术。HAIP不识别手动配置的IP地址,只认GPnP中注册的私网接口。如果用户将网卡从 eth1 更换为 eth2,但未同步更新GPnP配置,HAIP将无法找到可用网卡,导致启动过程卡住。
- 首先确认当前识别的私网接口:执行
$GRID_HOME/bin/oifcfg getif -global,输出结果中应包含cluster_interconnect标记。 - 如果显示的是旧网卡(例如
eth1/100.100.100.0:cluster_interconnect),则需要重新设置:$GRID_HOME/bin/oifcfg setif -global eth2/10.10.10.0:cluster_interconnect。 - HAIP地址段固定为
169.254.0.0/16,不能手动指定。它会在激活的私网接口上自动分配1到4个地址。如果绑定失败,执行ifconfig将看不到169.254.x.x别名。 - 修改完成后,必须完全停止集群再重新启动:
crsctl stop crs→ 等待所有进程退出 →crsctl start crs。不能仅重启ohasd。
ORA-29740是集群驱逐的结果,而非根本原因
虽然很多文档已经强调过这一点,但实际排查时仍容易陷入误区。ORA-29740 出现在 alert.log 中,仅仅是集群层CSS主动驱逐节点的一个信号,通常会伴随 evicting instance x from cluster 或 this node was evicted by node y 信息。它表明节点已被判定为“失联”,但并未说明失联的具体原因。
- 常见的诱因包括:
IPC Send timeout detected(网络IPC超时)、disk heartbeat failed(磁盘心跳失败)、Oracle已知Bug(例如11.2.0.4版本在高负载Linux环境下的ocssd.bin竞争)、底层资源瓶颈(如共享存储的iostat -x 1输出显示%util > 50或await > 50ms)。 - 私网交换机丢包、端口震荡、MTU不一致(尤其在VMware中混用
e1000和vmxnet3网卡时)、防火墙误拦截UDP数据包(默认端口范围12500–12600)等都可能导致心跳被误判为丢失。 - 时间不同步也会引发连锁反应:CTSS日志中可能出现异常返回值,
ntp offset超过秒级时,ocssd对心跳延迟的判断就会失准。
容易被忽略的底层网络与配置细节
许多排查工作止步于“网络通了”“IP配对了”,但真正导致问题的往往是更细微的链路层行为。例如:
rx_discards非零但未被监控到——这通常意味着网卡驱动或中断处理能力已达上限,这不是丢包,而是网卡主动丢弃。- HAIP启动后看不到
169.254.x.x地址,第一反应是配置错误,但实际原因可能是oifcfg指向的子网掩码与物理网卡不匹配(例如配置了/24,而网卡实际是/23)。 ocssd.log中的报错时间晚于节点重启时间?这说明日志写入本身已受阻,需要向前翻至少5分钟以上的日志内容,寻找最早的异常记录。
