MISSING HEARTBEAT是CSSD因voting disk IO阻塞(await>50ms或%util>95%)主动停发心跳的声明,非网络故障;应查ocssd.log中clssnmDiskPing是否先于clssnmvDHBValidateNCopy中断,前者先消失即锁定存储IO问题。

查 ocssd.log 里有没有发包记录,别只盯着“收不到”
MISSING HEARTBEAT 日志不是网络丢包的证据,而是 CSSD 主动停发心跳的声明。关键要看 ocssd.log 里 clssnmDiskPing 和 clssnmvDHBValidateNCopy 哪个先消失:前者中断在前,说明是 voting disk IO 阻塞(iostat -x 1 看 await > 50ms 或 %util > 95%);后者突然没了而前者还在,才真该查网络。
常见误判点:
- 看到
CRS-1611就改misscount——对 IO 卡死完全无效 - 反复
ping私网 IP 成功就认为网络通——arping -I eth2 10.0.0.102才能绕过 IP 层策略验证二层连通性 - 忽略 HAIP 是否真正生成:
ifconfig -a | grep 169.254没输出,说明心跳通信载体根本没起来
抓包确认 UDP 流量是否被防火墙静默丢弃
执行 tcpdump -i eth2 udp portrange 1024-65535 -c 10 在私网接口抓包,若一条记录都没有,不是延迟高,是系统层已拦截。云环境尤其典型:NACL/AWS 安全组的 RELATED,ESTABLISHED 规则对 UDP 无效。
必须显式配置双向规则:
- 入方向:源 = 对端私网 CIDR,协议 = UDP,端口 =
0-65535 - 出方向:目标 = 对端私网 CIDR,协议 = UDP,端口 =
0-65535 - 顺手放开
TCP 2016(gipcd 探测端口)和基础 ICMP Type 3(Destination Unreachable)
别碰 1521——它和集群心跳无关,开它只会扩大攻击面。
验证 HAIP 和 GIPC 是否识别到正确网卡
HAIP 子接口不出现,或 GIPC 日志里显示 eth1 - rank 0(正常应为 rank 99),说明底层网络状态未被集群组件正确感知。这不是配置问题,而是状态同步失败。
操作顺序不能错:
- 先用
oifcfg getif确认 OCR 中注册的私网接口和子网是否匹配实际 IP - 再检查
/etc/hosts中私网 IP 是否可解析,DNS 不得参与私网地址解析 - 最后执行
crsctl stop has→ 等ps -ef | grep -i "cssd\|ohasd"全退出 →crsctl start has;仅重启ora.cluster_interconnect.haip资源无效
看 ethtool 和 netstat 找物理层线索
ethtool -S eth2 里 rx_discards、rx_errors 非零,指向驱动、交换机 QoS 或链路不稳定;netstat -s | grep -i "reasmfails" 持续增长,基本锁定 MTU 不匹配(比如一端设 9000,另一端仍是 1500)。
验证巨帧是否可行:ping -c 2 -M do -s 8972 node2-priv,若返回 Frag needed and DF set (mtu = X),说明已超限,需统一 MTU。
注意:ifconfig eth2 的 RX/TX 字节数不能直接换算带宽利用率——它含以太网头,Oracle GC 流量走 TCP 载荷,每包多出 40–60 字节,直接套用会高估 15%–20%。
真实排查中最容易被跳过的环节,是确认 HAIP 子接口是否存在和 GIPC 对网卡 rank 的识别状态。这两项不成立,后面所有网络层检查都只是在验证一个尚未启用的通道。


















