工具 | PG 叢集複製管理工具 repmgr
作者:顏博 青雲科技資料庫研發工程師
目前從事 PostgreSQL 產品開發工作,熱衷於 PostgreSQL 資料庫的學習和研究
| REPMGR 簡介
repmgr[1] 是一套開源工具,用於管理 PostgreSQL 伺服器叢集內的複製和故障轉移。repmgr 支援並增強了 PostgreSQL 的內建流複製,它提供了一個單一的讀/寫主伺服器和一個或多個只讀備用伺服器。
repmgr 流複製管理工具對 PostgreSQL 叢集節點的管理是基於分散式的管理方式。叢集每個節點都具備一個 repmgr.conf 配置檔案,用來記錄本節點的 ID、節點名稱、連線資訊、資料庫的 PGDATA 目錄等配置引數。在完成引數配置後,就可以通過 repmgr 命令實現對叢集節點的 “一鍵式” 部署。
repmgr 架構圖(圖片來源:http://repmgr.org/ )如下:
叢集節點部署完成後,每個節點都可通過 repmgrd 守護程序來監控節點資料庫狀態;每個節點元資料表可獨立維護,這些元資料表將記錄所有叢集節點的資訊。
選舉原理
在發生 Auto Failover 時,備節點在嘗試多次連線主節點失敗後(嘗試次數及嘗試間隔可以通過 repmgr.conf 配置檔案修改),repmgrd 會在所有備節點中選舉一個候選備節點(選舉機制參考下文)提升為新主節點,其他備節點去 Follow 到該新主上,形成一個新的叢集。
repmgr 選舉候選備節點按照以下順序選舉:LSN > Priority > Node_ID
- 系統將優先選舉一個 LSN 較大的節點,作為候選備節點;
- 若 LSN 一樣,會根據 Priority 優先順序進行比較(該優先順序是在配置檔案中進行引數配置,如果 Priority 為 0,則代表該節點被禁止提升為主節點);
- 若優先順序也一樣,會比較節點的 Node ID,小者會優先選舉。
兩個工具
repmgr 主要提供了 repmgr 和 repmgrd 兩個工具。
repmgr 是一個執行管理任務的命令列工具,方便進行 PostgreSQL 伺服器叢集的管理。具備以下功能特點:
- 設定備用伺服器
- promote 備
- 主從切換
- 顯示覆制叢集中伺服器的狀態
repmgrd 是一個守護程序,它主動監視複製叢集中的伺服器並支援以下任務:
- 監控和記錄複製叢集資訊
- 故障檢測、故障轉移
- 叢集中事件的通知(需要自定義指令碼接受通知)
使用者與元資料
為了有效地管理複製叢集,repmgr 需要將叢集中節點的相關資訊儲存在 repmgr 專用資料庫表中。此架構由 repmgr 擴充套件自動建立,該擴充套件在初始化由 repmgr 管理的叢集(repmgr primary register)的第一步中安裝,幷包含以下物件:
- Tables:
repmgr.events
: records events of interestrepmgr.nodes
: 複製叢集中每個節點的連線和狀態資訊repmgr.monitoring_history
: repmgrd 寫入的歷史備用監控資訊
- Views:
repmgr.show_nodes
: 基於repmgr.nodes
表,另外顯示伺服器上游節點的名稱repmgr.replication_status
: 當啟用 repmgrd 的監控時,顯示每個 standby 的監控狀態。repmgr 元資料資訊可以儲存在已有的資料庫或在自己的專用資料庫。
注意:repmgr 元資料資訊不能儲存在不屬於 repmgr 管理的複製叢集的 PostgreSQL 伺服器上。repmgr 需要一個可以訪問資料庫和執行必要的更改的使用者,該使用者可以不是超級使用者,但是某些操作(例如 repmgr 擴充套件的初始安裝)將需要超級使用者連線(可以在需要時使用命令列選項指定 --superuser)。
| 安裝 repmgr
注意:必須在叢集的所有節點安裝相同的 “主要” repmgr 版本(例如 5.2.1.x)[2]。
repmgr 版本
repmgr 版本 | 支援的 PostgreSQL 版本 | 最新版本 |
---|---|---|
repmgr 5.2 | 9.4, 9.5, 9.6, 10, 11, 12, 13 | 5.2.1 (2020-12-07) |
repmgr 5.1 | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 | 5.1.0 (2020-04-13) |
repmgr 5.0 | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 | 5.0 (2019-10-15) |
repmgr 4.x | 9.3, 9.4, 9.5, 9.6, 10, 11 | 4.4 (2019-06-27) |
- repmgr 2.x 和 3.x 系列不再維持,不在此羅列。
- repmgr 5.0 釋出之後,將不會再發布 repmgr 4.x 系列。
安裝過程
以 repmgr 5.2.x 版本為例,從原始碼倉庫,Clone 並安裝 repmgr。
$ git clone http://github.com/EnterpriseDB/repmgr
$ git checkout REL5_2_STABLE
$ cd repmgr/
./configure
$ make install
make install 成功後,pg_bin_path 裡會有 repmgr、repmgrd 兩個可執行檔案。
| 使用 repmgr
repmgr 工具的基本語法[3]:
repmgr [OPTIONS] primary {register|unregister}
repmgr [OPTIONS] standby {register|unregister|clone|promote|follow|switchover}
repmgr [OPTIONS] node {status|check|rejoin|service}
repmgr [OPTIONS] cluster {show|event|matrix|crosscheck|cleanup}
repmgr [OPTIONS] witness {register|unregister}
repmgr [OPTIONS] service {status|pause|unpause}
repmgr [OPTIONS] daemon {start|stop}
- 一般配置選項
-b, --pg_bindir=PATH PostgreSQL 二進位制檔案的路徑(可選)
-f, --config-file=PATH repmgr 配置檔案的路徑
-F, --force 強制執行有潛在危險的操作
- 資料庫連線選項
-d, --dbname=DBNAME 要連線的資料庫(預設:“postgres”)
-h, --host=HOSTNAME 資料庫伺服器主機
-p, --port=PORT 資料庫伺服器埠(預設:“5432”)
-U, --username=USERNAME 要連線的資料庫使用者名稱(預設:“postgres”)
- 特定於節點的選項
-D, --pgdata=DIR 節點資料目錄的位置
--node-id 通過id指定節點(僅適用於部分操作)
--node-name 按名稱指定節點(僅適用於部分操作)
- 記錄選項
--dry-run 顯示動作會發生什麼,但不執行它
-L, --log-level 設定日誌級別(覆蓋配置檔案;預設值:NOTICE)
--log-to-file 記錄到 repmgr.conf 中定義的檔案(或記錄工具)
-q, --quiet 禁止除錯誤之外的所有日誌輸出
-t, --terse 不顯示細節、提示和其他非關鍵輸出
-v, --verbose 顯示額外的日誌輸出(用於除錯)
常用操作
- 操作類
命令 | 描述 |
---|---|
repmgr primary register | 註冊當前節點為 primary 節點 |
repmgr primary unregister | 登出 primary 主節點 |
repmgr standby clone | 當前節點使用 pg_basebackup 從 primary 主節點複製資料目錄 |
repmgr standby register | 註冊當前節點為 standby 節點 |
repmgr standby unregister | 登出 standby 節點 |
repmgr standby promote | 將 standby 節點提升為 primary 主節點 |
repmgr standby follow | 一主多從架構中,standby 節點重新指向新的 primary 主節點 |
repmgr standby switchover | 將指定 standby 節點提升為 primary 主節點,並將 primary 主節點降級為 standby 節點 |
repmgr witness register | 註冊當前節點為見證伺服器節點 |
repmgr witness unregister | 登出見證伺服器節點 |
- 檢視類
命令 | 描述 |
---|---|
repmgr node status | 檢視各節點的基本資訊和複製狀態 |
repmgr node check | 高可用叢集節點狀態資訊檢查 |
repmgr node rejoin | 重新加入一個失效節點到叢集 |
repmgr cluster show | 檢視叢集中已註冊的節點基本資訊與狀態 |
repmgr cluster matrix | 檢視叢集中所有節點的 matrix 資訊 |
repmgr cluster crosscheck | 檢視叢集中所有節點間兩兩交叉連線檢測 |
repmgr cluster event | 檢視叢集事件記錄資訊 |
repmgr cluster cleanup | 清理叢集監控歷史 |
下期預告
下期我們將使用 repmgr ,帶您一步步搭建一套 PostgreSQL 高可用叢集。
參考
[1]. repmgr:http://github.com/EnterpriseDB/repmgr
[2]. 5.2.1文件:http://repmgr.org/docs/5.2/
[3]. 常見操作:http://blog.csdn.net/weixin_37692493/article/details/117032458?ivk_sa=1024320u
- 工具 | 如何對 MySQL 進行 TPC-C 測試?
- 工具 | 常用 MySQL 核心 Debug 技巧
- 工具 | PG 叢集複製管理工具 repmgr
- 工具 | pg_recovery 設計原理與原始碼解讀
- 視野 | OpenSearch,雲廠商的新選擇?
- 分享 | 一文了解 PG PITR 即時恢復
- 容器化 | ClickHouse Operator 原理解析
- 原始碼 | 為金融場景而生的資料型別:Numeric
- 原始碼 | 解析 Redo Log 實現方式
- 設計 | 基於 Redis 談一談快取設計思想
- 高可用 | Xenon 實現 MySQL 高可用架構 部署篇
- 雲原生 | 混沌工程工具 ChaosBlade Operator Pod 篇
- 快取 | Redis 快取避坑指南
- 容器化 | ClickHouse on K8s 部署篇【建議收藏】
- 容器化 | ClickHouse on K8s 基礎篇
- 工具 | 使用 CLion 編譯除錯 MySQL 8.0
- 雲原生 | 混沌工程工具 ChaosBlade Operator Node 篇
- 雲原生 | 混沌工程工具 ChaosBlade Operator 入門篇
- 雲原生 | 混沌工程工具 ChaosBlade Operator 入門篇
- 容器化 | 基於 Kubernetes 的新一代 MySQL 高可用架構實現方案