oceanbase中分区选取leader这个过程中,选举模块、clog模块、rs服务,他们之间是怎么协调的各自又是怎么做的
谁有详细的解释啊 ,官网也看了,零零碎碎的,串不起来
这有些复杂 慢慢学吧
在分区选取Leader的过程中,选举模块、clog模块和rs服务之间通过紧密的协调和通信来确保选举的顺利进行:
- 当rs服务发现某个分区没有Leader时,它会通知该分区的副本触发选举过程。
- 选举模块在收到通知后,会按照预定的算法和规则在副本之间展开选举。
- 在选举过程中,clog模块会确保事务的一致性和数据的完整性。
- 一旦选举出新的Leader,rs服务会更新集群的配置信息,并将这一变化通知给其他相关的服务和组件。
- 选举模块:
-
选举模块基于 OceanBase 数据库特有的选举算法,产生 Leader 并保证 Leader 的唯一性,称为 Election Leader。
-
选举模块会首先在多个副本中选出一个 Leader 节点,并通过租约(Lease)机制保证 Leader 的合法性。
-
当选举成功后,每个副本会签订认定 Leader 的租约。在租约过期前,Leader 会不断发起连任,正常情况下能够一直连任成功。如果 Leader 没有连任成功,在租约到期后会周期性地发起无主选举,保证副本的高可用。
- CLog 模块:
-
基于 Election Leader,CLog 模块先执行 reconfirm 流程,确保 CLog Leader 具有全量日志。
-
然后执行 CLog 的上任流程,这是一个异步通知 RoleChangeService 模块的过程。此后,CLog Leader 有效。
- RS 服务(Root Service):
-
当新 Leader 上任后,需要向 Root Service 汇报 Leader 的位置信息。
-
如果配置了 obproxy,还需要等待 Proxy 更新正确 Leader 位置信息后才能将后续的 SQL 语句路由到正确的 Leader 位置上。
这些模块之间的协调工作确保了在 Leader 选举过程中,各个阶段的任务能够顺利进行,从而保证系统的高可用性和数据的一致性。具体来说,选举模块负责选举出 Leader,CLog 模块确保 Leader 具有全量日志,而 Root Service 和 obproxy 确保客户端能够正确地访问到新的 Leader。