Oracle RAC中VIP无法漂移绝大多数情况是根本未启动,而非漂移失败;ora.nodeX.vip状态为OFFLINE或INTERMEDIATE即证实未绑定,主因包括ora.net1.network offline、USR_ORA_IF指向私网网卡、交换机port security拦截新MAC、网卡名不一致等。
oracle rac中vip无法漂移,绝大多数情况不是“漂移失败”,而是根本没启动或压根没尝试漂移——ora.nodex.vip资源状态为 offline 或 intermediate 就是铁证。
VIP 资源强依赖 ora.net1.network(或类似命名的网络资源),它一 offline,VIP 连进程都不会拉起。别急着查漂移逻辑,先确认这个上游资源是否活着:
crsctl stat res -t | grep network,看 ora.net1.network 状态是否为 ONLINE
OFFLINE,检查该节点是否配了默认网关:route -n | grep '^0.0.0.0';没输出就补上,有输出则用 ping -I <public_if><gateway_ip></gateway_ip></public_if> 验证可达性ora.cvu 资源仍 online 且依赖公网,CRSD 会卡在“等待所有依赖资源停止”阶段,导致 ora.net1.network 无法重启——此时需先 srvctl stop cvu,再 crsctl start res ora.net1.network
VIP 必须绑定在公网网卡上,但 USR_ORA_IF 属性一旦包含私网口名(如 eth1),racgvip 就会把地址绑到私网口,现象是 ip addr show 里 VIP 出现在 eth1 上,客户端完全无法访问:
crs_stat -p ora.node1.vip | grep USR_ORA_IF,输出类似 USR_ORA_IF=eth0|eth1
USR_ORA_IF=eth0
crs_stat -p ora.node1.vip > /tmp/vip.cap → 编辑文件 → crsctl replace resource ora.node1.vip -f -p /tmp/vip.cap
ip addr show 中 VIP 必须出现在 eth0(或你指定的公网口)下,且该口 ethtool eth0 显示 Link detected: yes
VIP 漂移后使用的是目标节点网卡的 MAC 地址,若交换机启用了 port security,而该 MAC 未被放行,ARP 响应会被丢弃,客户端 ping 不通、TCP 连接超时:
ifconfig eth0,记下 ether 后的 MAC 地址show mac address-table interface Gi1/0/5(替换为实际端口),确认新节点 MAC 是否存在show port-security interface Gi1/0/5,若 Security Violation Count > 0 或 Security Action 是 shutdown,问题基本锁定no switchport port-security;长期方案:将所有 RAC 节点公网网卡 MAC 加入交换机白名单Clusterware 要求所有节点的公网网卡设备名**字面完全一致**,哪怕只是 enp0s3 和 ens192 的差异,srvctl start vip 就会报 invalid interface "ens192" 并退出:
$GRID_HOME/bin/oifcfg getif,对比输出是否一字不差ip -br a 或 ls /sys/class/net/ 为准,别信旧文档或 ifconfig 别名/etc/udev/rules.d/70-persistent-net.rules 绑定 MAC 与名称;AIX 下需核对 /etc/path_to_inst 中驱动实例顺序真正难排查的点往往藏在底层:你以为 VIP 漂过去了,其实它连操作系统网卡都没绑上;你以为交换机没问题,其实 port security 正静默丢包;你以为网关 ping 得通,但 racgvip 检测的是 RX 包增量,不是 ICMP 回包本身。