网络心跳、磁盘心跳、本地心跳关系
心跳的本质是集群中各节点之间定期互相“报平安”的一种通信机制。如果一个节点在一定时间内没有收到另一个节点的心跳信号,它就会认为对方出现了故障,进而触发恢复流程(如驱逐故障节点)。
- 网络心跳 (Network Heartbeat)
这是最核心、最容易被理解的心跳机制。
目的:监控集群内节点之间的网络连通性。它是检测节点是否存活(Alive)的第一道防线。
通信路径:通过私有网络(Private Interconnect) 进行。每个节点都会通过这个网络向集群中的其他所有节点定期发送心跳数据包。
机制:
每个节点的LMON(Global Enqueue Service Monitor)进程负责管理网络心跳。
心跳信号以非常高的频率(通常每秒一次)在节点间交换。
如果某个节点的LMON进程在MISSCOUNT 指定的时间内(例如30秒)没有收到来自另一个节点的心跳,它就会认为该节点可能已经宕机或网络出现了分区。
重要性:网络心跳失败是触发节点重新配置(Reconfiguration)或驱逐(Eviction)的最常见原因。
- 磁盘心跳 (Disk Heartbeat)
这是网络心跳的一个关键补充,主要用于解决“脑裂”场景。
目的:在网络心跳全部中断(所有私有网络都发生故障)时,提供一个仲裁机制来决定哪个节点分区(Partition)可以存活下来,从而避免出现两个大脑都认为自己是唯一存活的情况。
通信路径:通过共享存储(Shared Storage) 进行。通常写入的是表决磁盘文件(Voting Disk Files)。现代Oracle版本中,表决磁盘可以放在ASM磁盘组中。
机制:
每个节点都会定期(每秒)向所有表决磁盘写入一个“我还在”的信号(即磁盘心跳)。
同时,每个节点也会检查其他节点是否在更新表决磁盘。
当网络心跳全部丢失时,集群会进入“等待仲裁”状态。每个存活的分区会尝试与表决磁盘通信。
能与多数(超过半数)表决磁盘成功通信的分区将获胜,继续存活。
无法访问多数表决磁盘的分区(或单个节点)将被判定为失败,并被驱逐或自我终止。
重要性:磁盘心跳是防止脑裂的最后屏障。表决磁盘的数量通常配置为奇数(1, 3, 5等)以确保总能产生多数派。
- 本地心跳 (Local Heartbeat / LMON Self-Check)
这个心跳不像前两者那样是独立的通信信道,而更像是一种节点自我监控机制。
目的:监控节点自身的健康状况,确保本地的集群软件栈(Clusterware Stack)仍在正常运行。它防止节点本身“僵死”( hung)但网络心跳却还在发送的异常情况。
通信路径:节点内部。它不涉及网络或磁盘I/O。
机制:
节点的LMON进程会启动一个看门狗(Watchdog) 计时器。
集群中的其他关键进程(如LMD, LMS, LCK)必须定期(例如每秒)向LMON“报到”,重置这个计时器。
如果LMON在预定时间内没有收到某个关键进程的“报到”,它就认为本地的集群软件出现了严重问题。
此时,LMON会主动发起自我终止(Suicide),从而触发节点重启或被集群驱逐。这是一种“舍小保大”的策略,牺牲一个不健康的节点来保全整个集群的完整性。
重要性:它解决了“节点僵死”问题。如果没有本地心跳,一个卡死的节点可能无法响应其他节点的ping,但其网络端口依然是打开的,导致其他节点无法通过网络心跳超时来驱逐它,从而形成脑裂风险。
三者协同工作流程(脑裂场景模拟)
假设一个两节点RAC(拥有3个表决磁盘)的私有网络突然完全中断:
网络心跳中断:Node 1和Node 2都无法收到对方的心跳。
等待期:双方都会等待MISSCOUNT时间(例如30秒),期望网络能恢复。
仲裁开始:网络未恢复,双方开始依赖磁盘心跳进行仲裁。
检查表决磁盘:
Node 1 尝试访问3个表决磁盘。假设它成功访问了2个(多数派)。
Node 2 也尝试访问3个表决磁盘。假设由于路径问题,它只能成功访问1个(少数派)。
裁决与执行:
Node 1 (多数派)获胜,继续运行。它会重新配置集群,将Node 2从集群成员中移除。
Node 2 (少数派)失败。它的CSSD(Cluster Synchronization Services Daemon)进程会自我终止,导致Node 2重启或被驱逐。
避免脑裂:通过磁盘心跳仲裁,集群最终只留下一个健康的分区(Node 1),成功避免了脑裂。
总结对比
心跳类型 目的 通信路径 监控进程 失败结果
网络心跳 监控节点间网络连通性 私有网络(Interconnect) LMON 触发重新配置或驱逐
磁盘心跳 仲裁脑裂,决定哪个分区存活 共享存储(Voting Disk) CSSD 失败的分区被驱逐
本地心跳 监控节点自身集群栈健康 节点内部 LMON(看门狗) 节点自我终止
简单来说:
网络心跳问:“兄弟,你还在吗?”
磁盘心跳说:“如果大家都失联了,我们来投票决定谁留下。”
本地心跳说:“我自己的身体好像出问题了,为了不连累大家,我先走了。”

浙公网安备 33010602011771号