首批通过分布式安全可靠测评,为关键业务系统打造
减少副本
更新时间:2024-03-21 16:26:18
本文介绍如何通过修改集群中某个租户的 Locality 来减少租户下日志流的副本数。
有关修改 Locality 的详细操作和注意事项,参见 修改 Locality。
前提条件
变更 Locality 之前,需要确认待变更的 Zone 上资源单元和资源池的状态。如果 Zone 上的 OBServer 资源不足导致无法存放租户需要的资源单元,则将导致无法进行 Locality 变更。
有关 Zone 上资源单元和资源池的状态的检查方法,参见 查看集群的资源信息。
注意事项
租户的 Locality 不可以为空。
当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。
在旧一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。
Locality 变更一次只能执行一个动作,例如把 Zone3 替换为 Zone4,不能直接替换,可以先增加一个 Zone4,然后再减少一个 Zone3。
通过增加副本会导致租户 Locality 与 租户 Primary Zone 不匹配,如果增加的 Zone 参与切主,则需要修改 Primary Zone;如果增加的 Zone 不参与切主,则不需要修改 Primary Zone。
减少副本后,如果要释放资源,还需要注意缩减目标租户的资源池。
以
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 -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 的副本数减少。