likes
comments
collection
share

使用 OAT 工具替换 OceanBase 云平台节点

作者站长头像
站长
· 阅读数 55

OceanBase 环境基本都会先安装 OCP 来部署、监控、运维数据库集群。但如果有机器过保等问题,就需要有平稳的 OCP 节点的替换方案。

作者:张瑞远

上海某公司 DBA,曾经从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级 IT 系统及数据库工作。有三年以上 OceanBase 工作经验。获得的专业技能与认证包括 OceanBase OBCP、Oracle OCP 11g、OracleOCM 11g 、MySQL OCP 5.7。

本文来源:原创投稿

  • 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

前言

OceanBase 云平台(OceanBase Cloud Platform,OCP),是以 OceanBase 为核心的企业级数据库管理平台。

我们生产环境基本都是需要先创建 OCP 平台,然后依赖 OCP 去创建及管理监控生产集群,所以安装 OCP 一般是系统上线的第一步。之后可能随着机房规划等问题,就会有需要搬迁或者替换 OCP 的机器的需求。

分别介绍两种 OCP 节点的替换方法。一种是使用 OAT 平台(OceanBase Admin Toolkit,管理者工具)来替换;另一种就是使用 antman 脚本替换。本文先介绍第一种。

PS:我的环境的 OCP 负载均衡使用的 F5,所以新的机器需要先配置 F5,其他负载均衡场景同理。

环境背景

大家如果有接触 OB 生产环境的经验的话,可以能会了解,前期版本在安装 OCP 的时候,需要安装 OCP 软件/metadb/obproxy 三个 Docker 包,后期 OCP 版本将 DB+Proxy 集成在了一个 Docker 包里,OAT 的话只能纳管 DB+Proxy。集成的 metadb,分开的情况还需要使用 antman 脚本来替换。

软件信息

软件版本
OCPocp-all-in-one:3.3.3-20220906114643
metadb+proxyOB2277_OBP320_x86_20220429
OAT4.1.1_20230519_x86

操作过程

3.1 环境检查/准备

检查替换机器环境,包括分盘,创建 admin 用户,安装 Docker 软件等。安装好后检查下。

cd /root/t-oceanbase-antman/clonescripts/
sh precheck.sh -m ocp

安装 OAT 工具

# 1.	上传 OAT 软件包并解压
tar -xvf oat-all-in-one-x86-411.tar

# 2.	load OAT 包
csocpth:~ # cd oat-all-in-one-x86/
csocpth:~/oat-all-in-one-x86 # docker load -i  oat_4.1.1_20230519_x86.tgz
06f6bfff6616: Loading layer [==================================================>]  230.8MB/230.8MB
e1505344677e: Loading layer [==================================================>]  3.072kB/3.072kB
01ede0eada53: Loading layer [==================================================>]  690.2MB/690.2MB
f5323b31fcbe: Loading layer [==================================================>]  8.704kB/8.704kB
07f573d3f476: Loading layer [==================================================>]  229.9MB/229.9MB
d9994e0d00fd: Loading layer [==================================================>]  156.3MB/156.3MB
aaaf3b3d3500: Loading layer [==================================================>]  56.32kB/56.32kB
Loaded image: reg.docker.alibaba-inc.com/oceanbase/oat:4.1.1_20230519_x86
csocpth:~/oat-all-in-one-x86 # docker images
REPOSITORY                                 TAG                  IMAGE ID            CREATED             SIZE
reg.docker.alibaba-inc.com/oceanbase/oat   4.1.1_20230519_x86   7efa444ce0b9        3 weeks ago         1.28GB

# 3.	运行 OAT
csocpth:~/oat-all-in-one-x86 # oat_image=`docker images | grep oat | head -1 | awk '{printf $1":"$2"\n"}'`
csocpth:~/oat-all-in-one-x86 # docker run --name=oat -d -e DEPLOY_MODE=generic -v /home/oat/data_dir:/data -v /home/oat/db_dir:/var/lib/mysql -p 7000:7000 --restart on-failure:5 $oat_image
7ea6e4d2b930445afddb026a794f0e7ca533d41fc5e5f53a63d324159cd16aec

# 观察启动日志,确保无报错信息
docker logs -f oat

# 前台登录 OAT,使用 [ip]:7000 连到前台页面。

确保替换机器及需要替换机器的 OCP 平台的机器的 hostname 都设置了,可以 hostname -i 检查一下。

检查 OCP 组件信息

