首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库的切主优先级
更新时间:2023-11-14 03:16
本文主要介绍 OceanBase 数据库中的切主优先级。
适用版本
OceanBase 数据库 V1.4.6 及后续版本
引起切主的原因
OceanBase 数据库的切主可能由以下原因引起:
发起 Primary Zone 的变更。 这种情况下 RootService 会根据 Primary Zone 的优先级进行切主。
发起
STOP SERVER或STOP ZONE的操作。这种情况下 RootService 会先将对应 Server 和 Zone 上的 Leader 切换到其他的 Server 上。
发起合并。
发起合并时的切主行为由配置项
enable_merge_by_turn控制,该配置项表示是否开启轮转合并,当该配置为TRUE时,合并会触发切主。默认为FALSE,表示合并不会触发切主。有关该配置项的详细信息,请参见 OceanBase 数据库《参考指南》中的 系统配置项 章节。
进行负载均衡操作时会将相关的 Partition 的 Leader 切换到其他节点。
切主优先级
在 OceanBase 集群进行版本升级、轮转合并、副本迁移或类型转换等操作时,RootService 会依照若干规则以及优先级,以 Partition Group 为单位进行切主,OceanBase 数据库的切主优先级由高到低排序如下:
OBServer 是否处于服务状态:处于服务状态的 OBServer 才能够成为切主的目标对象。如果 OBServer 处于非服务状态,不能够成为切主的目标对象。
通过
ALTER SYSTEM STOP SERVER可以将指定 OBServer 设置为非服务状态,通过ALTER SYSTEM STOP ZONE可以将指定 Zone 内的全部 OBServer 设置为非服务状态。因此,您可以通过将 OBServer 设置为非服务状态的方法将主副本切换到优先级不高的 Zone 中。
Primary Region:Primary Zone 所在的 Region 成为 Primary Region,在执行切主时,处于 Primary Region 内的 OBServer 拥有较高的优先级。
轮转合并:RootService 会尝试切换 Leader 处于 Merge 状态的 Zone ,即处于非 Merge 状态的 Zone 具有更高的优先级。
说明
Zone 是否处于 Merge 状态由 Zone 的两个属性决定:
- Zone 的
is_merging为 TRUE。 - Zone 的
suspend_merging为 FALSE。
此时认为 Zone 处于 merge 状态,其他情况 Zone 均不是 merge 状态。
- Zone 的
Candicate 数量:在下一轮切主中能够成为 Leader 的副本称为 Candidate。下一轮切主中的 Candidate 在本轮中可能是 Leader,也可能是 Follower。以 Partition Group 为单位进行切主,RootService 会统计各个 Zone 内同一个 Partition Group 下 Candidate 的数量,并根据
candidate number的大小决定优先级,candidate number的值较大的 Zone 具有更高的优先级。手动切主:手动切主的优先级对应
ALTER SYSTEM SWITCH REPLICA LEADER操作,由指定的副本类型确定。说明
ALTER SYSTEM SWITCH REPLICA不会强制切主,该优先级位于以上四个优先级以后。迁移和类型转换:RootService 会统计不同 Zone 内同一个 Partition Group 中处于迁移和类型转换状态 Replicas 副本数量,处于迁移和类型转换状态的副本数量越少的,优先级越高。
Primary Zone:Primary Zone 是 Partition Group 的 Leader 偏好位置,在以上优先级相同的情况下,RootService 会尝试优先将 Leader 切换到 Primary Zone。