Locality 描述了表、表组或租户下副本的分布情况。这里的副本分布情况指在 Zone 或 Region 上包含的副本的数量以及副本的类型,不同的租户在同一个集群内可以配置不同的 Locality 并且彼此之间相互独立不受影响。
Locality 语义
Locality 基本语法结构型为如下所示:
replicas{量词}@location
下述表格展示了语法中各元素的意义:
元素 | 说明 |
---|---|
replicas | 表示副本类型,副本类型相关说明请参见 副本概述 章节。
|
location | 表示位置。它是系统已知的一组枚举值。 location 的值为 Zone 的名称。 |
量词 | 不指定量词的时候,表示一个副本。用 有一种特殊的量词 |
说明
表和表组的 Locality 可以为空,表示继承自所属租户。租户的 Locality 不可以为空。
当租户的 Locality 发生变更时,在该租户下,所有 Locality 为空的表的副本的分布情况也会随之变化。Locality 不为空的表在租户的 Locality 变更时,其对应副本的分布情况不会改变。
示例:
下述示例展示了在一个拥有五个 Zone(z1~z5)的 OceanBase 集群中,可以容纳不同 Locality 的多个租户和它们的 Locality 情况:
sys tenant 的 Locality:
F@z1,F@z2,F@z3,F@z4,F@z5
tenant1 的 Locality:
F@z1,F@z2,F,R{ALL_SERVER}@z3
tenant2 的 Locality:
F@z1
Locality 变更规则
Locality 的变更需要遵循以下规则:
变更进度与 tenant/table 级变更限制
在旧的一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。
表级 Locality Zone List 必须是租户级 Locality Zone List 的子集。
Paxos 副本数变更规则
Locality 变更的类型转换目前仅支持 F->R、R->F 和 F->L 三种:
F->R 从 full 副本转换为 readonly 副本,是减 Paxos 副本操作,每次减的 Paxos 副本数需小于变更后 Paxos 的副本数。
R->F 从 readonly 副本转换为 full 副本,是加 Paxos 副本操作,每次加的 paxos 副本数需小于变更前 Paxos 的副本数。
F->L 从 full 副本转换为 logonly 副本,不涉及 Paxos 副本数量的变化。F->L 的变更不能与任何加或减 Paxos 副本的操作同时发生。
非 Paxos 副本的变化可以和上述任何变更同时发生,没有数量限制。
Locality 应用场景
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
变更为F@hz1,F@sh1,F@sh2
即代表将原集群中属于杭州的两个 Zone 迁到上海。