本頁說明高可用性,以及建議使用的工具。
關於資料復原力
您可以從可用性、服務還原時間和資料遺失量等角度,瞭解資料復原能力。可用性通常以正常運作時間來衡量,並以資料庫可用時間的百分比表示。舉例來說,如要達到 99.99% 的可用性,資料庫每年停機時間不得超過 52.6 分鐘,或每月不得超過 4.38 分鐘。中斷後服務還原時間稱為復原時間目標 (RTO)。中斷期間可接受的資料遺失量稱為復原點目標 (RPO),並以交易遺失時間量表示。舉例來說,RPO 為 10 分鐘表示發生故障時,您最多可能會遺失 10 分鐘的資料。
通常會一併設定可用性目標或服務等級目標 (SLO),以及 RTO 和 RPO 目標。舉例來說,針對特定工作負載,您可能會將 SLO 設為 99.99%,並要求 RPO 為 0,也就是在發生任何故障時不得遺失資料,且 RTO 為 30 秒。針對另一個工作負載,您可能會將 SLO 設為 99.9%,RPO 設為 5 分鐘,RTO 設為 10 分鐘。
您可以透過資料庫備份,實作基本的資料庫復原機制。 AlloyDB Omni 支援使用 pgBackRest 進行備份,並封存資料庫的預先寫入記錄 (WAL) 檔案,盡量減少資料遺失。採用這種做法時,如果主要資料庫發生故障,可以從備份還原,RPO 為數分鐘,RTO 則為數分鐘到數小時,視資料庫大小而定。
如要滿足更嚴格的 RPO 和 RTO 需求,您可以使用 Patroni,以高可用性設定部署 AlloyDB Omni。在這個架構中,有一個主要資料庫和兩個待命或備用資料庫。您可以設定 AlloyDB Omni 使用標準 PostgreSQL 串流複寫,確保主要資料庫上提交的每筆交易,都會同步複寫到兩個待命資料庫。這可提供零 RPO,且在大多數失敗情境中,RTO 不超過 60 秒。
視叢集設定而定,同步複製可能會影響交易的回應時間,您可以選擇承擔少量資料遺失的風險。舉例來說,您可以透過非同步複製功能實作高可用性,而非同步,這樣就能以非零 RPO 為代價,換取較低的交易延遲。由於同步複寫可能會影響交易延遲,因此高可用性架構幾乎一律在單一資料中心內實作,或是在相近的資料中心之間實作 (相距數十公里/延遲時間差 <10 毫秒)。不過請注意,本文件預設使用同步複製功能。
為進行災難復原 (防範資料中心或區域 (多個資料中心彼此靠近) 發生故障),您可以設定 AlloyDB Omni,從主要區域到次要區域進行非同步串流複製。這兩個區域通常相距數百或數千公里,或延遲時間為數十到數百毫秒。在這種設定中,主要區域會設定區域內主要和待命資料庫之間的同步串流複製,並從主要區域到一或多個次要區域設定非同步串流複製。您可以在次要區域中設定 AlloyDB Omni,並使用多個資料庫執行個體,確保在從主要區域容錯移轉後,系統能立即受到保護。
高可用性的運作方式
實作資料庫高可用性的具體技術和工具,會因資料庫管理系統而異。以下是實作資料庫高可用性時通常會用到的技術和工具,但會因資料庫管理系統而異:
備援:跨多部伺服器或地理區域複製資料庫,可在主要執行個體故障時提供容錯移轉選項。
自動容錯移轉:偵測故障並順暢切換至正常複本的機制,可將停機時間降至最低。查詢會經過路徑設定,確保應用程式要求送達新的主要節點。
資料連續性:我們實施保護措施,確保資料在發生故障時仍維持完整。包括複製技術和資料一致性檢查。
叢集:叢集會將多個資料庫伺服器分組,共同運作成為單一系統。這樣一來,叢集中的所有節點都會處於啟用狀態並處理要求,進而提供負載平衡和備援功能。
回溯:使用容錯移轉前的主要節點和副本節點,以原始容量回溯至原始架構的方法。
負載平衡:將資料庫要求分配到多個執行個體,可提升效能並處理增加的流量。
監控和快訊:監控工具會偵測伺服器故障、高延遲、資源耗盡等問題,並觸發快訊或自動容錯移轉程序。
備份與還原:如果資料損毀或發生災難性故障,可以使用備份將資料庫還原至先前的狀態。
連線集區 (選用):可最佳化與資料庫互動的應用程式效能和擴充性。
高可用性工具
Patroni 是 PostgreSQL 資料庫的開放原始碼叢集管理工具,專門用於管理及自動化 PostgreSQL 叢集的高可用性。Patroni 使用各種分散式共識系統 (例如 etcd、Consul 或 Zookeeper) 協調及管理叢集狀態。Patroni 的一些主要功能和元件包括高可用性 (具備自動容錯移轉功能)、領導者選舉、複製和復原。Patroni 會在資料庫伺服器執行個體上與 PostgreSQL 服務並行執行,管理健康狀態、容錯移轉和複製作業,確保高可用性和可靠性。
Patroni 會使用分散式共識系統儲存中繼資料,並管理叢集。本指南使用名為 etcd 的分散式設定儲存區 (DCS)。etcd 的用途之一是儲存及擷取分散式系統資訊,例如設定、健康狀態和目前狀態,確保所有節點的設定一致。
高可用性 Proxy (HAProxy) 是一種開放原始碼軟體,用於負載平衡,以及 Proxy TCP 和 HTTP 型應用程式,可將傳入的要求分配到多部伺服器,藉此提升網路應用程式的效能和可靠性。HAProxy 會將網路流量分配到多部伺服器,藉此提供負載平衡功能。HAProxy 也會執行健康狀態檢查,維護所連線後端伺服器的健康狀態。如果伺服器未通過健康狀態檢查,HAProxy 會停止將流量傳送至該伺服器,直到伺服器再次通過健康狀態檢查為止。
同步和非同步複製的注意事項
在 Patroni 管理的 PostgreSQL 叢集中,複製功能可以設定為同步和非同步模式。根據預設,Patroni 會使用非同步串流複製。如要嚴格遵守復原點目標 (RPO) 規定,建議使用同步複製。
PostgreSQL 中的同步複製功能會等待交易寫入主要執行個體和至少一個同步待命執行個體,然後再進行提交,確保資料一致性。同步複製可確保主要資料庫發生故障時,資料不會遺失,並提供強大的資料耐久性和一致性。主要執行個體會等待同步待命執行個體傳送確認訊息,這可能會導致延遲時間變長,且封包往返時間增加,總處理量可能因此降低。這可能會降低整體系統處理量,尤其是在高負載的情況下。
非同步複製模式可讓主要叢集提交交易,不必等待待命叢集確認。主要叢集會將 WAL 記錄傳送至待命叢集,後者會非同步套用這些記錄。這種非同步做法可縮短寫入延遲時間並提升效能,但如果主要叢集在待命叢集趕上進度前發生故障,可能會導致資料遺失。待命叢集可能會落後主要叢集,導致容錯移轉期間可能出現不一致的情況。
在 Patroni 叢集中選擇同步或非同步複製模式,取決於資料耐用性、一致性和效能的具體需求。如果資料完整性和資料遺失程度是關鍵考量,建議使用同步複製模式;如果效能和較低的延遲時間是優先考量,則適合使用非同步複製模式。您可以設定混合式解決方案,在同一區域但不同鄰近可用區或資料中心,建立具有同步待命節點的三節點叢集,並在不同區域或更遠的資料中心建立第二個非同步待命節點,以防範區域性服務中斷。