在Oracle RAC(Real Application Clusters)中,心跳(Heartbeat) 是集群节点间用于检测存活状态的核心机制,确保节点间的通信正常并避免脑裂(Split Brain)问题。以下是RAC的三种关键心跳机制及其作用:
1. 网络心跳(Network Heartbeat)
- 作用:通过 私有网络互联(Private Interconnect) 实时检测节点间的通信状态。
- 工作原理:
- 每个节点周期性地(默认每秒)向其他节点发送心跳信号。
- 若某个节点在指定时间(默认
misscount
参数为30秒)未收到其他节点的心跳,则认为该节点故障。 - 关键组件:依赖冗余的私有网络(如双网卡绑定)确保高可靠性。
- 故障处理:
- 若私有网络完全中断,集群可能触发节点驱逐(Node Eviction)或重启,防止脑裂。
2. 磁盘心跳(Disk Heartbeat)
- 作用:通过 Voting Disk 检测节点是否存活。
- 工作原理:
- 每个节点定期向Voting Disk写入心跳信息(默认每1秒一次)。
- 若某个节点无法在
disktimeout
时间(默认200秒)内访问Voting Disk,集群认为该节点故障。 - Voting Disk需存储在共享存储(如ASM、共享LUN)中,且推荐奇数个(至少3个)以容忍多数故障。
- 故障处理:
- 若多数Voting Disk不可用,集群可能无法达成共识,导致节点驱逐或集群宕机。
3. 本地心跳(Local Heartbeat)
- 作用:节点内部自检机制,确保本地进程健康。
- 工作原理:
- 集群守护进程(如
CSSD
,Cluster Synchronization Services Daemon)监控本地节点的关键资源(如网络、存储)。 - 若本地关键资源异常(如私有网络中断或存储访问失败),节点会主动终止自身以避免集群分裂。
- 集群守护进程(如
- 故障处理:
- 节点自终止(Self-Termination)后,剩余节点重新组成集群。
心跳机制的综合作用
-
避免脑裂:
- 当网络分区(Network Partition)发生时,心跳机制确保只有多数节点存活的分区能继续运行。
- 若节点无法通过 网络心跳 和 磁盘心跳 达成多数一致,异常节点会被驱逐。
-
故障检测与恢复:
- 快速检测节点故障,触发服务迁移(如TAF)或资源重新分配。
-
参数配置:
misscount
:网络心跳的最大容忍丢失时间(默认30秒)。disktimeout
:磁盘心跳的最大容忍超时时间(默认200秒)。- 可通过
crsctl
命令调整(需谨慎操作)。
常见问题
Q1: 如果私有网络中断,但Voting Disk正常,会发生什么?
- RAC依赖网络心跳和磁盘心跳共同工作。若私有网络中断:
- 若仅单节点失联,其他节点通过Voting Disk判定其故障并驱逐。
- 若网络分区导致多个节点失联,只有拥有多数Voting Disk的分区可以存活。
Q2: Voting Disk为什么需要奇数个?
- 奇数个Voting Disk(如3或5)确保集群在分区时能形成“多数派”(如3个中的2个),避免平局导致的集群分裂。
Q3: 如何监控RAC心跳状态?
- 使用命令:
crsctl check cluster -- 检查集群状态 crsctl query css votedisk -- 查看Voting Disk状态 oifcfg getif -- 查看网络接口配置
总结
- 网络心跳(私有网络)、磁盘心跳(Voting Disk)、本地心跳(自检)共同保障RAC的高可用性。
- 心跳机制是RAC防脑裂和故障恢复的核心,需结合冗余网络、共享存储和合理参数配置。
- 理解心跳机制对诊断集群故障(如节点驱逐、网络分区)至关重要。