工具 | PG 叢集複製管理工具 repmgr

語言: CN / TW / HK

作者:顏博 青雲科技資料庫研發工程師

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

| REPMGR 簡介

repmgr[1] 是一套開源工具,用於管理 PostgreSQL 伺服器叢集內的複製和故障轉移。repmgr 支援並增強了 PostgreSQL 的內建流複製,它提供了一個單一的讀/寫主伺服器和一個或多個只讀備用伺服器。

file

repmgr 流複製管理工具對 PostgreSQL 叢集節點的管理是基於分散式的管理方式。叢集每個節點都具備一個 repmgr.conf 配置檔案,用來記錄本節點的 ID、節點名稱、連線資訊、資料庫的 PGDATA 目錄等配置引數。在完成引數配置後,就可以通過 repmgr 命令實現對叢集節點的 “一鍵式” 部署。

repmgr 架構圖(圖片來源:http://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 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