---
title: "通过调整 Primary Zone 实现租户扩缩容 - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: 通过调整 Primary Zone 实现租户扩缩容 租户扩容和缩容本质上是提高和降低租户的服务能力，包括计算能力和存储容量。可以通过纵向提高或降低单节点的服务能力达成，也可以通过横向提高或降低单节点的服务能力达成。本文介绍如何通过修改 Primary Zone，从而横向增加或减少计算节点，达到租户总服务能力的提升或降…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.0

# 通过调整 Primary Zone 实现租户扩缩容

更新时间：2026-04-10 11:58:35

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.0/zh-CN/600.manage/200.tenant-management/600.common-tenant-operations/800.tenant-scale-in-and-out/400.adjust-primary-zone.md)  

租户扩容和缩容本质上是提高和降低租户的服务能力，包括计算能力和存储容量。可以通过纵向提高或降低单节点的服务能力达成，也可以通过横向提高或降低单节点的服务能力达成。本文介绍如何通过修改 Primary Zone，从而横向增加或减少计算节点，达到租户总服务能力的提升或降低，实现租户的扩容或缩容。

## 前提条件

调整 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 功能

      ```sql
      ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';

      ```

      ```sql
      ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';

      ```

      以上语句表示仅指定租户下的配置项 `enable_rebalance` 和 `enable_transfer` 的值为 `true`。
     - 系统租户开启所有用户租户（不含 `sys` 租户和 Meta 租户）的租户内负载均衡和租户下的 Transfer 功能

      ```sql
      ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;

      ```

      ```sql
      ALTER SYSTEM SET enable_transfer = true TENANT = all_user;

      ```

      或者

      ```sql
      ALTER SYSTEM SET enable_rebalance = true TENANT = all;

      ```

      ```sql
      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 功能的语句如下：

  ```sql
  ALTER SYSTEM SET enable_rebalance = true;

  ```

  ```sql
  ALTER SYSTEM SET enable_transfer = true;

  ```

  Oracle 租户开启本租户的租户内负载均衡和租户下的 Transfer 功能的语句如下：

  ```sql
  ALTER SYSTEM SET enable_rebalance = 'true';

  ```

  ```sql
  ALTER SYSTEM SET enable_transfer = 'true';

  ```

更多配置项 `enable_rebalance` 和 `enable_transfer` 的详细说明，请参见 [enable_rebalance](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642051) 和 [enable_transfer](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642060)。

## 增加 Primary Zone

1. 使用 `root` 用户登录到集群的 `sys` 租户。

   ```shell
   obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A

   ```
 2. 进入 `oceanbase` 数据库。

   ```sql
   use oceanbase;

   ```
 3. 查询租户 `mysql001` 的基本信息，例如 `TENANT_ID`、`PRIMARY_ZONE` 等信息。

   ```shell
   obclient> SELECT TENANT_ID, TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+--------------+
   | TENANT_ID | TENANT_NAME | PRIMARY_ZONE |
   +-----------+-------------+--------------+
   |      1004 | mysql001    | zone1;zone2  |
   +-----------+-------------+--------------+
   1 row in set

   ```

   根据查询结果可知，租户 `mysql001` 的 `TENANT_ID` 为 1004，`PRIMARY_ZONE` 第一优先级为 `zone1`。
 4. 查询租户 `mysql001` 当前日志流 Leader 副本位置的分布信息。

   ```shell
   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';

   ```

   查询结果如下：

   ```shell
   +-----------+-------+---------------+----------+--------+--------+--------------+
   | 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 的两台机器上。
 5. 修改租户 `mysql001` 的 `PRIMARY_ZONE` 属性，第一优先级 Zone 的个数从 1 调整为 2。

   ```shell
   obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2';

   ```
 6. 查看增加 Primary Zone 任务的执行状态。

   ```shell
   obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND TENANT_ID = 1004;

   ```

   查询结果如下：

   ```shell
   +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+
   | 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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000641193)。
 7. 查询租户 `mysql001` 的基本信息，确认 `PRIMARY_ZONE` 属性修改成功，第一优先级由 `zone1` 变更为 `zone1,zone2`。

   ```shell
   obclient> SELECT PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = 1004;

   ```

   查询结果如下：

   ```shell
   +--------------+
   | PRIMARY_ZONE |
   +--------------+
   | zone1,zone2  |
   +--------------+
   1 row in set

   ```
 8. 再次查询租户 `mysql001` 日志流 Leader 副本位置的分布信息。

   ```

   查询结果如下：

   ```shell
   +-----------+-------+---------------+----------+-------+--------+--------------+
   | 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

1. 使用 `root` 用户登录到集群的 `sys` 租户。

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+--------------+
   | TENANT_ID | TENANT_NAME | PRIMARY_ZONE |
   +-----------+-------------+--------------+
   |      1004 | mysql001    | zone1,zone2  |
   +-----------+-------------+--------------+
   1 row in set

   ```

   根据查询结果可知，租户 `mysql001` 的 `TENANT_ID` 为 1004，`PRIMARY_ZONE` 第一优先级为 `zone1` 和 `zone2`。
 4. 查询租户 `mysql001` 当前日志流 Leader 副本位置的分布信息。

   ```

   查询结果如下：

   ```

   根据查询结果可知，租户 `mysql001` 有 4 个 Leader 副本提供服务，且均匀分布在 zone1、zone2 各自的两台机器上。
 5. 修改租户 `mysql001` 的 `PRIMARY_ZONE` 属性，第一优先级 Zone 的个数从 2 调整为 1。

   ```shell
   obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2';

   ```
 6. 查看减少 Primary Zone 任务的执行状态。

   ```

   查询结果如下：

   ```shell
   +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+
   | 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

   ```

   当对应任务记录中 `JOB_STATUS` 的值为 `SUCCESS` 时，表示减少 Primary Zone 的任务执行成功。

   有关视图 `DBA_OB_TENANT_JOBS` 的详细字段说明，请参见 [DBA_OB_TENANT_JOBS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000641193)。
 7. 查询租户 `mysql001` 的基本信息，确认 `PRIMARY_ZONE` 属性修改成功，由 `zone1,zone2` 变更为 `zone1;zone2`。

   ```

   查询结果如下：

   ```shell
   +--------------+
   | PRIMARY_ZONE |
   +--------------+
   |  zone1;zone2 |
   +--------------+
   1 row in set

   ```

   查询结果如下：

   ```

   根据查询结果可知，租户 `mysql001` 在 zone1 上有 2 个 Leader 副本提供服务。

通过上述示例，变更前，租户 `mysql001` 的 `PRIMARY_ZONE` 第一优先级 Zone 的个数为 2，有 4 个 Leader 副本提供服务；变更后，租户 `mysql001` 的 `PRIMARY_ZONE` 第一优先级 Zone 的个数由 2 变更为 1，提供服务的 Leader 副本由 4 变更为 2，减少了计算节点，从而实现了租户的缩容。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
