簡介
為了滿足數據庫集群服務實例的高可用狀態決策和故障自動切換,openGauss3.0引入CM(Cluster Manager)集群管理組件,其主要功能如下:
- 數據庫實例主備角色仲裁
- CM自身高可用仲裁
- 數據庫實例運行狀態監控及節點資源檢測
- 數據庫集群、實例的啟動、停止,狀態查詢、狀態更新
- 數據庫集群、實例自動switchover、failover
CM集群管理組網
以一主三備為例:

CM集群管理模塊簡介
CM集群管理分為om_monitor,cm_ctl,cm_server,cm_agent四大模塊,依賴DCF,DCC兩大模塊實現自研高可用仲裁。

CM集群管理模塊之om_monitor
om_monitor進程由Linux crontab定時任務管控,其功能如下:
- 監測om_monitor進程自身的運行狀態:一旦發現其狀態為T則強制kill,待定時任務拉起,監測時間間隔1min(這會導致OMM恢復時間1-60s不等);
- 讀取配置文件并監控進程打開的文件描述符數量;
- 啟動cm_agent進程并監測其運行狀態:監測時間間隔1s;
CM集群管理模塊之cm_server
- cm_server進程由cm_agent進程管控,其功能如下:
- cm_ctl 指令響應及監控
- cm_agent 上報消息處理
- cm_server實例角色自仲裁
- db實例角色仲裁
- DCC模塊初始化,對DCC特定Key的讀寫操作
CM集群管理模塊之cm_agent
cm_agent進程由om_monitor進程管控,其功能如下:
- 注冊消息接口,接收cm_server指令,調用響應接口執行指令
- 管控cm_server進程和db進程
啟動/停止:共享一個線程,每隔一秒監測進程是否需要啟動/停止。且在啟動進程之前會檢測磁盤是否損壞、磁盤使用率是否達到預設的閾值、文件系統是否可寫、網卡是否啟動。
查詢:獨立線程,每隔一秒查詢一次實例狀態并上報給cm_server - 進程僵死檢測
監控進程的T/D/Z狀態,判定是否僵死(超過一定次數則強制kill)
T狀態處理邏輯:5輪*36s=180s(實際測試大概150s)
再次處理僵死依賴參數–instance_phony_dead_restart_interval
追求極致RTO–enable_e2e_rto=on,立馬進行僵死處理 - 故障檢測
網卡故障檢測 - build
incremental_build 默認就是增量build,三次失敗之后才會全量build
高可用仲裁之db仲裁(Quorum模式)
-
前提條件
多數派:集群內可參與選主的備機實例數量超過集群節點個數的一半 -
細分策略
(1) cma會嘗試拉起db服務,若6s內成功拉起則無需新一輪的仲裁
(2) local_term最大的
(3) local_last_xlog_location最大的
(4) 靜態主local_static_role(即上一輪的主)
(5) 與靜態主同AZ的節點
(6) AZ priority值最小
(7) Instance ID最小

腦裂故障處理
- 前提條件
cm_server primarv存在 - 場景
- 網絡隔離
(1) cms
若原cms主被隔離到少數派分區,因無法達成多數派一致,日志無法提交,一定時間內將會降備;
若某一個分區內無cms主且滿足多數派,則會觸發選主流程;
(2) db
Quorum仲裁:若某一個分區中存在數據庫主實例,cma也被隔離,無法上報該實例信息,此時CM無法感知主實例,觸發選主流程。當網絡隔離消失后,db將出現雙主,此時cms會殺掉原主實例,確保數據庫主實例的唯一性。
DCF仲裁:參考cms仲裁 - 人為制造腦裂
集群正常狀態下,強制將備庫failover為主庫。CM會將兩個數據庫主實例都ki1l掉,然后進行重新選主,此時主有可能不是原來的兩個主。
常用命令
- 集群狀態查詢
cm_ctl query -vCi -z ALL
- switchover(可在任意節點執行)
cm_ctl switchover -n <nodeid> -D <datadir>
- 單個節點停止(不可使用gs_ctl stop)
cm_ctl stop -n <nodeid>
- 修改參數
cm_ctl set --param --server -k datastorage_threshold_value_check=95
- reload 參數
cm_ctl reload --param --server
- 查看參數是否生效
cm_ctl list --param --server|grep datastorage_threshold_value_check
CM日志
重點關注圖片標黃的日志(CMS日志只需看CMS主上的日志)

CM數據目錄
目錄位置在集群安裝時配置
cm_agent.conf和cm_server.conf存放cm_agent和cm_server的參數
.pid文件存放對應的進程號

CM測試用例
主要進行了如下測試:

CM測試總結
針對測試結果,作出以下總結,僅供參考
(本次測試均使用CM參數默認值,數據庫關閉最大可用模式)

最后修改時間:2022-08-16 17:10:54
「喜歡這篇文章,您的關注和贊賞是給作者最好的鼓勵」
關注作者
【版權聲明】本文為墨天輪用戶原創內容,轉載時必須標注文章的來源(墨天輪),文章鏈接,文章作者等基本信息,否則作者和墨天輪有權追究責任。如果您發現墨天輪中有涉嫌抄襲或者侵權的內容,歡迎發送郵件至:contact@modb.pro進行舉報,并提供相關證據,一經查實,墨天輪將立刻刪除相關內容。




