技術分享 | 使用 RPM 部署 Oceanbase Proxy

ITPUB社群發表於2023-02-02

作者:賁紹華

愛可生研發中心工程師,負責專案的需求與維護工作。其他身份:柯基鏟屎官。

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。


一、引言:

關於 OBproxy 的功能與介紹就不再詳細說明瞭,從 3.1.3 開始,OB 提供了 config server 的原始碼作為 tool 在開源倉庫內。
令社群版也能使用一些 OCP 上才有的功能。這樣就能方便的透過 OBserver 的自動更新 configURL 來實現 root service 的動態重新整理了(之前需要重啟 proxy 程式才能重新整理 root service list 配置,且不支援代理多叢集)。

二、前期準備

  • golang 1.17 或以上版本(用於編譯執行 Config server)
  • 部署一套 OB 資料庫叢集(本文使用版本為:oceanbase-ce 3.1.4)
  • oceanbase-obproxy-ce-3.2.3.5-2.el7.x86_64.rpm

三、部署 Config server

3.1 下載 Oceanbase 原始碼

git clone 
進入 oceanbase/tools/ob-configserver 目錄,這裡就是我們需要的東西。

3.2 編輯 ./etc/config.yaml 配置檔案

需要修改的部分有 server 配置、VIP配置、資料來源配置:
  • server.address: web 服務執行後繫結的 IP 與埠
  • vip.address: VIP 地址,注:如果為單節點,此處應填寫 OBproxy 與 OBserver 可以訪問到的IP地址(127的話如果不在同一臺主機是不行的)
  • storage.connection_url: 這裡使用 mysql 作為資料來源進行儲存,資料表會自動進行建立,但庫如果不存在會導致啟動失敗
## server config
server:
 address: "0.0.0.0:8080"
 run_dir: run

## vip config, configserver will generate url with vip address and port and return it to the client
## if you don't hava a vip, use the server address and port is ok, but do not use some random value that can't be connected
vip:
 address: "127.0.0.1"
 port: 8080
 
## storage config
storage:
 ## database type, support sqlite3 or mysql
 database_type: mysql
 # database_type: sqlite3

 ## database connection config, should match database_type above
 connection_url: "user:password@tcp(127.0.0.1:3306)/oceanbase?parseTime=true"
 # connection_url: "/tmp/data.db?cache=shared&_fk=1"
 # connection_url: "file:ent?mode=memory&cache=shared&_fk=1"

3.3 編譯二進位制檔案:

# 預設的build方法編譯的是debug版本,如果需要release版本請使用:make build-release
root@ubuntu: make build
Build with debug flags
GO111MODULE=on GOPROXY= go build -p 2 -race -ldflags '-X "github.com/oceanbase/configserver/config.Version=1.0" -X "github.com/oceanbase/configserver/config.BuildTimestamp=2022-12-21 06:07:53" -X "github.com/oceanbase/configserver/config.GitBranch=master" -X "github.com/oceanbase/configserver/config.GitHash=873c59f5fe834d87fc0252f4522281f3e4e6ceea" -X "github.com/oceanbase/configserver/config.Mode=debug" -X "github.com/oceanbase/configserver/config.CurProcess=ob-configserver"' -o bin/ob-configserver cmd/main.go

3.4 啟動 config server

root@ubuntu: nohup ./bin/ob-configserver -c ./etc/config.yaml &
啟動後檢查 log 日誌或資料庫 ob_clusters 表是否已完成初始化,如果有相關資訊則表示服務啟動成功了

四、為 OB server 叢集註冊 Config server

4.1 登入 OB server ,初始化 proxyro 賬號

$ obclient -h172.20.134.2 -uroot@sys -P2881 -p -c -A oceanbase
Enter password:

# 單引號內為賬號密碼,請自行修改
obclient> CREATE USER proxyro IDENTIFIED BY '123456';
Query OK, 0 rows affected

obclient> GRANT SELECT ON *.* TO proxyro;5
Query OK, 0 rows affected

obclient> SHOW GRANTS FOR proxyro;
+----------------------------------+
| Grants for proxyro@%             |
+----------------------------------+
| GRANT SELECT ON *.* TO 'proxyro' |
+----------------------------------+
1 row in set (0.067 sec)

4.2 配置 ConfigURL

# 叢集名需要調整為OB server的叢集名稱
obclient [oceanbase]> ALTER SYSTEM SET obconfig_url = 'http://192.168.2.42:8088/services?Action=ObRootServiceInfo&ObCluster=obcluster';
Query OK, 0 rows affected (0.078 sec)

