首批通过分布式安全可靠测评,为关键业务系统打造
减少副本
更新时间:2026-04-10 11:58:35
本文介绍如何通过修改集群中某个租户的 Locality 来减少租户下日志流的副本数。
有关修改 Locality 的详细操作和注意事项,参见 修改 Locality。
前提条件
变更 Locality 之前,需要确认待变更的 Zone 上各节点的资源分配情况。如果 Zone 上的节点资源不足导致无法存放租户需要的资源单元,则将导致无法进行 Locality 变更。
有关 Zone 上各节点的资源分配情况,请参见 查看租户和资源信息。
注意事项
租户的 Locality 不可以为空。
当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。
在旧一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。
减少副本后,如果要释放资源,还需要注意缩减目标租户的资源池。
以
z1,z2,z3为例,删除z3,有两种场景:
操作步骤
示例:通过修改租户 mysql001 的 Locality,由 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 修改为 FULL{1}@zone1, FULL{1}@zone2,减少租户的副本数。
说明
此处仅以减少 1 个 Zone 为示例,实际操作中注意减少后的 Zone 的数量需要能够满足多数派原则。
使用 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。obclient>ALTER TENANT mysql001 locality="FULL{1}@zone1, FULL{1}@zone2";查看 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 | 0 | 100 | 2023-01-05 19:33:46.730319 | 2023-01-05 19:33:46.920111 | 1002 | ALTER TENANT mysql001 locality='FULL{1}@zone1, FULL{1}@zone2' | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | xx.xx.xx.xx | 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 | | 1002 | mysql001 | USER | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2 | +-----------+-------------+-------------+-------------------+---------------------------------------------+
通过步骤 3 与步骤 6 的查询比较,租户 mysql001 的 Locality 由原来的 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 变为 FULL{1}@zone1, FULL{1}@zone2,租户 mysql001 的副本数减少。