Oracle RAC私网冗余必须使用HAIP而非bonding,因HAIP专为ocssd.bin心跳设计,仅做故障切换;若配置bonding会干扰心跳检测,导致ora.cluster_interconnect.haip异常离线且日志无明确报错。
Oracle 11.2.0.2+ 禁止在操作系统层做 bonding(尤其是 mode=0 或 mode=4),HAIP 自己管理链路切换,底层绑卡反而干扰心跳检测逻辑。常见症状是 crsctl stat res -t 中 ora.cluster_interconnect.haip 反复 OFFLINE 或 INTERMITTENT,日志里却看不到明显报错。
eth1 和 eth2 各自配同网段 IP(如 10.10.20.11/24、10.10.20.12/24),不配置 bond0,不启 teamd
echo 0 > /sys/class/net/bond0/bonding/miimon,再 ip link delete bond0,最后重启网络服务ocssd.bin 的 UDP 心跳;它也不做负载均衡,只做故障切换oifcfg setif 写错子网掩码或接口名,HAIP 就不会在对应网卡上创建 169.254.x.x 子接口——而这个失败几乎不报错,ocssd.log 里只有一行 “clssnmvDHBValidateNCopy: no network HB”,crsctl stat res -t -init 却显示 ONLINE,极具迷惑性。
ip addr show eth1 | grep inet,拿到精确的 CIDR(如 10.10.20.0/24)oifcfg setif -global eth1/10.10.20.0:cluster_interconnect,不能写成 10.10.20.0/24 或漏掉 :cluster_interconnect
oifcfg getif 检查输出是否含两行相同网段、不同接口;若只有一行,说明第二张卡未被识别看到 ora.cluster_interconnect.haip 资源状态异常,第一反应不该是改网卡或重启 CRS,而是确认 HAIP 是否真被创建出来、UDP 心跳能否通。
ifconfig -a | grep 169.254:没有 eth1:1 或 enp0s8:1 这类带冒号的子接口,说明 HAIP 初始化失败$GRID_HOME/log/<hostname>/cssd/ocssd.log,搜 no network HB 或 clssnmvDHBValidateNCopy;若出现 “has a disk HB, but no network HB”,基本锁定 UDP 层不通arping -I eth1 -c 3 169.254.10.10(任一节点 HAIP 地址);失败则检查 sysctl net.ipv4.conf.eth1.rp_filter 是否为 0 或 2,不能是 1
12345–12350,且不能 DROP 目标为 169.254.0.0/16 的包配了双网卡、连了双交换机,仍发生脑裂,大概率是“伪冗余”:两块网卡实际连到同一台交换机(只是不同端口),或两台交换机共用电源/上联光模块。HAIP 切换成功 ≠ 真正跨设备容灾。
eth1(接交换机 A),观察 ifconfig 是否立刻在 eth2 上生成新 HAIP;同时 tcpdump -i eth2 port 12345 应持续捕获心跳包crsctl check cluster -all 是否维持全部节点 ONLINE,而非节点 A 被驱逐HAIP 是手段,不是目的;真正防脑裂靠的是网络心跳 + 磁盘心跳 + Quorum 三者协同。单点冗余没用,冗余必须贯穿物理链路、OS 配置、集群参数三层,任何一层断开都会让前面所有配置失效。