4.3 重新整理 config server 配置

使用手動 POST API 介面的形式註冊比較麻煩,在 OB server 側,會主動更新 config server 內的配置資訊,觸發方式如下,當配置了 config URL 之後:

1. 預設情況下每10分鐘會進行一次上報
2. 當 root service list 發生變更時會觸發上報(新增、刪除、切換 leader 等)
# 注:雙引號內調整為當前角色為follower的root service進行切換(如果使用leader執行如下語句並不會觸發更新上報)
obclient [oceanbase]> ALTER SYSTEM SWITCH ROOTSERVICE LEADER server '172.20.134.2:2882';
Query OK, 0 rows affected (0.004 sec)

4.4 檢查是否上報成功

進入 MySQL 內檢查叢集資料是否已寫入 ob_clusters 表,如果是則表示註冊完成

五、部署 OBproxy

5.1 建立 admin 使用者與使用者組(在非 admin 使用者下執行程式可能會出現一些意料之外的問題)

# 建立admin使用者組
sh-4.2# groupadd --force admin
# 檢查admin使用者是否存在
sh-4.2# id admin
id: admin: no such user
# 如果不存在,則建立並加入admin使用者組
sh-4.2# useradd -M -g admin admin
sh-4.2# id admin
uid=5701(admin) gid=5701(admin) groups=5701(admin)

5.2 安裝 RPM 包

sh-4.2# rpm -ivh --force oceanbase-obproxy-ce-3.2.3.5-2.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
  1:obproxy-ce-3.2.3.5-2.el7         ################################# [100%] 下載完成後執行

5.3 啟動 proxy 程式

必須要指定的引數如下:
  • obproxy_config_server_url (configURL 引數,缺少的話會導致無法連線 OBserver)

  • observer_sys_password(OBserver 內的 proxyro 賬號的密碼,用於 proxy 與 OBserver 之間通訊使用,啟動時缺少的話可以進入 proxy 內重新修改,但不指定的話會連線時提示密碼錯誤)
bash-4.2$ cd admin/obproxy-3.2.3.5/
bash-4.2$ su admin
bash-4.2$ ./bin/obproxy -p 2883 -n mycluster -o "prometheus_sync_interval=1s,obproxy_config_server_url=
./bin/obproxy -p 2883 -n mycluster -c obcluster -o prometheus_sync_interval=1s,obproxy_config_server_url=
listen port: 2883
appname: mycluster
cluster_name: obcluster
optstr: prometheus_sync_interval=1s,obproxy_config_server_url=

5.4 檢查引數是否正確

observer_sys_password 密碼是 sha1 後的值,而不是原始值。例如:proxyro 使用者設定的密碼是 123456 ,則需要設定 observer_sys_password 的值是 7c4a8d09ca3762af61e59520943dc26494f8941b

# config URL是否已設定
bash-4.2$ strings ./etc/obproxy_config.bin |grep "obproxy_config_server_url"
obproxy_config_server_url=
# proxyro使用者密碼是否已設定
bash-4.2$ strings ./etc/obproxy_config.bin |grep "observer_sys_password"
observer_sys_password1=
observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b

六、連線測試

bash-4.2$ obclient -h172.20.134.3 -P2883 -uroot@sys#obcluster -p -c -A oceanbase
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 1
Server version: 5.6.25 OceanBase 3.1.4 (r10000092022071511-b4bfa011ceaef428782dcb65ae89190c40b78c2f) (Built Jul 15 2022 11:45:14)

Copyright (c) 2000, 2022, OceanBase and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [oceanbase]> SELECT SYSDATE();
+---------------------+
| SYSDATE()           |
+---------------------+
| 2022-12-28 14:31:04 |
+---------------------+
1 row in set (0.003 sec)

obclient [oceanbase]> exit
Bye

七、其他

7.1 連線時提示密碼錯誤

  • 檢查 proxy 配置引數中 observer_sys_password 的值是否正確
  • 檢查 OBserver 內是否存在 proxyro 賬號,存在的話賬號的密碼是否正確,許可權是否正確

7.2 連線時提示找不到叢集,日誌顯示:curl easy perform failed

3.2.3.5 版本 proxy 的 obproxy_config_server_url 引數內不能使用單引號,否則會出現該錯誤。

本文關鍵字:#OBproxy部署# #OB config server#


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2933726/,如需轉載,請註明出處,否則將追究法律責任。

相關文章