oracle haip是11.2.0.2+引入的自动私网高可用机制,由ohasd.bin管理ora.cluster_interconnect.haip资源,在每块私网网卡绑定169.254.x.x地址,依赖rp_filter=0避免多路径通信被拦截。

Oracle HAIP 不需要你手动“使用”,它在 Grid Infrastructure 启动后自动生效;真正要做的,是确保底层网络配置不干扰它运行——尤其是 rp_filter 参数。
HAIP 是什么,它怎么自动工作的
HAIP(Highly Available IP)是 Oracle 11.2.0.2+ 版本引入的私网高可用机制,不是你配一个 IP 就完事的工具,而是一套由 ohasd.bin 管理的资源:ora.cluster_interconnect.haip。它会在每个已识别的私网网卡上自动绑定一个 169.254.x.x 地址(子网掩码通常是 255.255.128.0),无需手动指定或修改。
- 私网网卡数决定 HAIP 数量:1 块 → 1 个 HAIP;2 块 → 2 个;3 或 4 块 → 最多 4 个(实际数量以最先启动节点识别到的网卡为准)
- HAIP 地址只用于集群内部通信(如 CSS、CRS、ASM、DB 实例间心跳和数据交换),不能被 ping 通,也不该出现在
/etc/hosts中 - 网卡故障时,对应 HAIP 会秒级漂移到其他健康私网网卡,无需重启集群服务
为什么 HAIP 启动失败或通信异常
最常见原因不是 Oracle 配置错,而是 Linux 内核网络参数拦截了 HAIP 流量。关键就是 rp_filter(Reverse Path Filtering)。
-
rp_filter=1(默认值)在多网卡场景下会丢弃“入口网卡 ≠ 出口网卡对应路由”的包——这正是 HAIP 负载均衡和故障漂移的正常行为 - 现象包括:
crsctl stat res -t -init显示ora.cluster_interconnect.haip为OFFLINE;ifconfig -a看不到ethX:1虚拟接口;CSSD 日志反复报 “GIPC error” 或 “timeout on private interface” - 必须将所有私网网卡对应的
rp_filter设为0(关闭反向路径检查),不能只设全局值net.ipv4.conf.all.rp_filter=0,因为部分内核版本仍会按接口单独检查
如何验证和确认 HAIP 已就位
别依赖 ping 或 telnet,用 Oracle 自带命令和系统视图交叉验证:
- 查资源状态:
crsctl stat res ora.cluster_interconnect.haip -init,应为ONLINE - 查绑定网卡:
oifcfg getif,输出中带cluster_interconnect标签的才是私网接口 - 查系统接口:
ifconfig -a | grep 169.254,应看到类似eth2:1这样的别名接口 - 查数据库视角:
SELECT * FROM GV$CLUSTER_INTERCONNECTS;,返回结果中的IP_ADDRESS应与ifconfig输出一致
容易被忽略的兼容性细节
HAIP 看似开箱即用,但几个边界情况常导致上线后突然中断:
- 新增私网网卡后,必须重启整个集群(
crsctl stop crs && crsctl start crs),仅oifcfg setif不生效 - 19c 及以后版本对私网连通性检查更严格:CSSD 启动阶段会先验原始私网 IP(如
10.10.10.x),再验 HAIP;任一环节失败都会阻塞 CRS 启动 -
169.254.0.0/16网段不能被任何其他进程占用(比如某些云平台 agent 或容器网络插件会偷偷占掉169.254.169.254),否则 HAIP 分配失败
HAIP 的“自动”背后,全是靠底层网络不捣乱来兑现的;一旦 rp_filter、网卡命名、或地址冲突出问题,它就静默失效——而日志里往往只报“interconnect failure”,不会直接告诉你 rp_filter=1 是罪魁祸首。











