---
title: "从 Zone 中减少 OBServer 节点 | OceanBase 文档中心"
description: 从 Zone 中减少 OBServer 节点 本节主要介绍如何通过从 Zone 中减少 OBServer 节点的方式进行集群的缩容。 前提条件 在进行集群的缩容操作前，需要确认集群中资源对当前负载有较多冗余，通过 OCP 查看集群中资源的详细信息的相关操作请参见 查看集群的资源信息 。 从 Zone 中减少 OBSe…
---
切换语言

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

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

# 从 Zone 中减少 OBServer 节点

更新时间：2023-07-19 13:03:07

本节主要介绍如何通过从 Zone 中减少 OBServer 节点的方式进行集群的缩容。

## 前提条件

在进行集群的缩容操作前，需要确认集群中资源对当前负载有较多冗余，通过 OCP 查看集群中资源的详细信息的相关操作请参见 [查看集群的资源信息](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355577)。

从 Zone 中减少 OBServer 节点的操作可以通过 SQL 语句和 OCP 平台两种方式来完成。

## 通过 SQL 语句从 Zone 中减少 OBServer 节点

您可以通过 SQL 语句从 Zone 中减少 OBServer 的方式来进行集群的缩容。通常需要从每个 Zone 内减少相等数量的 OBServer。

例如，假设当前集群中共包含 3 个可用区 `z1`、`z2`、`z3`，每个 Zone 内包含 2 台 OBServer。集群中有一个普通租户 `tenant1`，其资源分布情况如下：

```sql
obclient> CREATE RESOURCE UNIT unit1 MAX_CPU 6,MIN_CPU 6, MAX_MEMORY '36G', MIN_MEMORY '36G', MAX_IOPS 128, MIN_IOPS 128, MAX_DISK_SIZE '2T', MAX_SESSION_NUM 64;

obclient> CREATE RESOURCE POOL pool1 UNIT 'unit1', UNIT_NUM 2, ZONE_LIST ('z1','z2','z3');

obclient>CREATE TENANT tenant1 resource_pool_list=('pool1');

```

现在希望从每个 Zone 内减少 1 台 OBServer 来缩容，则缩容后，3 个 Zone 内均只包含 1 台 OBServer。

示例如下：

1. 使用 `root` 用户登录到数据库的 `sys` 租户。
 2. 根据业务实际情况，缩小租户的资源配置，即减少 `UNIT_NUM`。

   > **注意**
   >
   >  
   >    - 一个 Unit 只能分布在一台 OBServer 上，不能分布在多台 OBServer 上，如果在集群缩容前，您已经通过租户缩容将 Unit 规格设置到最佳配置，那么通过该方式进行集群缩容时，只能通过减少 Unit 数量来完成本次缩容。
   >    - 调整后的 Unit 数量需要小于或等于计划删除 OBserver 后的单个 Zone 中的可用 OBserver 数量。

   根据本案例场景，修改 Unit 的数量为 1。示例语句如下：

   ```sql
   obclient> ALTER RESOURCE POOL pool1 UNIT_NUM 1;

   ```

   或者您也可以通过指定 `unit_id` 的方式调小 `UNIT_NUM` 的数量，具体操作请参见 [通过修改 UNIT_NUM 进行租户扩缩容](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355567)。

   命令执行成功后，您可以通过查询 `oceanbase.__all_unit` 内部表来确认租户的 Unit 是否缩容成功，如果查询结果中的所有 Unit 的 `status` 均为 `ACTIVE`，即没有 Unit 处于 `DELETING` 状态，则表示本次 Unit 缩容成功。
 3. 执行以下命令，从集群中删除各 Zone 中的 OBServer。

   其中，`xxx.xxx.x.xx1`、`xxx.xxx.x.xx2`、`xxx.xxx.x.xx3` 分别表示待删除的 OBServer 的 IP 地址。

   ```sql
   obclient> ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx1:2882' ZONE='z1';
   obclient> ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx2:2882' ZONE='z2';
   obclient> ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx3:2882' ZONE='z3';

   ```

   删除后，可执行以下语句，确认列表中已查询不到这些 OBServer 则表示删除成功。

   ```sql
   obclient> SELECT * FROM oceanbase.__all_server;

   ```

## 通过 OCP 从 Zone 中减少 OBServer 节点

您可以通过 OCP 从 Zone 中减少 OBServer 的方式来进行集群的缩容。通常需要从每个 Zone 内减少相等数量的 OBServer。

假设当前集群中共包含 3 个可用区 `z1`、`z2`、`z3`，每个 Zone 内包含 2 台 OBServer。现在希望从每个 Zone 内减少 1 台 OBServer 来缩容，则缩容后，3 个 Zone 内均只包含 1 台 OBServer。

具体操作如下：

1. 登录 OCP。
 2. 根据业务需要，调整租户的资源池，即在每个 Zone 内减少 Unit 数量。

   > **注意**
   >
   >  
   >
   > 一个 Unit 只能分布在一台 OBServer 上，不能分布在多台 OBServer 上，如果在集群缩容前，您已经通过租户缩容将 Unit 规格设置到最合适的配置，那么通过该方式进行集群缩容时，只能通过减少 Unit 数量来完成本次缩容。

   通过 OCP 修改资源池的操作请参见 [修改资源池](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355770)。
 3. 依次从 3 个 Zone 内减少 1 台 OBServer。

   通过 OCP 从 Zone 内删除 OBServer 的相关操作请参见 [删除 OBServer](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355939)。

 上一篇 下一篇 ![有帮助](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) 咨询热线
