本节主要介绍了 OceanBase 数据库选举的实现原理以及选举相关的一些常见问题。
OceanBase 数据库的选举(Election)是 OceanBase 数据库的基础组件之一,主要为上层提供选主服务。OceanBase是一款分布式数据库,以分区为单位的数据保存在数据库不同副本中,选举模块能够在多个全功能副本中选举出一个 Leader 作为主副本对外提供数据服务。
OceanBase 数据库的选举模型是依赖时钟同步的选举方案, 同个分区的多个全能副本在一个选举周期内进行预投票、投票、计票广播以及结束投票,最终敲定唯一的主副本。当选举成功后,每个副本会签订认定 Leader 的租约(Lease)。在租约过期前,Leader 会不断发起连任,正常情况下能够一直连任成功。如果 Leader 没有连任成功,在租约到期后会周期性的发起无主选举,保证数据有主副本对外提供数据服务。
OceanBase 数据库的选举模块会选举出 Leader 副本对外提供数据服务,为了方便解释,我们在解释选举原理时,先将选举的基础条件假定成理想的环境:
- 多个副本节点之间时钟完全一致。
- 所有选举的投票消息都有效快速地达到了目标地。
OBServer 在正常运行过程中,每个副本会签订认定 Leader 的租约(Lease),在租约过期前,Leader 会不断发起连任,连任成功,原主保持 Leader 副本角色,继续对外提供数据服务,这叫做有主连任。如下图所示,解释了最简单的有主连任场景,原主在租约周期过期前经过一次连任尝试就已经连任成功。
说明图中的时间轴仅标明时间的先后发生序列,跨度距离与绝对时间不强对应。
OBServer 在正常运行过程中,原主副本因为各种原因不能作为主副本对外提供数据服务,OceanBase 数据库在其他多数派的副本中选举出新的 Leader 副本作为新主上任,这个过程就是发起了无主选举,最终新主上任。无主选举是每个 OBServer 发起的。如下图所示,解释了无主选举的过程。
说明图中的时间轴仅标明时间的先后发生序列,跨度距离与绝对时间不强对应。
在 OceanBase 数据库的实际运行中,上面的理想环境是几乎不可能,所以选举模块的实际实现要考虑的因素和异常处理要远比上述解释的基础原理要复杂的多。在大部分时候,如果是想要理论学习 OceanBase 数据库选举模块的原理,不需要一次性地深入细节。但是当遇到具体问题,特别是在故障诊断情况下,有可能需要与 OceanBase 数据库技术支持人员共同梳理细节,分析问题。