工具 | PG 集群復制管理工具 repmgr


作者:顏博 青雲科技數據庫研發工程師

目前從事 PostgreSQL 產品開發工作,熱衷於 PostgreSQL 數據庫的學習和研究

| REPMGR 簡介

repmgr[1] 是一套開源工具,用於管理 PostgreSQL 服務器集群內的復制和故障轉移。repmgr 支持並增強了 PostgreSQL 的內置流復制,它提供了一個單一的讀/寫主服務器和一個或多個只讀備用服務器。

file

repmgr 流復制管理工具對 PostgreSQL 集群節點的管理是基於分布式的管理方式。集群每個節點都具備一個 repmgr.conf 配置文件,用來記錄本節點的 ID、節點名稱、連接信息、數據庫的 PGDATA 目錄等配置參數。在完成參數配置后,就可以通過 repmgr 命令實現對集群節點的 “一鍵式” 部署。

repmgr 架構圖(圖片來源:https://repmgr.org/ )如下:

file

集群節點部署完成后,每個節點都可通過 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 interest
    • repmgr.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM