乖乖,PG 高可用咱不用主從流複製了,咱試試 patroni

作者:IT邦德
中國DBA聯盟(ACDU)成員,10餘年DBA工作經驗,
Oracle、PostgreSQL ACE
CSDN博客專家及B站知名UP主,全網粉絲10萬+
擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,
安裝遷移,性能優化、故障應急處理

微信:jem_db
QQ交流羣:587159446
公衆號:IT邦德

前言

Patroni 用於構建高可用 PostgreSQL 集羣的工具, 本文做了詳細的說明

1.1 架構

patroni+etcd提供了一系列的集羣管理方案。
etcd負責集羣狀態信息的存放,用來聯繫各個節點,
patroni負責爲集羣提供高可用服務,
兩者的集合爲PostgreSQL集羣提供了故障轉移的高可用服務
,它不僅配置簡單,而且功能豐富:
1.支持手動和自動故障轉移
2.支持一主多從、級聯複製
3.支持同步、異步模式
4.支持使用watchdog防止腦裂

2.etcd 介紹

Etcd 是⼀款基於 Raft 算法和協議開發的分佈式 key-value 數據庫,基於 Go 語⾔編寫,Patroni 監控本地的 PostgreSQL 狀態,並將相關信息寫⼊ Etcd,每個 Patroni 都能讀寫 Etcd 上的 key,從⽽獲取外地 PostgreSQL 數據庫信息。當 Etcd 的 leader 節點不可⽤時,Etcd 會⼀致性的選擇⼀個合適的節點作爲主節點,新的 Etcd 主節點將獲取 leader key,因此建議 Etcd 集羣爲三個以上且爲奇數的節點。⼀個標準的 3 節點 etcd 集羣,最⼤容許 1 個節點故障。

https://github.com/etcd-io/etcd

  1. 部署 patroni

1.在各個節點部署python3。
需要使用高版本的python來使用patroni服務
2.在各個節點上部署patroni。
安裝必要的依賴包和patroni軟件

4.watchdog

使用 watchdog 爲防止出現腦裂,如果 Leader 節點異常導致 patroni 進程無法及時更新 watchdog,會在 Leader key 過期的前 5 秒觸發重啓。重啓如果在 5 秒之內完成,Leader 節點有機會再次獲得 Leader 鎖,否則 Leader key 過期後,由備庫通過選舉選出新的 Leader。Patroni 會在將 PostgreSQL 提升爲 master 之前嘗試激活 watchdog。如果看 watchdog 激活失敗並且 watchdog 模式是 required 那麼節點將拒絕成爲主節點。在決定參加領導者選舉時,Patroni 還將檢查 watchdog 配置是否允許它成爲領導者。在將 PostgreSQL 降級後(例如由於手動故障轉移),Patroni 將再次禁用 watchdog。當 Patroni 處於暫停狀態時,watchdog 也將被禁用。正常停止 Patroni 服務,也會將 watchdog 禁用。

  1. 集羣運維

5.1 查看集羣內節點信息

patronictl -c /etc/patroni/patroni.yml list

5.2 手動切換主備

選擇某一可用的從節點,使其成爲主節點角色
patronictl -c /etc/patroni/patroni.yml switchover
查看集羣狀態
patronictl -c /etc/patroni/patroni.yml list

5.3 初始化節點

當某一節點與主庫不同步,或者節點異常運行時,
可以使用此方法初始化節點信息以重新加入集羣。
patronictl -c /etc/patroni/patroni.yml reinit pgsql
1.選擇以下需要添加的節點名稱:pgsql_node2
2.你確定要重新初始化成員 pgsql_node2?[y/N]:y
3.成功:爲成員pgsql_node3執行初始化
  1. 總結

Patroni 用於構建高可用 PostgreSQL 集羣的工具,它通過自動化的方式來管理主備切換、數據複製和集羣健康檢查。這篇文章將深入探討 Patroni 的技術特性、應用場景及其優勢,幫助你更好地理解和利用這一強大的 PostgreSQL 管理方案。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/fAHxalUyaOeaKKeoGbe3Sg