高可用性和資料復原能力

選取說明文件版本:

本頁說明高可用性,以及建議使用的工具。

關於資料復原能力

您可以從可用性、服務還原時間和資料遺失等角度,瞭解資料復原能力。可用性通常以運作時間衡量,並以資料庫可用時間的百分比表示。舉例來說,如要達到 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 會使用 etcdConsulZookeeper 等各種分散式共識系統,協調及管理叢集狀態。Patroni 的主要功能和元件包括高可用性、自動容錯移轉、領導者選舉、複製和復原。Patroni 會在資料庫伺服器執行個體上與 PostgreSQL 服務並行運作,管理執行個體的健康狀態、容錯移轉和複製作業,確保高可用性和可靠性。

Patroni 會使用分散式共識系統儲存中繼資料,並管理叢集。在本指南中,我們使用名為 etcd 的分散式設定儲存區 (DCS)。etcd 的用途之一是儲存及擷取分散式系統資訊,例如設定、健康狀態和目前狀態,確保所有節點的設定一致。

高可用性 Proxy (HAProxy) 是一種開放原始碼軟體,用於負載平衡及 Proxy TCP 和 HTTP 型應用程式,可將傳入的要求分散至多部伺服器,藉此提升網頁應用程式的效能和可靠性。HAProxy 會將網路流量分散到多個伺服器,提供負載平衡功能。HAProxy 也會執行健康狀態檢查,維護所連線後端伺服器的健康狀態。如果伺服器未通過健康狀態檢查,HAProxy 會停止將流量傳送至該伺服器,直到伺服器再次通過健康狀態檢查為止。

同步和非同步複製的注意事項

在 Patroni 管理的 PostgreSQL 叢集中,可以同步和非同步模式設定複製功能。根據預設,Patroni 會使用非同步串流複製。如果 RPO 規定嚴格,建議使用同步複製。

PostgreSQL 中的同步複製功能會等待交易寫入主要執行個體和至少一個同步待命執行個體,然後再進行提交,確保資料一致性。同步複製可確保主要資料庫發生故障時,資料不會遺失,並提供高強度的資料耐久性和一致性。主要執行個體會等待同步待命執行個體傳送確認訊息,這可能會導致延遲時間變長,且由於來回時間增加,總處理量可能也會降低。這可能會降低整體系統輸送量,尤其是在高負載的情況下。

非同步複製功能可讓主要叢集上的交易完成,不必等待待命叢集確認。主要伺服器會將 WAL 記錄傳送至備用伺服器,後者會以非同步方式套用這些記錄。這種非同步做法可縮短寫入延遲時間並提升效能,但如果主要執行個體在待命執行個體趕上進度前發生故障,可能會導致資料遺失。備用資料庫可能落後於主要資料庫,導致容錯移轉期間可能出現不一致的情況。

在 Patroni 叢集中選擇同步或非同步複製模式,取決於資料耐用性、一致性和效能的具體需求。在資料完整性和資料損失極小的情況下,建議使用同步複製;如果環境優先考量效能和較低的延遲時間,則適合使用非同步複製。您可以設定混合式解決方案,包括在同一地區但不同鄰近區域或資料中心,建立具有同步待命的三節點叢集,並在不同地區或更遠的資料中心建立第二個非同步待命叢集,以防範潛在的區域服務中斷。

後續步驟