暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库学习Note156:OceanBase社区版中,如何从集群中减少 Zone?

欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/


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

注意事项

本方案仅适用于 Zone 数量大于 3 的场景,如果集群中 Zone 的数量小于 3,则会出现不满足多数派的情况,数据一致性无法得到保证。

注意

减少 Zone 会影响所有使用到待删除 Zone 的租户,需要统一规划,以免影响其它租户。本节以减少 Zone 仅影响一个租户的场景为例提供操作指导。

前提条件

在进行集群的缩容操作前,需要确认集群中资源对当前负载有较多冗余,通过 OCP 查看集群中资源的详细信息的相关操作请参见 查看集群的资源信息

通过 SQL 语句从集群中减少 Zone

您可以通过 SQL 语句向集群中减少 Zone 的方式来进行集群的缩容,该缩容方式通常用于将集群中租户的 5 副本降为 3 副本的场景。从集群中减少 Zone,同时减少集群中的机器台数。

假设当前集群中2共包含 5 个可用区 z1z2z3z4z5,且 5 个 Zone 都属于同一个 Region,每个 Zone 内 1 台 OBServer。集群中有一个普通租户 tenant1,租户信息如下 CREATE TENANT IF NOT EXISTS tenant1 CHARSET='utf8mb4', ZONE_LIST=('z1','z2','z3','z4','z5'), PRIMARY_ZONE='z1,z2,z4', RESOURCE_POOL_LIST=('pool1');当前副本分布情况 locality='F@z1,F@z2,F@z3,F@z4,F@z5', resource_pool_list=('pool1'),资源池的资源分布情况 CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z1', 'z2', 'z3','z4', 'z5')

根据业务需要,需要将租户 tenant1 由 5 副本降为 3 副本,即租户的 Locality 变成 locality='F@z1,F@z2,F@z3。本节以仅租户 tenant1 使用了 z4z5 其他租户未使用 z4z5 为例,提供缩容的操作指导。

  1. 使用 root 用户登录数据库的 sys 租户。

  2. (可选)如果租户使用了 z4 或 z5 作为 Primary Zone,则需要修改该租户的 Primary Zone。

    obclient> ALTER TENANT tenant_name PRIMARY_ZONE='z1,z2,z3';
    
  3. 通过修改租户 tenant1 的 Locality 来删除副本。

    根据 Locality 的变更规则,每次只能删除一个 Zone 内的 Locality,Locality 的变更规则相关信息请参见 Locality 概述

    obclient>ALTER TENANT tenant1 LOCALITY='F@z1,F@z2,F@z3,F@z4';
    
    obclient>ALTER TENANT tenant1 LOCALITY='F@z1,F@z2,F@z3';
    
  4. 执行以下命令,停止 z4z5

    obclient> ALTER SYSTEM STOP ZONE z4;
    
    obclient> ALTER SYSTEM STOP ZONE z5;
    
  5. 缩小资源池 pool1 的 ZONE_LIST 范围,从而将 z4z5 从资源池中移出。

    obclient> ALTER RESOURCE POOL pool1 ZONE_LIST=('z1','z2','z3');
    
  6. 执行以下语句,从集群中删除 Zone 中的 OBServer。

    注意

    本示例中,仅租户 tenant1 使用了 z4z5 上的资源,在实际场景中,如果有其他租户也使用了 z4 或 z5,则还需要对这些租户也执行一遍前面的步骤(步骤 2 ~ 步骤 5)。

    obclient> ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx4:2882';
    
    obclient> ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx5:2882';
    

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

    obclient> SELECT * FROM oceanbase.DBA_OB_SERVERS;
    
  7. 确认 OBServer 删除成功后,执行以下语句,从集群中删除 Zone。

    obclient> ALTER SYSTEM DELETE ZONE z4;
    
    obclient> ALTER SYSTEM DELETE ZONE z5;
    

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

    obclient> SELECT * FROM oceanbase.DBA_OB_ZONES;
    

    结束后,本次缩容完成。

欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论