Oracle RAC如何配置防火墙策略?开放RAC所需通信端口
Oracle RAC防火墙配置:避开那些让你心跳停止的“坑”
给Oracle RAC配置防火墙,可不是只开个1521端口那么简单。firewalld的默认规则会悄无声息地阻断HAIP(169.254.x.x)、私网UDP以及动态端口等关键流量,结果就是集群心跳直接“停摆”,或者实例死活起不来。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

配置白名单时,这三类地址一个都不能少
Oracle RAC集群的运行依赖于三个网络平面的通信,防火墙策略必须明确放行对应的源地址。否则,你很可能在crsctl check cluster时看到“CRS-4639: Could not contact Oracle High A vailability Services”的报错,或者节点被反复踢出集群。
- 所有PUBLIC IP(包括VIP和SCAN IP):例如
172.16.100.19、172.16.100.119、172.16.100.100。 - 所有PRIVATE IP(私网地址):例如
100.100.100.19、100.100.100.30。这里要特别注意,指的是ip a命令实际看到的地址,而不是网卡名称。 - HAIP地址段:
169.254.0.0/16(11.2.0.2及以上版本强制使用)。切记不能只写单个HAIP地址,必须使用CIDR格式的网段。
常见的错误做法是一条条添加单个IP的富规则,这样很容易遗漏。哪怕只漏掉一个HAIP,都可能触发OCR同步失败。正确的思路是优先放行整个网段,再根据需要补充具体的VIP或SCAN IP:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.100.0/24" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="169.254.0.0/16" accept'
UDP和高范围端口必须明确放行,TCP 1521远远不够
RAC的私网通信大量依赖UDP协议(比如GCS、GES消息),而且Oracle的后台进程(如PMON、LMD)会使用临时端口主动发起连接。如果只开放1521/tcp,会导致节点间资源争用超时,进而引发“gc cr block busy”等一系列等待事件飙升。
- 私网必须同时放开TCP和UDP的全端口:即
port protocol="tcp" port="1-65535"和port protocol="udp" port="1-65535"。 - 公网访问数据库虽然只需开
1521/tcp,但客户端连接后,监听器可能会重定向到随机端口(尤其在非共享服务器模式下)。因此,对业务网段也建议放开9000-65500的TCP和UDP端口。 - 临时端口范围需与系统保持一致:检查
cat /proc/sys/net/ipv4/ip_local_port_range的输出。如果系统范围是9000 65500,那么firewalld规则里写1024-65535就多此一举了,无谓地开放低端口只会增加安全风险。
针对私网段的配置示例如下:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" port protocol="tcp" port="1-65535" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" port protocol="udp" port="1-65535" accept'
小心!移除SSH服务可能导致管理连接中断
执行firewall-cmd --permanent --remove-service=ssh后,如果不进行reload,当前的SSH连接确实还能用。但一旦执行reload或重启firewalld服务,所有未显式放行的22/tcp流量都会被拒绝——这包括你正在使用的堡垒机跳转链路。
- 不要删除默认的ssh服务。更稳妥的做法是使用富规则,显式放行可信的管理网段。例如:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.2.30.0/24" port protocol="tcp" port="22" accept'。 - 如果已经误删并导致失联,需要物理或通过带外管理登录,执行
systemctl stop firewalld临时恢复访问,再补上正确的规则。 - 使用
firewall-cmd --list-all检查时,必须确保在sources:部分能看到你的管理IP段,而不能仅仅依赖services:里的ssh条目。
重载规则前,务必检查顺序与冲突
firewalld是按照富规则的插入顺序进行匹配的,先插入的规则优先级更高。如果你先添加了一条source address="0.0.0.0/0" port="1521" accept的规则,之后再添加针对VIP的白名单,后者实际上是不会生效的。
- 使用
firewall-cmd --permanent --list-rich-rules查看所有现有规则,确认VIP、私网、HAIP相关的规则排在前面。 - 避免混合使用
--add-port和--add-rich-rule命令:前者生成的是区域级(zone-level)规则,后者是源级(source-level)规则,两者优先级不同,容易互相覆盖。 - 执行
firewall-cmd --reload后,应立即进行验证:运行crsctl check cluster -all、oifcfg getif,并从另一个节点ping -c2 169.254.x.x(测试HAIP连通性)。
最容易忽略的一点是HAIP的ICMP通路。很多环境只开了TCP和UDP,但集群健康检查会发送ICMP echo请求。如果没放行ICMP,表现出来的症状就是“节点看似在线,却无法加入集群”。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
PostgreSQL开发怎么批量执行多个SQL文件_Navicat特有功能实操
Na vicat 不支持批量执行多个 sql 文件,仅能单文件运行且易静默失败;可靠方案是用 psql 命令行配合 shell 循环执行,注意事务隔离、编码统一、跨库拆分及错误中断机制。 Na vicat 里批量执行多个 sql 文件根本不行 先说一个核心判断:Na vicat 本身并没有“选中
mysql如何修改数据库名_RenameDatabase失效后的更名方案
MySQL数据库更名:当RENAME DATABASE成为历史,我们该如何安全操作? 如果你还在寻找一条 RENAME DATABASE old_db TO new_db; 这样的魔法命令,是时候更新一下知识库了。那个曾经短暂存在过的便捷功能,早已被官方彻底放弃。如今,给MySQL数据库改名,更像是
SQL如何实现动态决定Update哪些列_利用存储过程参数判定
SQL如何实现动态决定Update哪些列:利用存储过程参数判定 在数据库开发中,一个经典的场景是:如何根据传入的参数,动态地决定更新表中的哪些列?换句话说,只更新传了值的字段,没传值的字段保持原样。这可不是简单的字符串拼接SQL能安全解决的,背后涉及到参数有效性判断、执行计划优化以及数据安全等多个层
如何配置GlassFish服务器的Oracle数据源
GlassFish 应用服务器配置 Oracle 数据源:关键步骤与避坑指南 在 GlassFish 中配置 Oracle 数据源,看似是标准操作,但几个细节没对上,就可能导致连接测试失败或应用运行时抛出令人头疼的异常。下面这份指南,将帮你梳理从驱动部署到 JNDI 绑定的完整流程,并重点指出那些容
mysql如何锁定或禁用特定异常账户_使用ALTER USER ACCOUNT LOCK命令
MySQL账户锁定实战指南:从语法细节到版本兼容性 处理异常账户是数据库安全管理的核心任务之一。然而,许多DBA在执行锁定命令后,可能会困惑地发现用户仍然能够成功登录。或者,在低版本的MySQL环境中,根本找不到对应的语法支持。本文将深入解析MySQL中锁定或禁用用户账户的正确方法与最佳实践,帮助您
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

