聊聊 PostgreSQL 數據庫的高可用架構
Whoami:5年+金融、政府、醫療領域工作經驗的DBA
Certificate:OCP、PCP
Skill:Oracle、Mysql、PostgreSQL
Platform:CSDN、墨天倫、公衆號(呆呆的私房菜)
閱讀本文可以瞭解 PostgreSQL 數據庫高可用架構相關內容、包括高可用架構設計、國內主流高可用實現方案、分佈式架構等內容。
01 高可用概述
-
高可用性(High Availability, HA)是指系統或服務能夠在面對硬件故障、軟件崩潰、網絡問題等各種故障情況時,仍然保持運行並提供服務的能力。其目標是最小化系統停機時間,確保服務的連續性和可靠性。
-
高可用架構的核心準則是冗餘和容災恢復,其中容災恢復涉及如下兩個關鍵指標:
-
RPO(Recovery Point Objective):指業務系統所允許的在災難過程中最大數據丟失量,用來衡量容災系統的數據冗餘備份能力;
- RTO(Recovery Time Objective):指信息系統從災難狀態恢復到可運行狀態所需要的時間,用來衡量容災系統的業務恢復能力。
-
在實際業務系統中,高可用架構的設計是一項關鍵任務,它確保了系統的持續運行和數據的持久化,即使在面對硬件故障、軟件缺陷或系統升級等挑戰時也能保持服務不中斷。一個優秀的高可用架構設計需要綜合考慮業務需求、系統複雜性、預算限制和風險容忍度等多個方面。以下是設計高可用架構時應考慮的幾個關鍵點:
-
業務需求分析:首先要深入理解業務的關鍵程度、服務水平協議(SLA)要求、數據一致性需求和故障恢復時間目標(RTO)。
-
系統組件識別:識別系統中的所有關鍵組件,包括硬件、軟件、網絡資源和第三方服務,並評估它們對整個系統可用性的影響。
-
冗餘設計:在關鍵組件中實施冗餘,如使用集羣、多副本數據存儲和多個服務實例,以確保單點故障不會導致整個系統宕機。
-
故障轉移機制:設計和實施有效的故障轉移策略,如自動故障轉移、負載均衡和健康檢查,以確保系統能夠快速響應故障並恢復服務。
-
測試和演練:定期進行故障模擬和恢復演練,驗證高可用架構的有效性,並根據測試結果不斷優化和調整。
02 高可用設計
- 高可用、負載均衡和複製特性矩陣如下:
03 其他 HA 方案
一、國內較流行的開源高可用組件(repmgr / patroni+etcd / pacemaker+corosync):
- repmgr:
* 1. 優勢:不使用任何額外的端口進行通信,如果要執行切換,必須配置免密 ssh;在主服務器發生故障時可以執行自動故障轉移;對數據庫侵入小,維護起來和正常主備複製基本一致;通過 witness 見證服務器來解決腦裂問題;
* 2. 不足:不支持多次 failover;無法從 PostgreSQL 服務關閉的節點檢索另一個節點的狀態;不能在備機單個節點 down 時自動將其拉起。
- patroni+etcd:
* 優勢:支持自動 failover 和按需 switchover;支持同步複製下備庫故障時自動降級爲異步複製;支持使用 watchdog 防止腦裂;支持自定義外部 callback 腳本;支持多種常見 DCS 存儲元數據,包括 etcd、zookeeper、consul 等;支持 reset api 和 haproxy 集成;
* 不足:與原本運維主備流複製環境差異較大,對數據庫的侵入性大;用戶需要處理 DCS 軟件的設置、管理和升級;需要爲組件通信打開多個端口(patroni 的 reset api 端口、dcs 最少 2 個端口);需要安裝分佈式存儲。
二、數據分片(citus / pgxl / greenplum / tbase):
- citus 架構:PostgreSQL 的開源擴展,citus 以插件的方式擴展到 PostgreSQL 中,將 PostgreSQL 轉換成一個分佈式數據庫,在集羣的多個節點上分發數據和查詢,具有像分片、分佈式 SQL 引擎、複製表和分佈式表等特性。
- pgxl 架構:基於 PostgreSQL 源代碼的基礎上增加新功能實現的。
* 分層:PostgreSQL-XL 將 PostgreSQL 的 SQL 解析層的工作和數據存取層的工作分離到不同的兩種節點上,分別稱爲 Coordinator 節點和 Datanode 節點;
* 全局事務:爲了保證分佈模式下事務能夠正確執行,增加了一個 GTM 節點;
* 避免單點故障:爲所有節點配置對應的 slave 節點。
* 注意:pgxl 10 版本之後便不再提供更新了......
- greenplum 架構:採用典型的 shared nothing 架構,是一個基於 PostgreSQL 的分佈式數據庫,採用大規模並行處理(MPP)架構,通過將數據均勻分佈到多個 Segment 節點上,並在這些節點上並行執行查詢,實現了高性能的數據分析。它通過 Master-Segment 結構、Interconnect 高速通信和分佈式事務管理,提供了一個高可用、可擴展的數據倉庫解決方案,適用於處理大規模數據集和複雜的商業智能查詢。
三、多服務器並行執行查詢(pgpool-Ⅱ / pl/proxy 工具):
- pgpool-Ⅱ:一個在 PostgreSQL 服務器和 PostgreSQL 客戶端之間工作的中間件。
* 1. 優勢:支持連接池;支持讀寫分離功能;支持高可用切換,通過 watchdog 對其他節點檢查,若出現故障會將備用節點提升爲活動狀態,並接管虛擬 IP;支持負載均衡,允許在多個服務器間分配 select 查詢來減少每個 PostgreSQL 服務器的負載,從而提高系統的整體吞吐量;
* 2. 不足:配置較爲複雜,運維難度上升;無法支持所有 PostgreSQL 功能,例如不支持大對象功能;並行查詢存在性能問題,寫操作需要在所有節點上同步執行。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/mSMlfnu870LBvq2lmlITDw