作者:顏博 青云科技資料庫研發工程師
目前從事 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=https://www.cnblogs.com/radondb/archive/2021/12/02/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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374456.html
標籤:其他
上一篇:Redis | 第7章 Redis 服務器《Redis設計與實作》
下一篇:Mysql面試總結
