Locality 基本语法结构型为如下所示

下述表格展示了语法中各元素的意义:

示例:

  • sys tenant 的 Locality: F@z1,F@z2,F@z3,F@z4,F@z5
  • tenant2 的 Locality: F@z1
  • 在旧的一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。
  • 当租户下 Locality 不为空的表的变更没有完成时,租户 Locality 变更不允许执行。
  • 租户的 Locality 变更没有发起时,Locality 不为空的表的 Locality 变更不允许执行。
  • 不允许直接增加或删除 Region Locality。比如 Locality F@zone 增加为 F@zone,X{*}@region 或 Locality F@zone,X{*}@region 删除为 都是不被允许(其中 X{*} 表示任意类型任意数量的副本)。
  • 对于 Zone Locality,每次仅允许增加、删除或修改一个 Zone 内的一个 Paxos 副本。比如,允许将 Locality F@zone1 增加为 F@zone1,L@zone2 ,将 Locality F@zone1,L@zone2 删除为 F@zone1 或是将 Locality F@zone1,L@zone2 修改为 。
  • 为了解决 Region Locality 的搬迁问题,OceanBase 中允许 Zone 和 Region 之间互相变更。比如,允许将 Locality F{2},L@region 变更为 F@zone1,F@zone2,L@zone3 ,或是将 Locality F@zone1,F@zone2,L@zone3 变更为 F{2},L@region ,需要注意的是,这里 Paxos 副本的副本数前后必须相等。

注意

  • 以上几种变更不能同时发生,每次仅能发生一个。
  • non_paxos 副本可以随上述变化一并发生,并且不限制数量。

Locality 的设置通常用于集群的副本数升级/降级和集群的搬迁:

  • 集群副本数升级

以租户为粒度,对集群中的每一个租户,增加租户下 Partition 的副本数。例如,将 Locality 由 F@z1,F@z2,F@z3 变更为 F@z1,F@z2,F@z3,F@z4,F@z5 ,租户从 3 副本变为 5 副本。

以租户为粒度,对集群内的每一个租户减少其中 Partition 的副本数。例如,将 Locality 由 F@z1,F@z2,F@z3,F@z4,F@z5 变更为 F@z1,F@z2,F@z3,F@z4 ,租户从 5 副本变为 4 副本。

  • 集群搬迁

以租户为粒度,对集群内的每一个租户通过若干次 Locality 变更。例如,将 Locality 从 F@hz1,F@hz2,F@hz3 变更为 即代表将原集群中属于杭州的两个 Zone 迁到上海。