OceanBase 数据库的切主优先级

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