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

分布式数据库学习Note227:OceanBase社区版中,如何替换节点?

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


替换节点适用于硬件故障场景、容量场景(不同规格机器替换),替换后集群的节点数量不变。替换节点是一套运维操作的组合:即先添加新节点并迁移副本,然后再删除旧节点,整体时间较长。

操作步骤

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

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. 在待替换节点所在的 Zone 上添加新节点。

    添加新节点的详细操作请参见 添加节点

  3. 将旧节点上的 Unit 迁移到新节点。

    1. 查询 oceanbase.DBA_OB_SERVERS 视图获取待替换节点的相关信息。

      查询示例如下:

      obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
      +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
      | SVR_IP      | SVR_PORT | ID | ZONE         | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME         | STOP_TIME | BLOCK_MIGRATE_IN_TIME | CREATE_TIME                | MODIFY_TIME                | BUILD_VERSION                                                                             |
      +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
      | 172.xx.xx.xx|     2882 |  6 | sa128_obv4_2 |     2881 | NO              | ACTIVE | 2022-12-30 16:17:03.173519 | NULL      | NULL                  | 2022-12-30 16:08:04.749100 | 2023-01-04 11:48:36.589270 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      | 172.xx.xx.xx|     2882 |  4 | sa128_obv4_3 |     2881 | NO              | ACTIVE | 2022-12-30 16:36:35.567437 | NULL      | NULL                  | 2022-12-30 16:08:02.755200 | 2023-01-04 14:13:36.976548 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      | 172.xx.xx.xx|     2882 |  3 | sa128_obv4_3 |     2881 | NO              | ACTIVE | 2022-12-12 12:42:00.054759 | NULL      | NULL                  | 2022-11-03 15:37:09.530894 | 2022-12-22 14:43:26.717736 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      | 172.xx.xx.xx|     2882 |  1 | sa128_obv4_1 |     2881 | NO              | ACTIVE | 2022-12-12 12:25:17.555651 | NULL      | NULL                  | 2022-11-03 15:37:08.990683 | 2022-12-12 12:25:18.553763 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      | 172.xx.xx.xx|     2882 |  2 | sa128_obv4_2 |     2881 | YES             | ACTIVE | 2022-12-12 11:46:37.222980 | NULL      | NULL                  | 2022-11-03 15:37:09.490511 | 2022-12-12 11:47:31.075335 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      | 172.xx.xx.xx|     2882 |  5 | sa128_obv4_1 |     2881 | NO              | ACTIVE | 2022-12-30 16:25:45.420996 | NULL      | NULL                  | 2022-12-30 16:08:03.928478 | 2023-01-04 11:48:36.578231 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec  7 2022 16:22:15) |
      +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+
      6 rows in set
      

      有关 oceanbase.DBA_OB_SERVERS 视图的更多详细信息,请参见 oceanbase.DBA_OB_SERVERS

    2. 根据节点 IP 查询待替换的节点的 Unit 列表。

      语句如下:

      obclient [(none)]> SELECT  unit_id FROM  oceanbase.DBA_OB_UNITS WHERE SVR_IP = 'svr_ip';
      

      其中,svr_ip 需要根据实际情况填写待替换节点的 IP 地址。

      查询示例如下:

      obclient [(none)]> SELECT unit_id FROM  oceanbase.DBA_OB_UNITS WHERE SVR_IP = '172.xx.xx.xx';
      +---------+
      | unit_id |
      +---------+
      |       1 |
      |    1002 |
      |    1016 |
      |    1024 |
      +---------+
      4 rows in set
      
    3. 提交 Unit 迁移任务,将旧节点上的 Unit 迁移到同 Zone 的其他节点上。

      语句如下:

      obclient [(none)]> ALTER SYSTEM MIGRATE UNIT unit_id DESTINATION 'svr_ip:svr_port';
      

      相关参数说明如下:

      • unit_id:待迁移的 Unit 的 unit_id。

      • svr_ip:svr_port:新节点的 IP 地址和 RPC 端口号,端口号默认为 2882。

      每条命令仅支持迁移一个 Unit,多个 Unit 需要执行多次该命令。

      迁移示例如下:

      obclient [(none)]> ALTER SYSTEM MIGRATE UNIT 1016 DESTINATION '172.xx.xx.xx:2882';
      
    4. 查询 oceanbase.DBA_OB_UNIT_JOBS 视图,确认 Unit 的迁移进度。

      obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE = 'MIGRATE_UNIT';
      +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+
      | JOB_ID | JOB_TYPE     | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME                 | MODIFY_TIME                | TENANT_ID | UNIT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP  | RS_SVR_PORT |
      +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+
      |      4 | MIGRATE_UNIT | INPROGRESS |        NULL |        0 | 2023-01-04 17:22:02.208219 | 2023-01-04 17:22:02.208219 |      1004 |    1006 | NULL     | NULL       |xx.xx.xx.106|        2882 |
      +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+
      

      如果查询结果为空,则表示 Unit 迁移完成。

    更多关于 Unit 迁移的操作及说明,请参见 Unit 迁移

  4. 等待旧节点上的所有 Unit 迁移完成后,将旧节点删除。

    具体操作如下:

    1. 执行以下命令,删除旧节点。

      语句如下:

      obclient [(none)]> ALTER SYSTEM DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
      

      相关参数说明如下:

      • svr_ip:表示待删除的旧节点的 IP。

      • port:表示待删除的旧节点的 RPC 端口,默认为 2882。

      • zone_name:待删除的旧节点所属的 Zone。

      示例如下:

      obclient [(none)]> ALTER SYSTEM DELETE SERVER "172.xx.xx.xx:2882" zone='zone1'
      
    2. 待操作结束后,查询 oceanbase.DBA_OB_SERVERS 视图,确认旧节点是否删除成功。

      obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
      

      如果列表中已经查询不到旧节点信息,则表示删除成功。如果列表中仍然有该节点,且该节点的状态为 DELETING,则表示该节点仍然在删除状态中。



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

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

评论