单实例转rac必须重配网卡,因rac需public、vip、private三类严格隔离的网络:public对外服务,vip由crs管理漂移,private专用于低延迟心跳与缓存融合;复用单实例网卡会导致arp冲突、安全拦截及css驱逐;oifcfg不识别单实例配置,且要求所有节点私网ip段、掩码、网卡名及mtu(推荐9000)完全一致,ipv4/ipv6双栈须全节点协议配置统一。

单实例转RAC必须重配网卡,因为RAC的网络角色和通信模型与单实例有本质区别——不是“加个节点就行”,而是整个网络拓扑要重建。
单实例网卡只承担PUBLIC流量,RAC需要三类隔离网络
单实例通常只用一块网卡跑PUBLIC IP(监听、客户端连接),而RAC强制要求物理隔离或逻辑隔离的三类网络:
-
PUBLIC:对外服务,必须能被客户端和DNS解析,需在/etc/hosts或DNS中显式声明 -
VIP:绑定在PUBLIC网卡上,但由CRS管理漂移,故障时秒级切换,依赖ARP刷新机制——单实例没这层控制 -
PRIVATE:仅用于节点间心跳、缓存融合(Cache Fusion)、全局队列同步,必须低延迟、高吞吐,且不能路由、不能被外部访问
如果你直接复用单实例网卡,PRIVATE流量混入公网,会触发安全策略拦截、ARP冲突、甚至导致CSS心跳超时驱逐节点。
oifcfg不认单实例遗留的网卡配置
RAC的网络接口由oifcfg统一注册并绑定用途,单实例从未调用过它,所以oifcfg getif返回为空或错误信息。RAC启动时会校验:
- 是否存在标记为
cluster_interconnect的私网接口 - 该接口子网是否与
srvctl config network中定义的subnet匹配 - 所有节点上报的私网接口是否一致(IP段、掩码、网卡名)
不满足任一条件,crsctl start crs会卡在ora.cluster_interconnect.haip资源启动阶段,日志里反复出现CLSGPNP_ERR或ORA-15078。
IPv4/IPv6双栈下网卡配置更容易出错
Oracle 19c RAC支持IPv4+IPv6双栈,但有个硬约束:所有节点必须使用完全相同的IP协议组合。比如你在单实例上开了IPv6但没配地址,RAC初始化时会尝试启用IPv6 stack,结果ifconfig里看不到inet6,srvctl config network就报Network type IPV6 is not available。
- 必须显式关闭不用的协议:
IPV6INIT=no或net.ipv6.conf.all.disable_ipv6 = 1 - 若启IPv6,
IPV6ADDR必须是static地址,SLAAC或DHCPv6分配的地址不被CRS信任 -
oifcfg setif命令中的子网段(如192.168.1.0)只匹配IPv4;IPv6需用完整前缀(如2001:db8::/64),写错一位就无法识别
最常被忽略的是私网网卡的MTU值——RAC默认期望MTU=9000(jumbo frame),而单实例网卡多为1500。不统一会导致GC block busy等待飙升,且错误日志里几乎不提示MTU问题,只能靠tcpdump -i ens224 -nn icmp6抓包发现大量fragment。











