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

来源:https://www.cnblogs.com/brithToSpring/p/18005702
-Advertisement-
Play Games

轉載:【PostgreSQL架構】PostgreSQL的最佳群集高可用性方案-騰訊雲開發者社區-騰訊雲 (tencent.com) 如果您的系統依賴PostgreSQL資料庫並且您正在尋找HA的集群解決方案,我們希望提前告知您這是一項複雜的任務,但並非不可能實現。 我們將討論一些解決方案,您可以從中 ...


轉載:【PostgreSQL架構】PostgreSQL的最佳群集高可用性方案-騰訊雲開發者社區-騰訊雲 (tencent.com)

如果您的系統依賴PostgreSQL資料庫並且您正在尋找HA的集群解決方案,我們希望提前告知您這是一項複雜的任務,但並非不可能實現。

我們將討論一些解決方案,您可以從中選擇對您的容錯要求。

PostgreSQL本身不支持任何多主群集解決方案,例如MySQL或Oracle。儘管如此,仍有許多商業和社區產品提供此實現,以及其他產品,例如PostgreSQL的複製或負載平衡。

首先,讓我們回顧一些基本概念:

什麼是高可用性?

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

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

持續恢復

如果發生事件,則必須還原備份,然後應用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創建我們的高可用性環境,但是您必須註意以下幾點:

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

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

考慮到這些要點,您可以找到一種適合您的需求和要求的解決方案,而不會產生麻煩,並且能夠實施您的高可用性群集解決方案。來吧,祝你好運

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過本文,我們使用Python編寫了一個簡單的日曆程式。在Python官方文檔中,我們找到了一個名為"calendar"的模塊,它可以輕鬆實現一個簡易的日曆,滿足基本需求。此外,我們還介紹了Tkinter和PyQt兩個常用的圖形用戶界面庫,以及borax庫和其他一些開源項目來實現更多功能和用戶體驗的... ...
  • wmproxy wmproxy已用Rust實現http/https代理, socks5代理, 反向代理, 負載均衡, 靜態文件伺服器,websocket代理,四層TCP/UDP轉發,內網穿透等,會將實現過程分享出來,感興趣的可以一起造個輪子 項目地址 國內: https://gitee.com/ti ...
  • 1. 我遇到了什麼問題 我在學習springboot,其中在編寫CRUD時發現訪問數據的函數執行下去返回值是null但是其它部分正常。 下麵是我的錯誤代碼 pojo public class Bot { @TableId(type = IdType.AUTO ) private Integer id ...
  • class_1 什麼是介面? 類就是一種公共介面,公眾(public)是使用類的程式,交互系統由類對象組成,而介面由編寫類的人提供的方法組成。介面讓程式員能夠編寫與類對象交互的代碼,從而讓程式能夠使用類對象。例如,要計算 string 對象中包含多少個字元,您無需打開對象,而只需使用string類提 ...
  • 通過編程實現PDF轉PPT的功能,可以自動化轉換過程,減少手動操作的工作量,並根據需要進行批量轉換。將PDF文件轉換為PPT文檔後,可以利用PPT的豐富功能和動畫效果,達到更好的演示效果。 在Java中,我們可以使用第三方庫Spire.PDF for Java來將PDF轉換為PowerPoint文檔 ...
  • “中國資料庫市場已進入關鍵階段,2024年或是分水嶺!” “目前,國內資料庫產品數量接近300款,我們真的需要這麼多資料庫嗎?”面對這個問題,華為雲資料庫業務CTO蘇光牛不假思索地給出了他的見解: “不僅是中國市場,全球範圍內,也不需要如此多的商業資料庫。” 他進一步預測,隨著市場的自然淘汰,未來三 ...
  • 這篇筆記咱主要記錄了Hadoop執行Job時可能出現的 /bin/java: No such file or directory 以及 java.lang.reflect.InaccessibleObjectException 問題。 ...
  • Redis的Java客戶端-Jedis 在Redis官網中提供了各種語言的客戶端,地址:https://redis.io/docs/clients/ 其中Java客戶端也包含很多: 標記為❤的就是推薦使用的java客戶端,包括: Jedis和Lettuce:這兩個主要是提供了Redis命令對應的AP ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...