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

OceanBase数据库减少副本

Tonyhacks 2023-12-15
176

减少副本

本文介绍如何通过修改集群中某个租户的 Locality 来减少租户下 Partition 的副本数。

有关修改 Locality 的详细操作和注意事项,参见 修改 Locality

前提条件

变更 Locality 之前,需要确认待变更的 Zone 上各节点的资源分配情况。如果 Zone 上的节点资源不足导致无法存放租户需要的资源单元,则将导致无法进行 Locality 变更。

有关 Zone 上各节点的资源分配情况,请参见 查看租户和资源信息

注意事项

  • 租户的 Locality 不可以为空。

  • 当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。

  • 在旧一轮租户 Locality 没有完成变更时,新一轮的租户 Locality 变更不允许被执行。

  • Locality 变更一次只能执行一个动作,例如把 Zone3 替换为 Zone4,不能直接替换,可以先增加一个 Zone4,然后再减少一个 Zone3。

  • 通过增加副本会导致租户 Locality 与 租户 Primary Zone 不匹配,如果增加的 Zone 参与切主,则需要修改 Primary Zone;如果增加的 Zone 不参与切主,则不需要修改 Primary Zone。

  • 减少副本后,如果要释放资源,还需要注意缩减目标租户的资源池。

    以 z1,z2,z3 为例,删除 z3,有两种场景:

    1. 租户在 z3 上有独立的资源池,例如:租户有 resource_pool1 和 resource_pool2 两个资源池,其中 resource_pool2 位于 z3,那么减少副本后,需要将 resource_pool2 从租户的资源池列表移除,然后可以选择删除资源池,真正释放资源,删除资源池的详细操作,参见 删除资源池
    2. z3 上没有独立的资源池,比如:租户的资源池 resource_pool1 位于 z2 和 z3,那么减少副本后,需要调整 resource_pool1 的 zone 列表,移除 z3,真正释放资源,调整资源池 zone 列表,参见 修改资源池属性

操作步骤

示例:通过修改租户 mysql001 的 Locality,由 FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 修改为 FULL{1}@zone1, FULL{1}@zone2 ,减少租户的副本数。

说明
此处仅以减少 1 个 Zone 为示例,实际操作中注意减少后的 Zone 的数量需要能够满足多数派原则。

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

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

  2. 进入 oceanbase 数据库。

    obclient>use oceanbase;

  3. 查看租户 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 上分别有一个全能型副本。

  4. 修改租户 mysql001 的 Locality。

    obclient>ALTER TENANT mysql001 locality="FULL{1}@zone1, FULL{1}@zone2";

  5. 查看 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 变更任务执行成功。

  6. 查看租户 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 的副本数减少。

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

评论