首批通过分布式安全可靠测评,为关键业务系统打造
节点故障的自动处理
更新时间:2025-04-28 17:48:56
Root Service 高可用
在 OceanBase 集群中,Root Service 提供集群的各类管理服务,Root Service 服务的高可用使用如下的方式实现:Root Service 服务使用 Paxos 协议实现高可用,可以通过集群配置,指定 Root Service 服务副本数,Root Service 的各副本基于 Paxos 协议选举 Leader,Leader 副本上任后为集群提供 Root Service 服务。当 Root Service 的当前 Leader 发生故障卸任时,其他的 Root Service 副本重新选举产生新的 Leader,并继续提供 Root Service 服务,依次实现 Root Service 的高可用。Root Service 的各副本不是一个单独的进程,仅是某些节点上启动的一个服务。
节点状态监测
作为集群的中控服务,Root Service 负责集群的节点管理,各节点通过心跳数据包(heartbeat)的方式,定期(每 2s)向 Root Service 汇报自己的进程状态,Root Service 通过监测节点的心跳数据包,来获取当前 observer 进程的工作状态。
节点心跳状态相关配置项
lease_time:当 Root Service 累计超过
lease_time时间没有收到过某节点的任意心跳数据包时,Root Service 认为该 observer 进程短暂断线,Root Service 会标记该节点的心跳状态为lease_expired。server_permanent_offline_time:当 Root Service 累计超过
server_permanent_offline_time时间没有收到过某节点的任意心跳数据包时,Root Service 认为该 observer 进程断线,Root Service 会标记该节点的心跳状态为permanent_offline。
Root Service 对 OBServer 节点故障的处理
Root Service 根据心跳数据包可以获得节点如下的工作状态:
节点心跳数据包存在,心跳数据包中的节点磁盘状态正常。此种状态下,Root Service 认为节点处于正常工作状态。
节点心跳数据包存在,心跳数据包中的节点磁盘状态异常。此种状态下,Root Service 认为 observer 的进程还在,但节点磁盘故障。此种状态下,Root Service 会尝试将该节点上的全部 Leader 副本切走。
节点心跳数据包不存在,节点心跳数据包的丢失时间还比较短,节点心跳状态为
lease_expired,此种状态下,Root Service 仅将节点的工作状态设置为 inactive,不做其他处理。节点心跳数据包不存在,节点心跳数据包丢失时间超过
server_permanent_offline_time,节点的心跳状态为permanent_offline,此种情况下,Root Service 会对该节点上的数据副本进行处理,将该节点上包含的数据副本从 Paxos 成员组中删除,并在其他可用节点上补充数据,已保证数据副本 Paxos 成员组完整。
故障机器的恢复
集群中发生故障的节点存在两种情况:
故障节点可以重新启动。这种情况下,不论故障机器之前处于哪种心跳状态,重新启动后,OBServer 节点与 Root Service 之间的心跳数据包恢复以后,节点可重新提供服务。
故障节点损坏,无法重新启动。这种情况下,在确认节点损坏无法重新启动后,需要数据库管理员执行集群管理操作,将该节点删除。删除流程可参考 alter system delete server 管理操作。