OCP-3:~/t-oceanbase-antman # docker ps
CONTAINER ID        IMAGE                                                                      COMMAND                  CREATED             STATUS              PORTS               NAMES
f5a1125aa84a        reg.docker.alibaba-inc.com/oceanbase/ocp-all-in-one:3.3.3-20220906114643   "/usr/bin/supervisor…"   5 months ago        Up 8 weeks                              ocp
65a0722edbea        reg.docker.alibaba-inc.com/antman/ob-docker:OB2277_OBP320_x86_20220429     "/usr/bin/supervisor…"   5 months ago        Up 5 months                             metadb

# OAT 纳管 meta 有问题,可以修改 meta 的 docker 名字
docker rename META_OB_ZONE_2 metadb

检查 OCP 的 meta 集群信息

OCP-3:~/t-oceanbase-antman # mysql -h111.11.11.112  -P2883 -uroot@sys#obcluster  -p'CqVgg9}Aut' -Doceanbase

# 确认需要替换机器的 ZONE,IDC。OAT 纳管 OCP 机器时机房和地域需要填写一致。
MySQL [oceanbase]> select a.svr_ip,a.zone,b.name,b.info from __all_server a,__all_zone b where a.zone=b.zone and b.name in ('idc','region');
+---------------+----------------+--------+------+
| svr_ip        | zone           | name   | info |
+---------------+----------------+--------+------+
| 111.11.11.111 | META_OB_ZONE_1 | idc    | c6   |
| 111.11.11.111 | META_OB_ZONE_1 | region | jn   |
| 111.11.11.112 | META_OB_ZONE_2 | idc    | c6   |
| 111.11.11.112 | META_OB_ZONE_2 | region | jn   |
| 111.11.11.113 | META_OB_ZONE_3 | idc    | c6   |
| 111.11.11.113 | META_OB_ZONE_3 | region | jn   |
+---------------+----------------+--------+------+
6 rows in set (0.00 sec)


# 确认 obconfig_url 设置不是要被替换掉的机器吧,正常有负载均衡的 OCP 设置的都是负载均衡的 IP。
SHOW PARAMETERS LIKE 'obconfig_url'

3.2 OAT 纳管 metadb 和 OCP 产品

通过 OAT 将 OCP 机器和要替换的机器纳管

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

机房和地域信息与集群中的信息匹配。

使用 OAT 工具替换 OceanBase 云平台节点

添加后的机器用途应 OB 产品服务和 OB Server 都有的。

将需要纳管的组件的镜像包传入 OAT 本地

PS:纳管 metadb 需要输入 metadb 的 sys 租户的 root 密码,如果没有的话可以找安装 OCP 时的 antman 目录下有 getpass.sh 的脚本执行下默认密码会输出。

# 复制到 OAT 的本地目录
cp OB2277_OBP320_x86_20220429.tar /home/oat/data_dir/images/
cp ocp333.tar.gz /home/oat/data_dir/images/

先纳管组件,后纳管 OCP 产品,纳管时会有镜像本地扫描,扫描之后就能识别到刚才传的镜像包。

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

纳管 OCP

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

3.3 新节点加入

刚纳管的 OCP 产品添加新的机器

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

等任务跑完,就可以去替换机器上看下,OCP 的 Docker 就起来了,可以通过 8080 去使用该节点登录 OCP 的前台页面了。

csocpth:~ # docker ps
CONTAINER ID        IMAGE                                                                      COMMAND                  CREATED             STATUS              PORTS                              NAMES
bdd7deede099        reg.docker.alibaba-inc.com/oceanbase/ocp-all-in-one:3.3.3-20220906114643   "/usr/bin/supervisor…"   17 seconds ago      Up 15 seconds                                          ocp

纳管的 meta 库加入新机器

PS:该版本 OAT 的 metadb 组件在添加新机器的时候有报错,文末会有分享处理办法。

使用 OAT 工具替换 OceanBase 云平台节点

使用 OAT 工具替换 OceanBase 云平台节点

检查集群中新的节点已经加进来了,meta 库的 Docker 也起来了,并且登录集群可以看到 Server 也起来。

