天天看點

如何使用 OAT 工具替換 OceanBase 雲平台節點

作者:愛可生

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 腳本來替換。

軟體資訊

軟體 版本
OCP ocp-all-in-one:3.3.3-20220906114643
metadb+proxy OB2277_OBP320_x86_20220429
OAT 4.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 的遷移,然後把被替換的機器下線,這個咱們在下篇文章中介紹。

行之所向,莫問遠方。

繼續閱讀