作者:顏博 青雲科技數據庫研發工程師
目前從事 PostgreSQL 產品開發工作,熱衷於 PostgreSQL 數據庫的學習和研究
| REPMGR 簡介
repmgr[1] 是一套開源工具,用於管理 PostgreSQL 服務器集群內的復制和故障轉移。repmgr 支持並增強了 PostgreSQL 的內置流復制,它提供了一個單一的讀/寫主服務器和一個或多個只讀備用服務器。
repmgr 流復制管理工具對 PostgreSQL 集群節點的管理是基於分布式的管理方式。集群每個節點都具備一個 repmgr.conf 配置文件,用來記錄本節點的 ID、節點名稱、連接信息、數據庫的 PGDATA 目錄等配置參數。在完成參數配置后,就可以通過 repmgr 命令實現對集群節點的 “一鍵式” 部署。
repmgr 架構圖(圖片來源:https://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 https://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:https://github.com/EnterpriseDB/repmgr
[2]. 5.2.1文檔:https://repmgr.org/docs/5.2/
[3]. 常見操作:https://blog.csdn.net/weixin_37692493/article/details/117032458?ivk_sa=1024320u