csocpth:~ # docker ps
CONTAINER ID        IMAGE                                                                      COMMAND                  CREATED             STATUS              PORTS                              NAMES
c143f7252956        reg.docker.alibaba-inc.com/antman/ob-docker:OB2277_OBP320_x86_20220429     "/usr/bin/supervisor…"   4 minutes ago       Up 4 minutes                                           metadb
bdd7deede099        reg.docker.alibaba-inc.com/oceanbase/ocp-all-in-one:3.3.3-20220906114643   "/usr/bin/supervisor…"   11 minutes ago      Up 11 minutes                                          ocp
MySQL [oceanbase]> select * from __all_server;
+----------------------------+----------------------------+---------------+----------+----+----------------+------------+-----------------+--------+-----------------------+--------------------------------------------------------------------------------------+-----------+--------------------+--------------+----------------+-------------------+
| gmt_create                 | gmt_modified               | svr_ip        | svr_port | id | zone           | inner_port | with_rootserver | status | block_migrate_in_time | build_version                                                                        | stop_time | start_service_time | first_sessid | with_partition | last_offline_time |
+----------------------------+----------------------------+---------------+----------+----+----------------+------------+-----------------+--------+-----------------------+--------------------------------------------------------------------------------------+-----------+--------------------+--------------+----------------+-------------------+
| 2023-01-08 12:17:49.336751 | 2023-01-08 12:18:04.683418 | 111.11.11.111 |     2882 |  1 | META_OB_ZONE_1 |       2881 |               1 | active |                     0 | 2.2.77_20211210235205-46f61a1b0a27dfa2ea1f65366cbedd77e5c4e785(Dec 11 2021 00:24:34) |         0 |   1673151479695641 |            0 |              1 |                 0 |
| 2023-01-08 12:17:49.373647 | 2023-01-08 12:18:06.015801 | 111.11.11.112 |     2882 |  2 | META_OB_ZONE_2 |       2881 |               0 | active |                     0 | 2.2.77_20211210235205-46f61a1b0a27dfa2ea1f65366cbedd77e5c4e785(Dec 11 2021 00:24:34) |         0 |   1673151482026856 |            0 |              1 |                 0 |
| 2023-01-08 12:17:49.339787 | 2023-01-08 12:18:06.037221 | 111.11.11.113 |     2882 |  3 | META_OB_ZONE_3 |       2881 |               0 | active |                     0 | 2.2.77_20211210235205-46f61a1b0a27dfa2ea1f65366cbedd77e5c4e785(Dec 11 2021 00:24:34) |         0 |   1673151482049381 |            0 |              1 |                 0 |
| 2023-06-14 15:37:24.042744 | 2023-06-14 15:37:36.893865 | 143.33.33.32  |     2882 |  4 | META_ZONE_4    |       2881 |               0 | active |                     0 | 2.2.77_20211210235205-46f61a1b0a27dfa2ea1f65366cbedd77e5c4e785(Dec 11 2021 00:24:34) |         0 |   1686728254897197 |            0 |              0 |                 0 |
+----------------------------+----------------------------+---------------+----------+----+----------------+------------+-----------------+--------+-----------------------+--------------------------------------------------------------------------------------+-----------+--------------------+--------------+----------------+-------------------+

3.4 旧节点剔除

使用 OAT 工具替换 OceanBase 云平台节点

OCP节点剔除同理。

报错记录及处理

添加新机器到 metadb 组件。

使用 OAT 工具替换 OceanBase 云平台节点

需要去 OAT 的 Docker 里去修改上图的 Python 脚本,修改完后重启下相关组件。

使用 OAT 工具替换 OceanBase 云平台节点

[root@7ea6e4d2b930 oat]# supervisorctl status
airflow_scheduler                RUNNING   pid 266, uptime 1 day, 1:41:52
backend                          RUNNING   pid 267, uptime 1 day, 1:41:52
[root@7ea6e4d2b930 oat]# supervisorctl restart airflow_scheduler
airflow_scheduler: stopped
airflow_scheduler: started
[root@7ea6e4d2b930 oat]# supervisorctl status
airflow_scheduler                RUNNING   pid 23812, uptime 0:00:14
backend                          RUNNING   pid 267, uptime 1 day, 1:42:19

总结

到此,使用 OAT 去替换 OCP 机器的操作就结束了,可能大家看这篇文章感觉还比较简单,但是整个过程来回做了好几遍,充满我的坎坷和泪水,为了别人以后少踩坑,所以写这篇文章分享。

OCP 软件的 Docker 替换基本没有问题,主要是 metadb 的替换,其实从上面可以看出 OAT 替换 OCP 的时候,新加机器是在 metadb 中新创建了一个 ZONE ,然后再把被替换机器下掉,其中还涉及新建资源池修改 Locality,增加副本数等操作。其实使用 antman 脚本的话这个步骤就不太一样,他是将新机器加入到需要替换机器的同一个 ZONE 内,然后做同 ZONE 内 UNIT 的迁移,然后把被替换的机器下线,这个咱们在下篇文章中介绍。

行之所向,莫问远方。

转载自:https://juejin.cn/post/7249982413198966821
评论
请登录