不能手动配双网卡同网段IP,因会导致ARP表混乱、CSSD心跳乱序及HAIP资源反复OFFLINE;必须用Oracle自动管理的HAIP(169.254.x.x),通过oifcfg setif注册网卡、停启HAS生效,并关闭NetworkManager、设rp_filter=0、放行UDP端口。

oifcfg setif 是核心命令,但直接配两个同网段静态IP会触发ARP冲突、心跳乱序,集群大概率报 ora.cluster_interconnect.haip OFFLINE 或反复 INTERMITTENT。必须用 HAIP(High Availability IP),由 Oracle 自动管理虚拟地址,底层不依赖 Linux bonding。
为什么不能手动配双网卡同网段IP
常见错误是给 eth2 和 eth3 都配上 10.10.20.10/24 和 10.10.20.11/24 这类静态地址——这会导致:
• 内核 ARP 表混乱,节点间 arping -I eth2 10.10.20.11 可能超时
• CSSD 心跳包从不同接口发出,对端无法按序校验,ocssd.log 出现 clssnmvDHBValidateNCopy: invalid sequence
• crsctl stat res -t 中 ora.cluster_interconnect.haip 状态飘忽,甚至长期 OFFLINE
正确配置 HAIP 冗余的三步操作
以节点上已有 eth2 和 eth3 两块物理网卡、目标私网网段为 10.10.20.0/24 为例:
- 确认两块网卡已启用且仅配基础属性(禁用 IPv6、不配 IP):
ifconfig eth2 up、ifconfig eth3 up,不要 在/etc/sysconfig/network-scripts/ifcfg-eth2里写IPADDR - 用
oifcfg setif告诉 GI 这两张卡都归属私网:oifcfg setif -global eth2/10.10.20.0:cluster_interconnect,再执行oifcfg setif -global eth3/10.10.20.0:cluster_interconnect - 重启集群使 HAIP 生效:
crsctl stop has && crsctl start has;之后ifconfig -a | grep "169.254"应看到类似eth2:1或eth3:1的子接口,带169.254.x.x地址
必须关闭 NetworkManager 并调低 rp_filter
HAIP 依赖精确的 ARP 行为,而 NetworkManager 会劫持接口状态和路由通告,rp_filter=1 则拒绝非对称路径的 UDP 包(HAIP 心跳常用):
- 停服务:
systemctl stop NetworkManager && systemctl disable NetworkManager - 设内核参数:
echo 'net.ipv4.conf.eth2.rp_filter = 0' >> /etc/sysctl.conf,同样处理eth3;然后sysctl -p - 防火墙必须放行 UDP 12345–12350 端口,并允许目标为
169.254.0.0/16的包,不能 DROP
验证是否真冗余,不是假绑定
很多团队以为配了双卡就安全了,实际拔一根线后集群仍驱逐节点——问题出在未跨物理设备验证:
- 拔掉节点 A 的
eth2(连交换机 A),运行tcpdump -i eth3 port 12345,确认心跳包持续发出且对端tcpdump -i eth2 port 12345能稳定收到 - 同时断开交换机 A 的上联光缆,观察
crsctl check cluster -all是否仍显示两节点 ONLINE,而非单节点被驱逐 - 检查
oifcfg getif输出中必须有两行同网段、不同接口;若只有一行,说明第二张卡未被识别,常见原因是接口名拼错或网卡未up
HAIP 不是“配完就完事”的功能,它对底层网络行为极其敏感。最容易被忽略的是 rp_filter 设置和 NetworkManager 干扰——这两项不处理,哪怕 ifconfig 看起来一切正常,ocssd.log 里也会静默出现 no network HB,直到脑裂发生才暴露。











