在 Oracle RAC(实时应用集群)中,投票盘(Voting Disk)是集群的核心组件,主要承担以下关键作用:
1. 心跳检测与节点存活判定
节点心跳记录:每个节点定期(默认每 2 秒)向投票盘写入心跳信号(称为 “心跳更新”),标记自己的存活状态。
故障快速感知:若某个节点超过一定时间(默认 30 秒)未更新心跳,其他节点通过投票盘发现后,会判定该节点 “失联”,触发故障隔离(如驱逐节点)。
类比:类似 “签到本”,所有节点定期签到,未签到的节点被视为故障。
2. 仲裁(脑裂防护)
解决网络分区冲突:当集群因网络故障分裂为多个子集群(“脑裂”)时,投票盘通过多数派原则决定哪部分节点继续运行:
每个节点在投票盘中占 1 票(可配置),存活节点需获得超过半数的投票才能继续工作。
例如:3 节点集群中,2 个节点存活则继续运行;若分裂为 2:1,2 节点组因拥有多数票而保留,1 节点组被终止。
核心目标:避免多个子集群同时修改共享数据,保证数据一致性。
3. 节点成员资格管理
存储集群中所有节点的成员列表及状态(如正常、已驱逐)。
节点启动时需从投票盘获取最新成员信息,确认自己是否属于当前集群。
若投票盘不可访问,节点无法加入集群(除非启用 “强制启动” 模式,但存在数据风险)。
4. 冗余与高可用性
多投票盘配置:默认创建 3 个投票盘(通过ocrconfig -add添加),分布在不同共享存储(如 ASM 磁盘组),避免单点故障。
自动修复:若某个投票盘损坏,集群会自动从其他存活投票盘同步数据,维持仲裁能力。
5. 与 OCR 的配合
OCR(集群注册表)存储集群配置(如节点列表、服务信息),而投票盘专注于实时状态和仲裁。
两者共同构成集群的 “大脑”:OCR 是静态配置中心,投票盘是动态心跳与仲裁中心。
典型场景举例
节点故障:节点 A 宕机,其他节点通过投票盘发现其心跳停止,驱逐节点 A 并重新计算仲裁。
网络分区:2 节点集群因网络分裂为 1:1,此时需第 3 个投票盘(仲裁盘)决定哪侧存活(如通过CLUSTER_INTERCONNECTS配置优先级)。
存储故障:若单个投票盘损坏,集群仍可用(剩余投票盘需满足多数派),但需尽快修复避免风险。
总结
投票盘是 RAC 的 “心跳监测器” 和 “仲裁法官”,通过实时心跳和多数派原则,确保集群在故障时快速响应,避免脑裂和数据不一致。理解其机制有助于诊断节点驱逐、集群启动失败等问题,是 RAC 运维的核心知识点。
(注:投票盘默认路径为/u01/app/19.0.0/grid/oradata/ocrvote/,可通过crsctl query css votedisk查看当前配置。)