root.sh报“Failure at final check of Oracle CRS stack”基本是防火墙拦截所致,因firewalld/iptables默认丢弃私网UDP/TCP包,导致心跳失败、OCR同步超时;需按私网段(如192.168.10.0/24)用--add-source精准放行,并同步关闭SELinux相关限制及调高somaxconn至65535。

root.sh执行失败报“Failure at final check of Oracle CRS stack”
这基本就是防火墙在拦路。RAC安装过程中,root.sh会尝试在节点间建立IPC连接、同步OCR、启动ohasd和crsd,但firewalld或iptables默认会丢弃私网段的UDP/TCP包,导致心跳失败、资源注册超时。现象是脚本卡在最后一步,日志里常带CRS-4535或clsssInitNative: connect failed, rc 9。
别只查firewall-cmd --list-services——它不显示私网规则。必须运行:
-
firewall-cmd --zone=public --list-ports(确认私网通信端口如12345、45678等没被放行) -
firewall-cmd --zone=public --list-rich-rules(找是否有reject source address匹配你的私网段)
临时验证:直接systemctl stop firewalld,再重跑root.sh。如果立刻通过,就不用再猜了。
firewalld放行RAC私网流量的正确姿势
RAC私网通信不是单端口问题,而是基于源IP段的双向流量,不能用--add-port硬加几个端口。必须按网段精准授权:
- 先确定私网网段:
oifcfg getif或查/etc/hosts,例如192.168.10.0/24 - 永久放行:
firewall-cmd --permanent --zone=public --add-source=192.168.10.0/24 - 重载:
firewall-cmd --reload - 验证:
firewall-cmd --zone=public --list-sources应含该网段
注意:--add-source只认网卡主IP。若私网绑定多个地址(如GNS VIP),需额外为每个VIP单独加--add-source规则。
Windows防火墙阻断Oracle RAC节点通信?
Windows Server上部署RAC虽少见,但一旦出问题更难排查。现象是节点能ping通、1521端口tnsping正常,但crsctl check cluster反复失败,lsnrctl status显示监听正常却无法跨节点注册。
根本原因:Windows防火墙默认阻止所有入站UDP,而RAC私网心跳大量依赖UDP广播/多播。解决方法:
- 打开「高级安全 Windows 防火墙」→「入站规则」→「新建规则」
- 选「自定义」→「所有程序」→「协议类型:UDP」→「本地端口:全部端口」→「远程IP地址:此IP地址范围」→填入你的私网段(如
192.168.10.0/24) - 操作选「允许连接」,配置文件勾选实际网络类型(域/专用)
- 名称建议写清用途,如「Oracle RAC Private Network - UDP」
切记别只开TCP——UDP才是RAC心跳的命脉。
防火墙配置正确,还是连不上?检查SELinux和内核参数
即使firewalld或Windows防火墙完全放行,RAC仍可能失败。两个深层陷阱常被忽略:
-
setsebool -P oracle_execmem 1必须执行。否则ohasd、crsd无法分配共享内存段,报错ORA-29701: unable to connect to Cluster Manager -
/proc/sys/net/core/somaxconn值过低(默认128)会导致IPC连接队列溢出。RAC要求≥65535:echo 65535 > /proc/sys/net/core/somaxconn,并写入/etc/sysctl.conf
真正卡住的点,往往不是“没开防火墙”,而是UDP放行了、SELinux没调、somaxconn还卡在128——三者缺一不可。











