查不到udp心跳包是因防火墙静默丢弃,需双向放行私网udp 0-65535端口、icmp基础类型及tcp 2016,并用arping、oifcfg、tcpdump逐层验证二层连通性、ocr注册与抓包。

查不到 UDP 心跳包?先确认是不是被防火墙静默丢弃
tcpdump -i eth2 udp portrange 1024-65535 -c 10 完全没输出,不是网络延迟,是系统层拦截。Oracle RAC 私网通信用动态 UDP 端口(非固定 1521),防火墙若只放行 ESTABLISHED/RELATED 或仅开 TCP 2016,UDP 心跳根本发不出去。
- 必须双向显式放行:入方向源 = 对端私网 CIDR,协议 = UDP,端口 = 0-65535;出方向目标 = 对端私网 CIDR,协议 = UDP,端口 = 0-65535
- 云环境(AWS/Azure/阿里云)安全组/NACL 默认不处理 UDP 状态,
RELATED,ESTABLISHED规则无效,漏一条就卡在ora.cluster_interconnect.haip启动阶段 -
sysctl net.ipv4.conf.eth2.rp_filter值为 1 且路由不对称时,内核会静默丢弃回包,需设为 0 或 2
arping 失败比 ping 更能定位二层阻断
ping 可能被 ICMP 策略禁用,而 arping 不依赖 IP 层,直接走 ARP 协议。执行 arping -I eth2 10.0.0.102,失败即表明二层不通——常见于云平台安全组默认拒绝 ARP、交换机 ACL 限制或物理链路松动。
- 若 arping 失败,先检查网卡是否 up:
ip link show eth2,再确认对端节点该 IP 是否配置且同子网 -
/etc/hosts中私网 IP 解析失败也会导致 CRS 尝试 DNS 解析失败,日志出现WARNING 192.168.11.0 could not be translated - 执行
oifcfg getif,确认私网接口已注册进 OCR;未注册则oifcfg setif -global eth2/10.0.0.0:cluster_interconnect,子网掩码必须与实际一致
ocssd.log 出现 MISSING HEARTBEAT ≠ 网络断了
日志里写 MISSING HEARTBEAT,常被误判为网络故障,实际是 CSSD 主动停发心跳——因为 voting disk IO 阻塞(iostat -x 1 中 await > 50ms 或 %util > 95%),或 HAIP 根本没起来(ifconfig -a | grep 169.254 无输出)。
- 搜
ocssd.log中clssnmDiskPing和clssnmvDHBValidateNCopy:若前者先中断或长时间无记录,后者突然消失,就是存储 IO 问题 - UDEV 权限错误(如 ASM 磁盘
MODE="0660"缺失)也会导致 CSSD 读/dev/asm-vote01失败,触发停发 - 别调
misscount或_gc_affinity_time,这些对 IO 阻塞无效;优先查crsctl stat res -t -init确认ora.cssd是否 ONLINE
多节点同期密集报 CRS-1611/1610/1607?大概率是底层网络抖动
这不是单点故障,是交换机 STP 收敛、ARP 延迟或物理链路瞬断导致的批量丢包。crsctl check cluster -all 返回正常不代表私网稳定,它不测毫秒级延迟和丢包率。
- 用
ping -c 100 -i 0.1,关注 >5ms 的包占比;RAC 要求 95% 包 ≤2ms,>5% 超过 5ms 就可能引发 GC 等待飙升 -
ethtool -S eth2 | grep -E "(rx_discards|rx_errors)"非零值指向物理层问题:驱动缺陷、交换机 QoS 限速或光纤衰减 - 真正根治要结合
GV$SYSTEM_EVENT查gc cr block busy等待事件的时间桶分布:集中在 16–32ms 桶才是真实抖动;集中在 1–4ms 桶,90% 是 SQL 或锁争用











