当前位置: 首页
数据库
Oracle RAC如何处理脑裂(Split-Brain)?配置冗余私网心跳

Oracle RAC如何处理脑裂(Split-Brain)?配置冗余私网心跳

热心网友 时间:2026-04-29
转载

Oracle RAC如何真正预防脑裂?三重心跳与多数派原则是关键

一个常见的误解是,为Oracle RAC增加一块私联网卡就能高枕无忧地防止脑裂。事实并非如此。RAC本身并不“处理”已经发生的脑裂,而是通过一套精密的三重心跳机制、Quorum(法定人数)算法和IO Fencing(I/O隔离)来主动预防脑裂的发生。冗余私网只是这个庞大防御体系中的一环,单独依靠它,无法阻止灾难。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

为什么仅加一块私网网卡不能防脑裂?

私网中断仅仅是触发集群内部判断的众多条件之一。真正决定一个节点是去是留的,是冷酷的“多数派原则”:一个节点要想留在集群里,必须同时满足两个条件——第一,能访问到超过半数的Voting Disk(表决磁盘);第二,能通过网络心跳确认多数节点仍在线上。

如果集群只依赖私网心跳做判断,就会陷入一个危险的窗口期:假设交换机故障导致网络分区,但所有节点仍能访问共享存储。此时,基于磁盘心跳的disktimeout(默认200秒)判定,会比基于网络心跳的misscount(默认30秒)晚得多才触发。这中间长达数分钟的时间差,正是脑裂的高发期。

这时,你可能会看到以下典型现象:

  • 两个节点都认为对方已经宕机,并试图接管VIP和服务,导致IP冲突和服务混乱。
  • 使用crsctl check cluster -all命令时,部分节点状态显示为CRS-4638: Oracle High A vailability Services is online,但查看资源状态crsctl stat res -t时,却发现ora.cluster_interconnect.haip资源在OFFLINE和ONLINE之间反复横跳。
  • 数据库告警日志中频繁出现ORA-29740: evicted by membercssd(ocssd.bin) terminating node due to lost network heartbeat这类驱逐信息。

所以,配置冗余私网的真正目标,并非保证心跳“永不中断”——这在分布式系统中是不现实的——而是最大限度地降低单点故障概率,为磁盘心跳和Quorum算法的最终裁定争取宝贵的缓冲时间

配置双私网网卡并启用HAIP的实操要点

从Oracle 11.2.0.2版本开始,集群默认会启用HAIP(高可用IP)。这个功能非常智能,它会在所有被标记为cluster_interconnect的私网网卡上,自动分配一个169.254.x.x段的浮动IP地址,无需DBA手动配置VIP。但要让它正确工作,有几个细节必须确保:

  • 物理连接与IP规划:两块用作私网的网卡(例如enp0s8enp0s9)必须物理连接到同一台私网交换机(或做了堆叠/级联的主备交换机),并且配置在同一个IP网段(例如都是10.10.10.0/24)。
  • 正确标记网卡角色:通过命令oifcfg setif -global enp0s9/10.10.10.0:cluster_interconnect将第二块网卡也加入集群互联。之后,务必用oifcfg getif命令确认两块网卡都被识别为cluster_interconnect
  • 验证HAIP生效:重启集群高可用服务(crsctl stop has && crsctl start has)后,执行ifconfig命令。你应该能看到每块私网网卡下都出现了一个以“:1”结尾的子接口,并分配了169.254.x.x的地址,例如enp0s8:1enp0s9:1
  • 关于网卡绑定(Bond):这里有个关键点:不要在操作系统层面为这两块网卡配置绑定(比如mode=1的主备模式)。HAIP机制会自行管理链路切换。如果已经做了绑定,需要先解除,再将独立的物理网卡交给HAIP管理。

需要明确的是,HAIP本身不提供负载均衡,它只负责故障切换。同时,它也不感知上层业务流量,其核心职责就是为CSSD(集群同步服务)进程提供可靠的通信通道。

必须同步调整的三个关键参数

misscountdisktimeoutreboottime,这三个参数构成了Quorum决策链上的三道保险闸门,调整时必须通盘考虑,缺一不可:

  • misscount:定义网络心跳可以容忍丢失的秒数。默认30秒,在存在网络轻微抖动的环境中,建议适当放宽至60秒(命令:crsctl set css misscount 60),给网络一个自我恢复的机会。
  • disktimeout:定义访问Voting Disk心跳的超时秒数。默认200秒,这个值必须大于misscount。建议设置为240秒(命令:crsctl set css disktimeout 240),以防止因存储瞬时延迟而导致的误驱逐。
  • reboottime:定义被驱逐的节点在强制重启前需要等待的秒数。默认3秒可能太短,容易导致节点在复杂故障场景下频繁重启。建议设为10秒(命令:crsctl set css reboottime 10),让系统状态更稳定。

