暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

OceanBase系统架构分布式选举

2024-02-17
119

在分布式系统的设计中,要解决的最主要问题之一就是单点故障问题(single point of failure (SPOF) )。为了能在某个节点宕机后,系统仍然具备正常工作的能力,通常需要对节点部署多个副本,互为主备,通过选举协议在多副本中挑选出主副本,并在主副本发生故障后通过选举协议自动切换至备副本。

主副本称为 Leader,备副本称为 Follower。

在分布式系统中,一个工作良好的选举协议应当符合两点预期:

  • 正确性

    即当一个副本认为自己是 Leader 的时候,不应该有其他副本同时也认为自己是 Leader,在集群中同时有两个副本认为自己是 Leader 的情况称为"脑裂",如 Raft 协议中的选举机制,通过保证为每个 Term 只分配一个 Leader 来避免脑裂,但是原生 Raft 中同一时刻可能有多个副本认为自己是 Leader(尽管它们分管不同的 Term,且更小的 Term 的主副本已经失效但是其不自知),使用原生的 Raft 协议必须读取多数派的内容来保证读取到的数据最新,OceanBase 数据库通过 Lease 机制避免对多数派的访问,确保在任意的时间点上只有一个副本能认为自己是 Leader。

  • 活性

    即任意时刻,当 Leader 宕机时,只要集群中仍然有多数派的副本存活,那么在有限的时间内,存活副本中应当有副本能够成为 Leader。

在满足正确性和活性的基础上,OceanBase 数据库的选举协议还提供了优先级机制与切主机制,优先级机制在当前没有 Leader 的情况下在当前可当选 Leader 的多个副本中,选择其中优先级最高的副本称为 Leader;切主机制在当前有 Leader 的情况下可以无缝将 Leader 切换至指定副本。

租约时长

当 Leader 与多数派超过一个租约时长无法连通时,将开启新一轮的选举,并选出下一任 Leader。

默认的租约时长是 10s,用户可以修改配置变更租约时长。

注意

更长的租约时长意味着对消息延迟抖动的更高容忍度,更好的鲁棒性,但同时也将延长宕机恢复时间。

更短的租约时长意味着对消息延迟抖动的更低容忍度,更差的鲁棒性,但同时也将缩短宕机恢复时间。

优先级

在选举过程中,Leader 将通过续约动作感知 Follower 副本的优先级变化,当 Follower 副本的优先级高于自己的时候,Leader 将通过主动切主动作,将 Leader 转移至 Follower 副本。

目前的优先级从高到低仅包含:

  1. 用户指定的 Leader。

  2. Primary Zone。

切主

用户可以通过 ALTER SYSTEM SWITCH REPLICA 命令控制日志流 Leader 的分布,内部将通过平滑切主机制,尽量以外部无感知的方式变更 Leader 的位置。

用户也可以变更 Primary Zone,选举将感知到 Primary Zone 的变化,并将 Leader 切换至目标副本。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论