在OB集群进行版本升级,轮转合并,副本迁移或类型转换等操作时,RS会依照若干规则以及优先级,以partition group为单位进行切主,1.4.6及以上版本的切主优先级由高到低依次为:
- is in service observer
处于服务状态的 OBServer 才能够成为切主的目标对象,如果 OBServer 处于非服务状态,不能够成为切主的目标对象。通过 alter systemstop server
可以将指定 OBServer 设置为非服务状态,通过alter system stop zone
可以将指定 Zone 内的全部 OBServer 设置为非服务状态。
- primary region
我们将 Primary Zone所在的 Region 成为 Primary Region,在执行切主时,处于 Primary Region 内的 OBServer 拥有较高的优先级。
- 轮转合并
RS 会尝试将 leader 从处于 merge 状态的 Zone 上切走,即处于非 merge 状态的 Zone 具有更高的优先级。这里 Zone 是否处于 merge 有 Zone 的两个属性决定,当且仅当 Zone 的 is_merging 为 true 并且 suspend_merging 为false 时,认为 Zone 处于 merge 状态,其他情况 Zone 均不是 merge 状态。
- candidate count
我们称那些在下一轮切主中能够成为 leader 的副本为 candidate,下一轮切主中的 candidate 在本轮中可能是leader,也可能是 follower。以 partition group 为单位进行切主,RS会统计各个zone内同一个 partition group下 candidate 的数量,并根据 candidate number 的大小决定优先级,candidate number 大的 Zone 具有更高的优先级。
- 手工切主优先级
对应alter system switch replica leader,当前alter system switch replica并不是强制切主,该优先级位于以上四个优先级以后。
- 迁移和类型转换
RS 统计不同 Zone 内同一个 partition group 中处于迁移和类型转换状态 replicas 的副本数量,处于迁移和类型转换状态的副本数量越少的,优先级越高。
- Primary Zone
Primary Zone是 partitiongroup 的 leader 偏好位置,在以上优先级相同的情况下,RS会尝试优先将 leader 切到 Primary Zone 上。