游乐游手机版
首页/数据库/文章详情

Oracle RAC如何配置防火墙策略?开放RAC所需通信端口

时间:2026-04-28 14:59
Oracle RAC防火墙配置:避开那些让你心跳停止的“坑” 给Oracle RAC配置防火墙,可不是只开个1521端口那么简单。firewalld的默认规则会悄无声息地阻断HAIP(169 254 x x)、私网UDP以及动态端口等关键流量,结果就是集群心跳直接“停摆”,或者实例死活起不来。 配置

Oracle RAC防火墙配置:避开那些让你心跳停止的“坑”

给Oracle RAC配置防火墙,可不是只开个1521端口那么简单。firewalld的默认规则会悄无声息地阻断HAIP(169.254.x.x)、私网UDP以及动态端口等关键流量,结果就是集群心跳直接“停摆”,或者实例死活起不来。

Oracle RAC如何配置防火墙策略?开放RAC所需通信端口

配置白名单时,这三类地址一个都不能少

Oracle RAC集群的运行依赖于三个网络平面的通信,防火墙策略必须明确放行对应的源地址。否则,你很可能在crsctl check cluster时看到“CRS-4639: Could not contact Oracle High A vailability Services”的报错,或者节点被反复踢出集群。

  • 所有PUBLIC IP(包括VIP和SCAN IP):例如172.16.100.19172.16.100.119172.16.100.100
  • 所有PRIVATE IP(私网地址):例如100.100.100.19100.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 -alloifcfg getif,并从另一个节点ping -c2 169.254.x.x(测试HAIP连通性)。

最容易忽略的一点是HAIP的ICMP通路。很多环境只开了TCP和UDP,但集群健康检查会发送ICMP echo请求。如果没放行ICMP,表现出来的症状就是“节点看似在线,却无法加入集群”。

来源:https://www.php.cn/faq/2378051.html
上一篇.NET应用连接Oracle时区不一致怎么办_设置会话时区 下一篇mysql如何优化大表Alter Table添加索引速度_调整排序缓冲区大小
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
phpMyAdmin批量导入多个小型SQL碎片文件方法
数据库 · 2026-07-05

phpMyAdmin批量导入多个小型SQL碎片文件方法

许多开发者习惯将多个小型SQL碎片文件一同上传到phpMyAdmin的导入页面,误以为平台能像文件夹一样批量处理——但实际情况是,系统仅识别第一个文件,其余文件会被静默忽略,无法执行。 根本原因其实并不复杂:phpMyAdmin的导入机制本质上是一个单文件上传接口。其import页面仅包含一个字段,

phpMyAdmin设置表AUTO_INCREMENT起始值的方法
数据库 · 2026-07-05

phpMyAdmin设置表AUTO_INCREMENT起始值的方法

phpMyAdmin里改AUTO_INCREMENT值,点“保存”却没反应? 其实,问题往往出在两个容易被忽视的细节上: 1 **错误点击了“保存”而非“执行”按钮**。phpMyAdmin 的“操作”页面中,AUTO_INCREMENT 输入框属于一个独立的表单。如果在字段旁点击“保存”

MySQL主从数据一致性检查pt-table-checksum使用方法和步骤详解
数据库 · 2026-07-05

MySQL主从数据一致性检查pt-table-checksum使用方法和步骤详解

pt-table-checksum 必须在主库执行——这一点,很多初次接触的人都会踩坑。它并不是“直连从库去比对”,而是借助 binlog 复制将校验逻辑同步过去,由从库本地重新计算,再写入 percona checksums 表。简单来说,你在主库发送一条类似 REPLACE INTO perco

MySQL连接被阻断错误原因及解除方法
数据库 · 2026-07-05

MySQL连接被阻断错误原因及解除方法

你是否遇到过 MySQL 报出 Host is blocked 的错误?先别急着怀疑密码是否正确——这本质上并非单纯的连接失败,而是你的 IP 地址已被 MySQL 主动列入黑名单。此时,即便输入完全正确的密码,数据库也会毫不留情地拒绝访问。要想立刻解除封锁,唯一的办法就是清空 host cache

MySQL 8.0跨库联合查询权限配置详解
数据库 · 2026-07-05

MySQL 8.0跨库联合查询权限配置详解

MySQL 8 0 的跨库联合查询功能原生内置,无需额外安装插件或修改配置文件。很多开发者遇到 SQL 语法正确却报 ERROR 1142 的情况时,常会困惑——其实并非 MySQL 限制跨库操作,而是权限验证环节未通过。 简而言之,跨库查询受阻的根源通常不是功能未启用,而是权限分配不完整或授权语句