1. 程式人生 > 其它 >【轉載】【PostgreSQL架構】PostgreSQL的最佳群集高可用性方案

【轉載】【PostgreSQL架構】PostgreSQL的最佳群集高可用性方案

PostgreSQL 高可用架構

轉自:https://cloud.tencent.com/developer/article/1785162?from=article.detail.1688964

什麼是高可用性?

它是服務可用的時間量,通常由企業定義。

冗餘是高可用性的基礎;萬一發生事故,我們可以繼續毫無問題地運轉。

持續恢復

如果發生事件,則必須還原備份,然後應用wal日誌;恢復時間將非常長,我們不會談論高可用性。

但是,如果我們將備份和日誌存檔在應急伺服器中,則可以在日誌到達時應用它們。

如果日誌每隔1分鐘傳送和應用一次,則應急基礎將處於連續恢復狀態,並且到生產的時間最多為1分鐘。

備用資料庫

備用資料庫的想法是保留生產資料庫的副本,該副本始終具有相同的資料,並且可以在發生事件時使用。

有幾種方法可以對備用資料庫進行分類:

根據複製的性質:

  • 物理備用資料庫:複製磁碟塊。
  • 邏輯備用資料庫:流式傳輸資料更改。

通過事務的同步性:

  • 非同步:可能會丟失資料。
  • 同步:不會丟失資料;主伺服器中的提交等待備用伺服器的響應。

通過用法:

  • 熱備用:它們不支援連線。
  • 熱備用:支援只讀連線。

叢集

群集是一組一起工作的主機,被視為一個主機。

這提供了一種實現水平可伸縮性的方法,並提供了通過新增伺服器來處理更多工作的能力。

它可以抵抗節點的故障並繼續透明地工作。

根據共享的內容,有兩種模型:

  • 共享儲存:所有節點都使用相同的資訊訪問相同的儲存。
  • 不共享:每個節點都有自己的儲存,取決於我們系統的結構,該儲存可能與其他節點具有相同的資訊。

現在讓我們回顧一下PostgreSQL中的一些叢集選項。

分散式複製塊裝置 (Distributed Replicated Block Device)

DRBD是一個Linux核心模組,可使用網路實現同步塊複製。它實際上不實現群集,也不處理故障轉移或監視。為此,您需要補充軟體,例如Corosync + Pacemaker + DRBD。

例:

  • Corosync:處理主機之間的訊息。
  • Pacemaker:啟動和停止服務,確保它們僅在一臺主機上執行。
  • DRBD:在塊裝置級別同步資料。

叢集控制(ClusterControl)

ClusterControl是用於資料庫叢集的無代理管理和自動化軟體。它可直接從其使用者介面幫助部署,監視,管理和擴充套件資料庫伺服器/叢集。

ClusterControl能夠處理維護資料庫伺服器或群集所需的大多數管理任務。

使用ClusterControl,您可以:

  • 在您選擇的技術堆疊上部署獨立的,複製的或群集的資料庫。
  • 跨多語言資料庫和動態基礎架構統一自動化故障轉移,恢復和日常任務。
  • 您可以建立完整或增量備份並計劃它們。
  • 對整個資料庫和伺服器基礎結構進行統一和全面的實時監控。
  • 只需一個操作即可輕鬆新增或刪除節點。

在PostgreSQL上,如果發生事件,可以自動將您的從屬提升為主狀態。

它是一個非常完整的工具,帶有免費的社群版本(還包括免費的企業試用版)。

紅寶石 (Rubyrep)

非同步,多主機,多平臺複製(在Ruby或JRuby中實現)和多DBMS(MySQL或PostgreSQL)的解決方案。

基於觸發器,它不支援DDL,使用者或授權。

使用和管理的簡單性是其主要目標。

一些功能:

  • 配置簡單
  • 安裝簡單
  • 平臺獨立,表格設計獨立。

Pgpool II

它是一種在PostgreSQL伺服器和PostgreSQL資料庫客戶端之間工作的中介軟體。

一些功能:

  • 連線池
  • 複寫
  • 負載均衡
  • 自動故障轉移
  • 並行查詢

Bucardo