修改这些参数后,必须在所有节点上执行,并重启CSSD服务(通常通过crsctl stop crs && crsctl start crs实现)。还有一点至关重要:在修改前,请务必确认Voting Disk在ASM磁盘组中的状态是正常的(可以使用asmcmd lsdg命令查看,确保state = MOUNTED)。

最容易被忽略的IO Fencing配置

这是防御体系的最后一道,也是最关键的一道防线。试想,即使Quorum算法正确判定某个节点应该被驱逐,但如果这个“被判处出局”的节点仍然在运行,并且持续向共享存储(比如OCR文件或数据文件)写入数据,那么数据损坏和脑裂事实上就已经发生了。

这时,就必须依靠IO Fencing来强制隔离该节点对共享存储的访问。Oracle RAC默认依赖于SCSI Reserve/Release(SCSI-3持久化预留)机制来实现这一点,但这需要满足几个前提:

  • 存储硬件支持:所有存放Voting Disk和OCR的LUN(逻辑单元),必须由存储硬件支持SCSI-3 Persistent Reservation(PR)功能。
  • 多路径软件配置:操作系统层面的多路径软件(例如DM-Multipath)必须正确配置。通常需要启用features “1 queue_if_no_path”,并禁用no_path_retry策略。否则,路径切换可能会意外打断SCSI预留,导致Fencing失效。
  • 如何验证:可以使用sg_persist -n -i /dev/mapper/mpatha命令(请替换为实际的mpath设备)进行检查。如果返回类似PR generation=xxx的信息,说明预留生效;如果返回SCSI status: Reservation Conflict,则说明配置可能有问题。

可以说,一个没有正确配置IO Fencing的RAC集群,就像一辆安装了最先进的刹车系统却没有连接油管的赛车——Quorum算法可以发出“停车”指令,但失控的车轮依然在疯狂转动,灾难无法避免。

来源:https://www.php.cn/faq/2320333.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Oracle分区表物化视图如何支持高并发_优化锁资源竞争

Oracle分区表物化视图如何支持高并发_优化锁资源竞争

Oracle物化视图FAST REFRESH默认锁整分区表,因物化视图日志缺失分区键信息,无法定位变更分区;需同时满足日志含分区键列且MV定义显式引用该列,才能实现分区粒度加锁。 物化视图刷新时为什么会锁定整个分区表? 许多Oracle DBA都曾面临一个典型问题:在执行分区表的物化视图FAST R

时间:2026-04-29 19:49
如何处理SQL语句中的HEX编码注入绕过_对输入流进行16进制检测

如何处理SQL语句中的HEX编码注入绕过_对输入流进行16进制检测

HEX编码绕过:当十六进制字面量成为SQL注入的“隐身衣” 在安全对抗的战场上,攻击者的手法总是层出不穷。其中,利用十六进制(HEX)编码绕过传统的关键字和符号过滤,已经成为一种相当经典且有效的SQL注入手段。这背后的原理并不复杂,但防御起来却需要格外细致的考量。 HEX编码在SQL注入中怎么被用来

时间:2026-04-29 19:49
Oracle RMAN备份加密如何配置_通过配置备份加密增强安全性

Oracle RMAN备份加密如何配置_通过配置备份加密增强安全性

RMAN备份加密:那些容易被忽略的配置陷阱与性能真相 说到RMAN备份加密,一个常见的误解是“配置了就能自动生效”。事实并非如此,关键在于必须清晰区分configure encryption for database on(全局策略)和set encryption on identified by(

时间:2026-04-29 19:48
SQL怎样实现类似Excel透视表的功能_利用CASE WHEN行转列

SQL怎样实现类似Excel透视表的功能_利用CASE WHEN行转列

SQL怎样实现类似Excel透视表的功能_利用CASE WHEN行转列 SQL里用CASE WHEN做行转列,本质是聚合+条件判断 开门见山,先说核心:CASE WHEN这个语句本身并不产生“转列”的魔法。它必须和GROUP BY以及聚合函数(比如SUM、COUNT)联手,才能模拟出Excel透视表

时间:2026-04-29 19:48
如何解决ORA-12541无监听程序_lsnrctl status排查流程

如何解决ORA-12541无监听程序_lsnrctl status排查流程

ORA-12541 连接失败深度解析:监听器未启动是主因,系统化排查从状态检查到网络验证 ORA-12541 报错时,先确认监听器进程是否真的在运行 当数据库连接出现 ORA-12541 错误时,许多用户会首先怀疑 tnsnames ora 配置或服务名设置。实际上,该错误的根本原因在于客户端无法与

时间:2026-04-29 19:48
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程