首批通过分布式安全可靠测评,为关键业务系统打造
通过调整 Primary Zone 实现租户扩缩容
更新时间:2026-04-10 11:58:00
租户扩容和缩容本质上是提高和降低租户的服务能力,包括计算能力和存储容量。可以通过纵向提高或降低单节点的服务能力达成,也可以通过横向提高或降低单节点的服务能力达成。本文介绍如何通过修改 Primary Zone,从而横向增加或减少计算节点,达到租户总服务能力的提升或降低,实现租户的扩容或缩容。
前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
设置租户内的负载均衡策略。
租户内的负载均衡策略由租户级配置项
enable_rebalance和enable_transfer共同控制。配置项
enable_rebalance在系统租户下用于控制是否进行租户间的负载均衡;在用户租户下用于控制是否进行租户内均衡。默认值为true,设置后不需要重启 OBServer 节点,立即生效。配置项
enable_transfer用于控制是否开启租户下的 Transfer 功能,默认值为true,设置后不需要重启 OBServer 节点,立即生效。配置项enable_transfer值的含义依赖配置项enable_rebalance的取值:当配置项
enable_rebalance的值为false时,无论配置项enable_transfer的值为true还是false,系统均不会进行自动负载均衡。当配置项
enable_rebalance的值为true且enable_transfer的值为true时,表示在进行租户扩缩容操作时,系统会自动调整分区分布,实现负载均衡。当配置项
enable_rebalance的值为true且enable_transfer的值为false时,表示在进行租户扩缩容操作时,系统不能发起 Transfer 操作,只能通过日志流迁移实现有限的均衡。
具体设置方法如下:
系统租户设置指定租户的负载均衡策略
系统租户开启指定租户的租户内负载均衡和租户下的 Transfer 功能
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';以上语句表示仅指定租户下的配置项
enable_rebalance和enable_transfer的值为true。系统租户开启所有用户租户(不含
sys租户和 Meta 租户)的租户内负载均衡和租户下的 Transfer 功能ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;ALTER SYSTEM SET enable_transfer = true TENANT = all_user;或者
ALTER SYSTEM SET enable_rebalance = true TENANT = all;ALTER SYSTEM SET enable_transfer = true TENANT = all;以上语句表示所有用户租户下配置项
enable_rebalance和enable_transfer的值为true。说明
OceanBase 数据库从 V4.2.1 版本开始,
TENANT = all_user与TENANT = all语义相同,在需要生效范围为所有用户租户时,推荐使用TENANT = all_user,后续TENANT = all将废弃不再使用。
用户租户设置本租户的负载均衡策略
MySQL 模式Oracle 模式MySQL 租户开启本租户的租户内负载均衡和租户下的 Transfer 功能的语句如下:
ALTER SYSTEM SET enable_rebalance = true;ALTER SYSTEM SET enable_transfer = true;Oracle 租户开启本租户的租户内负载均衡和租户下的 Transfer 功能的语句如下:
ALTER SYSTEM SET enable_rebalance = 'true';ALTER SYSTEM SET enable_transfer = 'true';
更多配置项
enable_rebalance和enable_transfer的详细说明,请参见 enable_rebalance 和 enable_transfer。执行租户扩缩容操作前,建议先进行租户的资源规划,以便更好地达到预期效果。
有关租户扩缩容资源规划的详细操作,参见租户扩缩容资源规划。
增加 Primary Zone
使用
root用户登录到集群的sys租户。obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A进入
oceanbase数据库。use oceanbase;查询租户
mysql001的基本信息,例如TENANT_ID、PRIMARY_ZONE等信息。obclient> SELECT TENANT_ID, TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';查询结果如下:
+-----------+-------------+--------------+ | TENANT_ID | TENANT_NAME | PRIMARY_ZONE | +-----------+-------------+--------------+ | 1004 | mysql001 | zone1;zone2 | +-----------+-------------+--------------+ 1 row in set根据查询结果可知,租户
mysql001的TENANT_ID为 1004,PRIMARY_ZONE第一优先级为zone1。查询租户
mysql001当前日志流 Leader 副本位置的分布信息。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';查询结果如下:
+-----------+-------+---------------+----------+--------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+--------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | +-----------+-------+---------------+----------+--------+--------+--------------+ 2 rows in set根据查询结果可知,租户
mysql001有 2 个 Leader 副本提供服务,且均匀分布在 zone1 的两台机器上。修改租户
mysql001的PRIMARY_ZONE属性,第一优先级 Zone 的个数从 1 调整为 2。obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2';查看增加 Primary Zone 任务的执行状态。
obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND TENANT_ID = 1004;查询结果如下:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | 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 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:26:00.069089 | 2024-12-18 17:26:20.919021 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2' | FROM: 'zone1;zone2', TO: 'zone1,zone2' | 172.xx.xxx.xx | 2882 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ 1 row in set查询结果中,根据以下字段,找到对应的任务记录:
START_TIME:任务的发起时间。SQL_TEXT:任务对应的 SQL 语句。EXTRA_INFO:变更前后的 Primary Zone 信息。
当对应任务记录中
JOB_STATUS的值为SUCCESS时,表示增加 Primary Zone 的任务执行成功。有关视图
DBA_OB_TENANT_JOBS的详细字段说明,请参见 DBA_OB_TENANT_JOBS。查询租户
mysql001的基本信息,确认PRIMARY_ZONE属性修改成功,第一优先级由zone1变更为zone1,zone2。obclient> SELECT PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = 1004;查询结果如下:
+--------------+ | PRIMARY_ZONE | +--------------+ | zone1,zone2 | +--------------+ 1 row in set再次查询租户
mysql001日志流 Leader 副本位置的分布信息。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';查询结果如下:
+-----------+-------+---------------+----------+-------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+-------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1013 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | | 1004 | 1014 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | +-----------+-------+---------------+----------+-------+--------+--------------+ 4 rows in set根据查询结果可知,租户
mysql001在 zone1、zone2 上分别各有 2 个 Leader 副本,共 4 个 Leader 副本提供服务。
通过上述示例,变更前,租户 mysql001 的 PRIMARY_ZONE 第一优先级 Zone 的个数为 1,有 2 个 Leader 副本提供服务;变更后,租户 mysql001 的 PRIMARY_ZONE 第一优先级 Zone 的个数由 1 变更为 2,提供服务的 Leader 副本由 2 变更为 4,增加了计算节点,从而实现了租户的扩容。
减少 Primary Zone
使用
root用户登录到集群的sys租户。obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A进入
oceanbase数据库。use oceanbase;查询租户
mysql001的基本信息,例如TENANT_ID、PRIMARY_ZONE等信息。obclient> SELECT TENANT_ID, TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';查询结果如下:
+-----------+-------------+--------------+ | TENANT_ID | TENANT_NAME | PRIMARY_ZONE | +-----------+-------------+--------------+ | 1004 | mysql001 | zone1,zone2 | +-----------+-------------+--------------+ 1 row in set根据查询结果可知,租户
mysql001的TENANT_ID为 1004,PRIMARY_ZONE第一优先级为zone1和zone2。查询租户
mysql001当前日志流 Leader 副本位置的分布信息。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';查询结果如下:
+-----------+-------+---------------+----------+-------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+-------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1013 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | | 1004 | 1014 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | +-----------+-------+---------------+----------+-------+--------+--------------+ 4 rows in set根据查询结果可知,租户
mysql001有 4 个 Leader 副本提供服务,且均匀分布在 zone1、zone2 各自的两台机器上。修改租户
mysql001的PRIMARY_ZONE属性,第一优先级 Zone 的个数从 2 调整为 1。obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2';查看减少 Primary Zone 任务的执行状态。
obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND TENANT_ID = 1004;查询结果如下:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | 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 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:26:00.069089 | 2024-12-18 17:26:20.919021 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2' | FROM: 'zone1;zone2', TO: 'zone1,zone2' | 172.xx.xxx.xx | 2882 | | 5 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:41:44.412459 | 2024-12-18 17:41:54.965873 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2' | FROM: 'zone1,zone2', TO: 'zone1;zone2' | 172.xx.xxx.xx | 2882 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ 2 rows in set查询结果中,根据以下字段,找到对应的任务记录:
START_TIME:任务的发起时间。SQL_TEXT:任务对应的 SQL 语句。EXTRA_INFO:变更前后的 Primary Zone 信息。
当对应任务记录中
JOB_STATUS的值为SUCCESS时,表示减少 Primary Zone 的任务执行成功。有关视图
DBA_OB_TENANT_JOBS的详细字段说明,请参见 DBA_OB_TENANT_JOBS。查询租户
mysql001的基本信息,确认PRIMARY_ZONE属性修改成功,由zone1,zone2变更为zone1;zone2。obclient> SELECT PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = 1004;查询结果如下:
+--------------+ | PRIMARY_ZONE | +--------------+ | zone1;zone2 | +--------------+ 1 row in set再次查询租户
mysql001日志流 Leader 副本位置的分布信息。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';查询结果如下:
+-----------+-------+---------------+----------+--------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+--------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | +-----------+-------+---------------+----------+--------+--------+--------------+ 2 rows in set根据查询结果可知,租户
mysql001在 zone1 上有 2 个 Leader 副本提供服务。
通过上述示例,变更前,租户 mysql001 的 PRIMARY_ZONE 第一优先级 Zone 的个数为 2,有 4 个 Leader 副本提供服务;变更后,租户 mysql001 的 PRIMARY_ZONE 第一优先级 Zone 的个数由 2 变更为 1,提供服务的 Leader 副本由 4 变更为 2,减少了计算节点,从而实现了租户的缩容。