私有网络连通性排查需先验证OS层:ping测试三层连通,arping确认二层响应;检查OCR记录的私网接口是否匹配实际硬件;验证HAIP通信及MTU一致性;调大UDP接收缓冲区防gc block lost。
确认私有网络是否真的连通
很多“心跳异常”其实是操作系统层连通性就断了,别急着翻oracle日志。先在节点1上 ping 节点2的私有ip(比如 192.168.11.33),再用 arping -i eth2 192.168.11.33 验证arp响应是否正常——这能绕过icmp可能被禁用的问题。
常见错误现象包括:ping 通但 arping 失败,说明二层不通;ping 不通但网卡 ifconfig 显示UP/RUNNING,大概率是网线松动、交换机端口down或VLAN配置错。
注意:RAC不支持交叉线直连,必须经交换机;若共用业务交换机,务必用VLAN隔离私网流量,否则广播风暴或策略冲突会干扰心跳。
检查OCR中记录的私网接口是否匹配实际硬件
OCR里存的是集群启动时认定的私网设备名,一旦物理网卡更换(比如原eth1坏了换成eth2),而OCR没更新,CSSD进程就会持续尝试向不存在的接口发心跳,日志里反复出现 WARNING 192.168.11.0 could not be translated to a network address。
执行以下操作验证并修复:
- 查当前OCR配置:
oifcfg iflist -p -n,确认记录的私网接口名(如eth1/192.168.11.0) - 查真实网卡:
ip addr show或ifconfig,找到实际承载私网IP的设备(如eth2) - 删除旧配置:
oifcfg delif -node node1 eth1/192.168.11.0 - 添加新配置:
oifcfg setif -node node1 eth2/192.168.11.0:cluster_interconnect
修改后无需重启整个集群,但需重启CSSD服务:crsctl stop res ora.cssd -init && crsctl start res ora.cssd -init。
HAIP地址通信失败导致ASM无法启动(11g/19c常见)
从11.2.0.3起,Oracle默认启用HAIP,自动在私网接口上分配 169.254.x.x 地址。如果这个地址段通信失败,即使OS层ping通,ASM实例也会卡在STARTING状态,告警日志报 LMON failed to connect to CSS 或类似网络超时。
关键检查点:
- 确认HAIP已生成:
oifcfg getif应显示169.254.x.x地址绑定到私网接口 - 测试HAIP连通性:
ping -I eth2 169.254.1.2(目标为另一节点的HAIP) - 若不通,优先排查MTU设置:私网两端网卡、交换机端口MTU必须一致;常用值为9000(巨帧),但需验证:
ping -M do -s 8972 node2-priv,失败则逐步调小 - 临时禁用HAIP可快速验证是否为根因(仅限排障):
crsctl modify css boot -h no,然后重启CSSD
注意:169.254.x.x 是链路本地地址,不能路由,也不该出现在任何路由表或防火墙规则里——若误配静态路由或iptables DROP了该网段,HAIP必死。
UDP接收缓冲区过小引发gc block lost
心跳本身是轻量UDP包,但RAC全局缓存(GC)块传输也走同一私网,且突发性强。若内核UDP接收缓冲区太小,会导致socket溢出,表现为 gc block lost 等等待事件飙升,继而触发误判式心跳超时。
检查与调优:
- 查看当前值:
sysctl net.core.rmem_max和net.ipv4.udp_mem - Oracle建议最小值:
net.core.rmem_max = 4194304(4MB),net.ipv4.udp_mem = "8388608 12582912 16777216" - 临时生效:
sysctl -w net.core.rmem_max=4194304 - 永久生效:写入
/etc/sysctl.conf并sysctl -p
这个参数容易被忽略,尤其在云环境或容器化部署中,默认值常远低于RAC要求。改完后务必用 ss -i 观察UDP socket的 rcv_space 是否提升,否则可能未真正加载。











