背景
許多用戶都會借助OCP平臺來進行OceanBase集群的運維與監控,且因為考慮單節點的OCP部署,在遇故障時可能會短時間出現無法管控 OceanBase集群,多數用戶傾向于采用多節點方式來部署OCP,即 OCP的 metadb集群也是三節點的集群部署。
不過,在圖形化部署OCP平臺的時候,雖然OCP是多節點部署,OceanBase也是集群部署,但是也很容易造成單點故障。那就是OCP連接metadb的時候,因為本身不具備負載均衡能力,雖然在部署時部署了多個obproxy,但是實際OCP在連接metadb時,還是會只通過一個obproxy進行連接,而當這個obproxy出現故障時,OCP將無法連接metadb,導致OCP不可用。
因此就有了修改OCP連接metadb集群的需求,即在metadb的多個obproxy之上,通過搭建一個負載均衡,將OCP連接metadb的方式修改為連接 VIP 或者域名等方式,從而實現高可用。
實際修改連接方式,總共分三個步驟;
第一步:修改配置文件,修改OCP連接metadb的jdbc_url,然后填寫連接ocp_meta租戶和ocp_moniotr租戶的信息;
第二步:修改狀態文件,因為在第一步修改完配置文件之后,命令行提升可能需要重新部署(redeploy)集群,這個時候千萬不要按照提示重新部署,這會導致集群數據全部丟失,需要修改成狀態為NEED_RESTART;
第三步:帶參數重新啟動OCP集群。
下面就分步驟詳細介紹下:
修改配置文件
在配置文件中,只需要修改ocp-server-ce下面的內容,默認在配置文件中,是沒有關于OCP jdbc_url以及ocp_meta、ocp_monitor連接方式的配置,因此是需要將這些手動加上,默認配置大致文件如下:
ocp-server-ce:style: defaultpackage_hash: bd4512f9f708fb510d98f245b1be0b03a05e2cbaversion: 4.3.1release: 20240805192406.el7depends:- oceanbase-ce- obproxy-ceservers:- name: server2ip: 11.161.xx.xxglobal:home_path: /home/admin/ocpsoft_dir: /home/admin/ocp/softwarelog_dir: /home/admin/ocp/logsocp_site_url: http://11.161.xx.xx:8080port: 8080admin_password: xxxxxxmemory_size: 6Gmanage_info:machine: 10
首先,需要獲取jdbc_url相關信息,這個可以在部署OCP時使用的obd命令的日志中(默認在~/.obd/log目錄),過濾出jdbc_url信息,在日志里可以看到最初啟動OCP時,連接metadb使用的連接串。在獲取到這個連接串之后,將其修改為最新的 VIP 或者域名,填寫到配置文件里,例如VIP為10.10.10.10,我過濾出來的jdbc_url如下
jdbc_url: jdbc:oceanbase://11.161.xx.xx:2883/meta_database
修改jdbc_url為如下,然后填入到配置文件中
jdbc_url: jdbc:oceanbase://10.10.10.10:2883/meta_database
接著再將ocp_meta和ocp_monitor兩個租戶的連接信息填入配置文件,最終結果如下:
使用obd cluster edit-config <deploy_name> 來修改配置文件
ocp-server-ce:style: defaultpackage_hash: bd4512f9f708fb510d98f245b1be0b03a05e2cbaversion: 4.3.1release: 20240805192406.el7depends:- oceanbase-ce- obproxy-ceservers:- name: server2ip: 11.161.xx.xxglobal:home_path: /home/admin/ocpsoft_dir: /home/admin/ocp/softwarelog_dir: /home/admin/ocp/logsocp_site_url: http://11.161.xx.xx:8080port: 8080admin_password: xxxxxxmemory_size: 6Gmanage_info:machine: 10jdbc_url: jdbc:oceanbase://10.10.10.10:2883/meta_databaseocp_meta_tenant:tenant_name: ocp_metaocp_meta_username: root # User to use under ocp meta tenantocp_meta_password: xxxxxx # Password used to connect to ocp meta tenantocp_meta_db: meta_database # Database used to store ocp meta dataocp_monitor_tenant:tenant_name: ocp_monitorocp_monitor_username: root # User to use under ocp monitor tenantocp_monitor_password: xxxxxx # Password used to connect to ocp meta tenantocp_monitor_db: monitor_database # Database used to store ocp meta data
然后 :wq 保存退出
$obd cluster edit-config metadb
Search param plugin and load ok
Search param plugin and load ok
Parameter check ok
Save deploy "metadb" configuration
Use `obd cluster redeploy metadb` to make changes take effect.
Trace ID: b885716c-71a9-11ef-9ff0-00163e046d79
If you want to view detailed obd logs, please run: obd display-trace b885716c-71a9-11ef-9ff0-00163e046d79
這個時候,會提示你需要重新redeploy集群,不過千萬不要執行 obd cluster redeploy metadb 來重新部署,我們可以通過修改obd記錄的狀態文件,繞過這個redeploy,所以第二步,就是來修改這個狀態文件
修改狀態文件
默認狀態文件是在 ~/.obd/cluster/<deploy_name> 目錄下的 .data 這個文件,vim打開之后,關注config_status這個變量,可以看到當前狀態是NEED_REDEPLOY,需要將其修改為NEED_RESTART。
name: metadb
components:oceanbase-ce:hash: 736ac0f3379032dd41436c1b5a229f8d42b44e21version: 4.2.1.4obproxy-ce:hash: 0aed4b782120e4248b749f67be3d2cc82cdcb70dversion: 4.2.1.0ocp-server-ce:hash: bd4512f9f708fb510d98f245b1be0b03a05e2cbaversion: 4.3.1
status: STATUS_RUNNING
config_status: NEED_REDEPLOY
修改完之后,就可以使用命令行重啟集群
重啟集群
重啟集群時,使用 obd cluster restart <deploy_name> --wp 的方式進行重啟,--wp 的含義是?--with-parameter,即用于讓重啟生效的配置項生效。
重啟完成之后,此時 OCP 連接metadb的方式,就從原來的單一obproxy,修改為了通過10.10.10.10這個 VIP連接的方式了。
進一步,還可以進行測試,即任意關閉metadb的obproxy,看下OCP訪問是否出現斷開情況。
以上修改方式,都是基于OCP 4.2.x和4.3.x版本做的測試,未來相信官方也會對這塊進行優化,使 OCP 在安裝部署的時候,直接可以填寫 VIP 或者 域名,從而真正達到 OCP 的高可用。
OceanBase 云數據庫現已支持免費試用,現在申請,體驗分布式數據庫帶來全新體驗吧 ~