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 機器和要替換的機器納管
機房和地域資訊與叢集中的資訊比對。
添加後的機器用途應 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 産品,納管時會有鏡像本地掃描,掃描之後就能識别到剛才傳的鏡像包。
納管 OCP
3.3 新節點加入
剛納管的 OCP 産品添加新的機器
等任務跑完,就可以去替換機器上看下,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 元件在添加新機器的時候有報錯,文末會有分享處理辦法。
檢查叢集中新的節點已經加進來了,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 舊節點剔除
OCP 節點剔除同理。
報錯記錄及處理
添加新機器到 metadb 元件。
需要去 OAT 的 Docker 裡去修改上圖的 Python 腳本,修改完後重新開機下相關元件。
[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 的遷移,然後把被替換的機器下線,這個咱們在下篇文章中介紹。
行之所向,莫問遠方。