基於行的非同步級聯主從複製,使用觸發器在資料庫中排隊;基於行的非同步主-主複製,基於行,使用觸發器和自定義衝突解決方案。

Bucardo需要專用的資料庫並作為Perl守護程式執行,該守護程式與此資料庫以及複製中涉及的所有其他資料庫進行通訊。它可以作為多主機或多從機執行。

主從複製涉及到一個或多個目標的一個或多個源。源必須是PostgreSQL,但是目標可以是PostgreSQL,MySQL,Redis,Oracle,MariaDB,SQLite或MongoDB。

一些功能:

  1. 負載均衡
  2. 從站不受限制,可以寫
  3. 部分複製
  4. 按需複製(更改可以自動或在需要時推送)
  5. 從站可以“預熱”以快速設定

缺點:

  • 無法處理DDL
  • 無法處理大物件
  • 沒有唯一鍵無法增量複製表
  • 不適用於Postgres 8之前的版本

Postgres-XC

Postgres-XC是一個開源專案,旨在提供可寫擴充套件,同步,對稱和透明的PostgreSQL叢集解決方案。它是緊密耦合的資料庫元件的集合,可以將其安裝在多個硬體或虛擬機器中。

寫可伸縮性意味著Postgres-XC可以配置任意數量的資料庫伺服器,並且與單個數據庫伺服器相比,可以處理更多的寫操作(更新SQL語句)。

您可以有多個客戶端連線到的資料庫伺服器,該伺服器提供資料庫的單個一致的群集範圍檢視。

來自任何資料庫伺服器的任何資料庫更新對於在不同主伺服器上執行的任何其他事務都是立即可見的。

透明意味著您不必擔心內部如何將資料儲存在多個數據庫伺服器中。

您可以配置Postgres-XC在多個伺服器上執行。您為每個表選擇的資料以分散式方式儲存,即分割槽或複製。發出查詢時,Postgres-XC會確定目標資料的儲存位置,並向包含目標資料的伺服器發出相應的查詢。

Citus

Citus用內建的高可用性功能(例如自動分片和複製)替代了PostgreSQL。Citus分片將您的資料庫分片,並在整個商品節點叢集中複製每個分片的多個副本。如果群集中的任何節點不可用,Citus會將所有寫入或查詢透明地重定向到其他一個包含受影響的分片副本的節點。

一些功能:

  • 自動邏輯分片
  • 內建複製
  • 用於災難恢復的資料中心感知複製
  • 具有高階負載平衡功能的中查詢容錯

您可以增加由PostgreSQL支援的實時應用程式的正常執行時間,並最大程度地減少硬體故障對效能的影響。您可以使用內建的高可用性工具來實現此目標,從而最大程度地減少成本高昂且易於出錯的手動干預。

PostgresXL

它是一種無共享的多主群集解決方案,可以透明地在一組節點上分配表,並並行執行這些節點的查詢。它具有一個稱為全域性事務管理器(GTM)的附加元件,用於提供群集的全域性一致檢視。該專案基於PostgreSQL 9.5版本。一些公司,例如2ndQuadrant,為該產品提供商業支援。

PostgresXL是可水平擴充套件的開源SQL資料庫叢集,具有足夠的靈活性來處理各種資料庫工作負載:

  • OLTP寫密集型工作負載
  • 需要MPP並行性的商業智慧
  • 運營資料儲存
  • 鍵值儲存
  • GIS地理空間
  • 混合工作負載環境
  • 多租戶提供商託管環境

元件:

  • 全域性事務監視器(GTM):全域性事務監視器確保群集範圍內的事務一致性。
  • 協調器:協調器管理使用者會話並與GTM和資料節點進行互動。
  • 資料節點:資料節點是儲存實際資料的位置。

結論

還有許多其他產品可以為PostgreSQL建立我們的高可用性環境,但是您必須注意以下幾點:

  • 新產品,未經充分測試
  • 停產專案
  • 侷限性
  • 許可費用
  • 非常複雜的實現
  • 不安全的解決方案

您還必須考慮您的基礎架構。如果只有一臺應用程式伺服器,那麼無論您配置了多少資料庫的高可用性,如果應用程式伺服器發生故障,則將無法訪問。您必須很好地分析基礎架構中的單點故障,並嘗試解決它們。