Oracle RAC私网交换机更换不触发脑裂的关键是配置双私网冗余:需通过oifcfg setif注册两个物理隔离子网,确保srvctl config asmnetwork显示多子网,且crsctl stat res -t中asmnetwork资源ONLINE;单私网环境必须停集群后操作。

直接换掉坏掉的私网交换机本身不难,难的是不让集群误判节点失联、不触发脑裂、不中断 ASM 和数据库服务。19c 的私网不再是“只传心跳”,它承载 ASM 网络(ora.asmnet1.asmnetwork)和 ASM 监听器(ora.ASMNET1LSNR_ASM.lsnr),这两者在 19c 中默认绑定私网子网,一旦网络中断,它们会快速 offline,进而拖垮整个集群资源栈。
确认私网高可用是否启用
Oracle RAC 私网交换机单点故障能否安全更换,取决于你是否配置了双私网(冗余心跳链路)。不是所有环境都默认开启——必须主动配置,不能假设存在。
- 检查当前私网接口数量:
oifcfg getif,若只返回一条cluster_interconnect,asm类型的记录,说明是单私网,**不可直接断电换交换机** - 查 ASM 网络资源是否启用多子网:
srvctl config asmnetwork,输出中若只出现一个Subnet IPv4,即为单路径 - 双私网需提前在两个物理网卡上分别配置不同子网(如
172.16.10.0/24和172.16.11.0/24),并在oifcfg setif中同时注册,类型都带cluster_interconnect,asm - 双私网生效后,
crsctl stat res -t | grep asmnetwork应显示 ONLINE 且无异常状态;ocrdump -stdout | grep -A5 asmnetwork可确认 OCR 中已持久化双子网信息
单私网环境下必须停集群再操作
没有冗余路径时,任何私网中断都会导致 CSSD 进程在 60 秒内发起驱逐(eviction),节点被强制踢出集群。此时唯一安全方式是计划性停机。
- 先执行完整备份:
ocrconfig -manualbackup(OCR)、crsctl query css votedisk(voting disk 状态)、asmcmd ls -l +OCR(OCR 备份文件校验) - 停止所有数据库实例:
srvctl stop database -d <db_name></db_name> - 停止 ASM 实例(非 force):
srvctl stop asm -node <node_name></node_name>,等待ps -ef | grep asm无残留进程 - 最后停 CRS:
crsctl stop crs(两节点依次执行,不要并行) - 确认两节点均处于
crsctl check crs报错或未启动状态,再断电更换交换机
更换后必须同步更新 ASM 网络资源
19c 新增的 ora.asmnet1.asmnetwork 和 ora.ASMNET1LSNR_ASM.lsnr 资源硬编码了旧私网子网,仅改操作系统 IP 和 oifcfg 不够——它们仍会尝试绑定已失效的地址段,导致启动失败。
- 启动 CRS 后,先不启 ASM 和 DB:
crsctl start crs(两节点)→ 检查crsctl stat res -t中只有ora.cssd和ora.ctssdONLINE - 用 grid 用户修改 ASM 网络配置:
srvctl modify asmnetwork -subnet <new_subnet>/<mask></mask></new_subnet>(例如172.16.10.0/255.255.255.0) - 修改 ASM 监听器绑定地址:
srvctl modify listener -asmlistener ASMNET1LSNR_ASM -subnet <new_subnet></new_subnet> - 验证修改结果:
srvctl config asmnetwork和srvctl config listener -asmlistener输出必须与新私网一致 - 之后才能启 ASM:
srvctl start asm -node <node_name></node_name>,再启 DB
验证私网连通性不能只 ping
私网恢复后,ping 通只是基础,RAC 私网真正关键的是 UDP 多播(CSSD 心跳)和 TCP 端口(ASM 网络通信),这两者常被防火墙或交换机 ACL 拦截,但 ping 不报错。
- 检查 CSSD 多播是否正常:
crsctl check css必须返回 “CSS daemon is online”;若卡在 “waiting for CSS daemon to start”,大概率是多播不通 - 抓包确认:
tcpdump -i <priv_if> -n 'udp and port 12345'</priv_if>(默认 CSSD 多播端口),两节点应互相收到包 - 测试 ASM 网络端到端连通:
telnet <other_node_priv_ip> 1525</other_node_priv_ip>(ASM 监听器默认端口),必须能连上且不超时 - 观察日志:
tail -f $GRID_HOME/log/<node_name>/cssd/ocssd.log</node_name>中不应再出现 “IPC timeout” 或 “missed heartbeat” 类错误
最容易被忽略的是:即使所有命令执行成功、资源全部 ONLINE,如果交换机 ACL 没放行 UDP 多播或监听端口,集群会在几小时后因累积心跳丢失而静默驱逐节点。务必在变更后持续观察至少一个完整 CSSD lease 周期(默认 200 秒 × 3 = 10 分钟无丢包才算稳)。











