OceanBase 数据库的选举(Election)是 OceanBase 数据库的基础组件之一,为上层提供选主服务。OceanBase 是一款分布式数据库,以分区为单位的数据保存在数据库不同副本中,选举模块能够在多个全功能副本中选举出一个 Leader 作为主副本对外提供数据服务。
采用 V1 版本优先级,逻辑上为一棵二叉决策树,按照优先级从高至低逐项比较判据:
observer stopped表示进程收到 kill -15 信号优雅退出而降低优先级(优雅退出过程将首先降低选举优先级,然后等待5s时间切主,然后再执行各模块的退出逻辑)。server stopped表示集群层面 stop 了这台机器,通常是下线某台机器的前置动作。zone stopped表示集群层面 stop 这台机器所在的 zone。fatal failure表示机器被检测到遭遇了致命故障,该优先级导致的切主动作将不会等待上层模块准备就绪而强制执行(例如会杀事务),可以通过__all_server_event_history指定 module 为"FAILURE_DETECTOR"查询事件,这些故障在这个版本中包括:- CLOG 盘 hung(同步日志卡住),阈值为配置项
log_storage_warning_tolerance_time,默认值5s。 - CLOG 盘满(无法写日志),阈值为配置项
log_disk_utilization_limit_threshold,默认值为 CLOG 盘容量的95%。 - 写 SSTable hung(表现为读写转储数据卡住),阈值为硬编码
60s。 - 写 SLOG hung(表现为读写元数据卡住),阈值为配置项
data_storage_warning_tolerance_time,默认值5s。
- CLOG 盘 hung(同步日志卡住),阈值为配置项
scn表示 CLOG 的回放位点(scn 值与集群时间戳服务弱关联(GTS)),避免切主至回放位点过小的副本(将花费更多的时间上任,可能超过 RTO 8s 保证),阈值为硬编码2s。blacklist表示不可当选 Leader 的状态,在该版本中包括:MIGRATE,该状态通常出现在迁移过程中,副本是迁移流程的源端日志流 Leader。SWITCH_REPLICA,用户使用ALTER SYSTEM SWITCH REPLICA FOLLOWER指定副本不可当主,该副本将会被记录在 blacklist 中,可以通过__all_virtual_ls_election_reference_info查询该状态。副本类型转换,F->R,F 副本若是 Leader,在转换前会被加入 blacklist。
功能适用性
该内容适用于 OceanBase 数据库 V4.2.x 版本及以上。
manual leader表示用户通过ALTER SYSTEM SWITCH REPLICA LEADER命令手动指定的副本 Leader 状态,可以通过__all_virtual_ls_election_reference_info查询该状态。primary region定义为 租户 primary zone 所在的 region ,通常情况下 Leader 不会选出 primary region(当且仅当 1-7 的选举优先级相同),以防止跨地域的访问(防止 RT 高)。serious failure定义为 会导致切主(优雅切主)的异常 ,当前版本包括:SCHEMA_NOT_REFRESHED,在 schema 刷新完成前将会设置该 failure,目的是为了避免 primary zone 副本宕机重启后,Leader 在 schema 刷新完成前过早回切导致 sql 无法执行。
zone priority定义为 RS 为每个日志流副本设置的优先级,在单日志流架构下,日志流数量将匹配租户的 primary zone 中副本的数量,并为每个日志流以ROUND ROBIN方式分配各自的高优先级副本,以将日志流打散(分区 Tablet 的打散将表现为在不同的日志流间Transfer)。当且仅当以上优先级项全部相同时,选择 IP-Port 最小的副本成为 Leader。