租户级副本变更操作,请参见 Locality 管理 章节。

表级副本主要通过建表时指定 Locality 属性或者 语句指定 Locality 属性,示例语句如下所示:

默认表级 Locality 为空的表,通过变更租户 Locality 可批量调整租户下所有表的副本分布。Locality 不为空的表,可通过表级 Locality 变更来调整目标表的副本分布,即表级 Locality 的变更对象为表 Locality 不为空的表。

表级 Locality 的操作方式与租户级 Locality 相同,仅支持每次一个 Zone 上的 Locality 变更。并且变更后的表 Locality 仍然要满足与当前租户 Locality 的匹配限制。表级 Locality 的变更流程也与租户级 Locality 相同,但变更对象仅限于对单个目标表。变更执行后,可登录系统租户运行下述 SQL 语句以查询变更进度:

说明

租户级 Locality 变更也可使用上述语句进行查询,返回结果中的 tenant idtable_name 列中会显示变更对象的具体值。对于表级 Locality 的变更,返回结果中的 tenant_id 为 NULL。

  • 对表级 Locality 非空的不同目标表,Locality 变更操作可以同时进行。

  • 对表级 Locality 为空的表,如果需要在 Zone 和 Region 内增加 non_paxos 类型副本时,可通过 ALTER TABLE 修改此表。例如,tenant Locality=F@z1,F@z2,F@z3 中有一个 Locality 为空的表,通过 ALTER TABLE 修改为 Locality=F@z1,F@z2,R@z3 后该表的 Locality 不再为空。同样增减 non_paxos 副本的任务也是直接交由 RootService 的负载均衡线程完成。

  • 不支持将 Locality 非空的表修改为空。

  • sys 租户系统表的 Locality 必须与 sys 租户的 Locality 保持一致,即系统表的 Locality 始终为空,不支持修改系统表中表级 Locality 的修改。

假设集群在杭州有三个机房分别为 hz1@Hangzhou、 和 hz3@Hangzhou。且租户的默认三个全功能 Locality 分别设定为 F@hz1F@hz2F@hz3

也可通过以下的 ALTER TABLE 语句进行修改:

执行后等待 __all_rootservice_job 表中对应任务记录的状态变为 SUCCESS,即表示创建或修改完成。

注意

表级 Locality 的变更与租户级 Locality 变更具有如下制约关系:

  • 在旧的一轮租户级 Locality 没有完成变更时,新一轮的租户级 Locality 变更不允许被执行。

  • 当租户下 Locality 不为空的表的变更没有完成时,租户级 Locality 变更不允许执行。

综上所述,租户级 Locality 变更不允许同时发起多轮变更,租户和表的 Locality 变更前需要先完成未完成的变更。