调整副本分布
有关修改 Locality 的详细操作和注意事项,参见 修改 Locality。
前提条件
变更 Locality 之前,需要确认待变更的 Zone 上各节点的资源分配情况。如果 Zone 上的节点资源不足导致无法存放租户需要的资源单元,将导致无法进行 Locality 变更。
有关 Zone 上各节点的资源分配情况,请参见 查看租户和资源信息。
注意事项
- 租户的 Locality 不可以为空。
- 当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。
- 在旧一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。
- Locality 变更一次只能执行一个动作,例如把 Zone3 替换为 Zone4,不能直接替换,可以先增加一个 Zone4,然后再减少一个 Zone3。
- 通过增加副本会导致租户 Locality 与 租户 Primary Zone 不匹配,如果增加的 Zone 参与切主,则需要修改 Primary Zone;如果增加的 Zone 不参与切主,则不需要修改 Primary Zone。
操作步骤
示例:通过修改租户 mysql001 的 Locality,由 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 修改为 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4。
-
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A -
进入
oceanbase数据库。obclient>use oceanbase; -
查看租户
mysql001修改前的 Locality。obclient> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS; +-----------+-------------+-------------+-------------------+---------------------------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | LOCALITY | +-----------+-------------+-------------+-------------------+---------------------------------------------+ | 1 | sys | SYS | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | | 1001 | META$1002 | META | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | | 1002 | mysql001 | USER | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | +-----------+-------------+-------------+-------------------+---------------------------------------------+可以看到租户mysql001分别在 zone1 、zone2 和 zone3 上有一个全能型副本。 -
修改租户
mysql001的 Locality,增加一个 zone4 的副本。obclient>ALTER TENANT mysql001 locality="FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3, FULL{1}@zone4"; -
查看 Locality 变更任务的执行状态。
obclient>SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY'; +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | 1 | ALTER_TENANT_LOCALITY | SUCCESS | NULL | 0 | 2023-01-05 19:38:38.416011 | 2023-01-05 19:38:38.416011 | 1002 | ALTER TENANT mysql001 locality='FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3, FULL{1}@zone4' | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | xx.xx.xx.237 | 2882 | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+当
JOB_STATUS为SUCCESS时,则说明 Locality 变更任务执行成功。 -
修改租户
mysql001的 Locality,减少 zone3 的副本。obclient>ALTER TENANT mysql001 locality="FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4"; -
查看 Locality 变更任务的执行状态。
obclient>SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY'; +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+ | 1 | ALTER_TENANT_LOCALITY | SUCCESS | NULL | 0 | 2023-01-05 19:38:38.416011 | 2023-01-05 19:38:38.416011 | 1002 | ALTER TENANT mysql001 locality='FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4' | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3, FULL{1}@zone4 | xx.xx.xx.237 | 2882 | +--------+-----------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+------------------------------------------------------------------------------+---------------------------------------------+----------------+-------------+当
JOB_STATUS为SUCCESS时,则说明 Locality 变更任务执行成功。 -
查看租户
mysql001修改后的 Locality。obclient> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS; +-----------+-------------+-------------+-------------------+---------------------------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | LOCALITY | +-----------+-------------+-------------+-------------------+---------------------------------------------+ | 1 | sys | SYS | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | | 1001 | META$1002 | META | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4 | | 1002 | mysql001 | USER | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4 | +-----------+-------------+-------------+-------------------+---------------------------------------------+
通过步骤 3 与步骤 8 的查询比较, 租户 mysql001 的 Locality 由原来的 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 变为 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone4 ,租户 mysql001 在 zone1、zone2、zone4 上分别有一个全能型副本。
在步骤 4 执行过后,增加副本会导致租户 Locality 与租户 Primary Zone 不匹配,如果增加的 Zone 参与切主,则需要修改 Primary Zone,关于修改 Primary Zone 的操作,参见 调整 Primary Zone;如果增加的 Zone 不参与切主,则不需要修改 Primary Zone。




