oracle 23c rac 微隔离是防止vip漂移、cssd心跳误判和ocr注册失败的必要网络约束,需显式放行私网接口(如bond0)udp 12345/12346/12347端口及haip地址段udp流量,不可复用数据库监听器策略,验证须通过tcpdump跨节点抓包与cluvfy时钟同步检查。

Oracle 23c RAC 的微隔离不是“可选增强”,而是防止 VIP 漂移、CSSD 心跳误判和 OCR 资源注册失败的必要网络约束。默认防火墙或云安全组放行全部端口时,私网流量可能被公网策略意外截断或重定向,导致集群静默降级。
oifcfg setif 配置后仍出现 CRS-1601 或 ORA-29702
这是微隔离未生效的典型症状:CSSD 进程检测不到对端心跳,但 ping -I bond0 却能通——说明三层可达,但四层(UDP 12345)或五层(CSSD 自定义协议)被阻断。
- 必须显式放行私网接口(如
bond0)上的 UDP 端口12345(CSSD 默认)、12346(EVMd)、12347(GPNPD),不能只依赖 ICMP 或 TCP 1521 - 若启用 HAIP(
ora.cluster_interconnect.haip),还需放行 HAIP 地址段(如169.254.0.0/16)的全部 UDP 流量,否则 HAIP 无法自动协商主备 - 云平台(如 OCI、Azure)的安全组默认隐式拒绝,需单独添加入站+出站规则,且方向必须双向(
ingress+egress)
为什么不能复用数据库监听器的网络策略
数据库监听器走的是公网接口(ens192)和 TCP 1521,而 RAC 内部通信强制绑定在私网接口(bond0)和 UDP 端口,两者协议、端口、接口、甚至 checksum 计算方式都不同。
- 监听器策略放行 TCP 1521 对 CSSD 心跳无任何作用;反过来,只开 UDP 12345 也不影响客户端连接
- Oracle 23c 引入了更严格的 interconnect 健康检查(
cssdmonitor),会主动探测私网路径 MTU 和乱序容忍度,若中间设备(如 NSX 分布式防火墙)对 UDP 分片做限速或丢弃,会触发ORA-29702而非简单超时 - 微隔离规则必须基于接口名(
bond0)而非 IP 段配置,因为 HAIP 地址是链路本地地址,不随子网变化
如何验证微隔离是否真正生效
不能只看 crsctl check cluster 返回 SUCCESS——它只检查本地进程存活,不验证跨节点通信质量。
- 在节点 A 执行:
tcpdump -i bond0 -n udp port 12345 -c 20,同时在节点 B 执行相同命令;两边都应捕获到对方发来的包(src/dst IP 是各自私网 IP,非 HAIP) - 运行
cluvfy comp clocksync -n all -verbose,若输出中出现PRVF-7531 : NTP time drift detected,大概率是 UDP 12345 被限速,导致 NTP 同步请求被 CSSD 抢占 - 检查
/var/log/oracle/crsd/crsd.log,搜索misscount关键字;若频繁出现misscount exceeded但网络延迟
最易被忽略的是 HAIP 启用后,微隔离规则未覆盖链路本地地址段——169.254.0.0/16 不在路由表里,传统基于 CIDR 的安全组策略会直接跳过,必须显式声明该网段为“允许”。











