oracle 11g rac节点自动重启大概率由网络心跳超时触发驱逐,核心依据是ocssd.log中是否密集出现crs-1611→crs-1610→crs-1607递进日志;若存在,表明节点被集群投票踢出,而非硬件或os崩溃,需重点检查私网配置、haip、bonding模式及时间同步。
oracle 11g rac节点自动重启,大概率是网络心跳超时触发的驱逐(eviction),而不是硬件或os崩溃。核心线索在ocssd.log里是否密集出现crs-1611→crs-1610→crs-1607这一递进序列;若存在,说明集群已判定该节点“失联”,不是它不想活,而是被其他节点投票踢出。
怎么看ocssd.log里是不是真丢了网络心跳
直接查/oracle/11.2.0/grid/log/<hostname>/cssd/ocssd.log</hostname>,不要翻alert.log或messages——那些是结果,不是根因。重点搜三类错误:
-
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起不来
从11.2.0.2起,RAC用HAIP替代传统bonding,它不认你手动配的IP,只认GPnP里注册的私网接口。一旦你把eth1换成eth2,但没同步更新GPnP配置,HAIP就找不到可用网卡,直接卡在启动阶段。
- 先确认当前识别的私网接口:
$GRID_HOME/bin/oifcfg getif -global,输出应含:cluster_interconnect标记 - 若显示旧网卡(如
eth1/100.100.100.0:cluster_interconnect),必须用oifcfg setif重设:$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
网卡绑定(bonding)后为什么还丢心跳
Linux bonding本身不保证RAC私网高可用——如果模式选错、驱动有bug、或交换机端口没配成LACP,bond可能根本不起作用,甚至引入额外延迟。
- 必须用
mode=1(active-backup),别碰mode=4(802.3ad):RAC私网流量是点对点TCP,不是广播,负载均衡模式在Linux下基本无效,还容易导致乱序 - 检查
ethtool -S eth2 | grep -E "(rx_discards|rx_errors|tx_aborted_errors)",只要非零,就是物理层或驱动问题,和Oracle配置无关 - bond接口的MTU必须和物理网卡一致(通常1500),且交换机端口要允许该MTU;MTU不匹配会导致GC包被静默丢弃,
ping测不出,但GV$SYSTEM_EVENT里gc cr block busy等待时间桶会集中在2–5ms区间 - 别信
ifconfig的RX/TX字节数算带宽利用率:它统计L2帧长,而GC走TCP载荷,每包多40–60字节,直接套用会高估15%–20%
最容易被忽略的三个点
一是时间同步偏移超过1秒,CTSS会降级为NTP模式,ocssd对心跳超时判断会变敏感;二是misscount默认30秒,但若集群里跑着其他高可用软件(如Veritas),它会被拉长到600秒,导致驱逐延迟,掩盖真实抖动;三是HAIP依赖avahi-daemon服务发布链路本地地址,该服务若被禁用或SELinux阻止,HAIP就起不来——查systemctl status avahi-daemon比查crsctl更早暴露问题。











