本文主要介绍 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 状态。
-
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。