高可用性和複本

本頁面說明 Memorystore for Valkey 的架構如何提供及支援高可用性 (HA)。此外,本頁面也會說明如何透過我們建議的高可用性設定,提升執行個體效能和穩定性。

高可用性

Memorystore for Valkey 採用高可用性架構,用戶端可直接存取代管的 Memorystore for Valkey 節點。用戶端會連線至個別端點,如「連線至 Memorystore for Valkey 執行個體」一文所述。

直接連線至 shard 有下列好處:

  • 直接連線可避免中繼躍點,盡可能縮短用戶端與 Memorystore for Valkey 節點之間的封包往返時間 (用戶端延遲時間)。

  • 在叢集模式啟用時,直接連線可避免任何單點故障,因為每個 shard 都設計為獨立故障。舉例來說,如果多個用戶端的流量導致某個運算單元 (鍵空間區塊) 超載,shard 故障會將影響限制在負責提供該運算單元的 shard。

建議您建立高可用性的多可用區執行個體,而非單一可用區執行個體,因為前者可靠性較高。不過,如果您選擇佈建不含副本的執行個體,建議您選擇單一可用區執行個體。詳情請參閱「何時應使用單一可用區執行個體」。

如要為執行個體啟用高可用性,您必須為每個 shard 佈建至少 1 個副本。您可以在建立執行個體時執行這項操作,也可以調整副本數量,讓每個 shard 至少有 1 個副本。在預定維護和非預期的 shard 故障期間,副本會提供自動容錯移轉功能。

建議您按照「用戶端最佳做法」中的指引設定用戶端。採用建議的最佳做法,可讓用戶端自動處理執行個體的下列項目,且不會造成任何停機時間:

  • 角色 (自動容錯移轉)
  • 端點 (節點替換)
  • 已啟用叢集模式相關的運算單元指派變更 (用戶水平擴展和縮減)

備用資源

高可用性的 Memorystore for Valkey 執行個體是區域性資源。Memorystore for Valkey 會將 shard 的主要和副本 VM 分布在多個可用區,防範可用區中斷。Memorystore for Valkey 支援每個 shard 有 0 到 5 個副本的執行個體。

您可以使用副本提高讀取處理量,但資料可能會過時。

  • 已啟用叢集模式:使用 READONLY 指令建立連線,讓用戶端從副本讀取資料。
  • 停用叢集模式:連線至讀取器端點,即可連線至任何可用的副本。

已啟用叢集模式的執行個體範例

下圖為已啟用叢集模式的執行個體範例:

執行個體範例:三個 shard,每個 shard 有零個副本

已啟用叢集模式的 Memorystore for Valkey 執行個體,每個 shard 沒有副本,節點平均分配至三個可用區。

執行個體範例:三個 shard,每個 shard 有一個副本

Memorystore for Valkey 叢集模式已啟用執行個體,每個 shard 有一個副本,節點平均分配至三個可用區。

執行個體範例:三個 shard,每個 shard 有多個副本

Memorystore for Valkey 叢集模式已啟用執行個體,每個 shard 有多個副本,節點平均分配至三個可用區。

已停用叢集模式的執行個體範例

下圖為已停用叢集模式的執行個體範例:

有多個副本的執行個體範例

Memorystore for Valkey 叢集模式停用執行個體,有多個副本和節點平均分配到三個可用區。

容錯移轉對應用程式的影響

Memorystore for Valkey 將副本升級為主要執行個體時,會捨棄與執行個體主要端點的現有連線。在自動修復和維護事件期間,執行個體平均有 30 秒無法使用。

執行個體可用後,Memorystore for Valkey 會使用相同的連線字串或 IP 位址,自動將應用程式重新導向至新的主要執行個體。您不必更新應用程式。

容錯移轉期間,如果與讀取端點有連線,Memorystore for Valkey 會中斷與副本的連線,並將副本升級為主要執行個體。不過,Memorystore for Valkey 不會中斷與其他副本的連線。容錯移轉完成且新的副本可用後,Memorystore for Valkey 會將連線重新導向至新的副本。

自動容錯移轉

如果主要節點維護或發生非預期故障,shard 內可能會自動容錯移轉。容錯移轉期間,副本會升級為主要執行個體。您可以明確設定副本。這項服務也可以在內部維護期間暫時佈建額外副本,避免停機。

自動容錯移轉功能可避免在維護更新期間遺失資料。如要進一步瞭解維護期間的自動容錯移轉行為,請參閱「維護期間的自動容錯移轉行為」。

容錯移轉和節點修復時間長度

發生非預期事件 (例如主要節點程序異常終止或硬體故障) 時,自動容錯移轉可能需要數十秒的時間。在這段期間,系統會偵測到故障,並選取副本做為新的主要執行個體。

節點修復作業可能需要幾分鐘的時間,服務才能更換故障的節點。所有主要和副本節點都是如此。如果執行個體並非高可用性 (未佈建副本),修復故障的主要節點也需要幾分鐘的時間。

非預定容錯移轉期間的用戶端行為

視故障性質而定,用戶端連線可能會重設。自動復原後,您可以使用指數輪詢重試連線,避免主要和副本節點超載。

如果用戶端使用副本來提高讀取處理量,在故障節點自動更換前,容量可能會暫時降低。

寫入作業遺失

如果因非預期故障而進行容錯移轉,由於 Valkey 複製通訊協定採用非同步機制,已確認的寫入作業可能會遺失。

用戶端應用程式可運用 Valkey WAIT 指令,提升實際資料安全性。

單一可用區中斷對鍵空間的影響

本節說明單一可用區中斷對 Memorystore for Valkey 執行個體的影響。

多可用區執行個體

  • 高可用性執行個體:如果某個可用區發生中斷,整個鍵空間仍可進行讀取和寫入作業,但由於部分唯讀副本無法使用,讀取容量會減少。強烈建議您過度佈建叢集容量,確保執行個體有足夠的讀取能力,因應單一可用區極少發生的中斷情形。服務中斷結束後,受影響可用區中的副本會還原,叢集的讀取容量也會恢復為設定值。詳情請參閱「可擴充及可靠的應用程式模式」。

  • 非高可用性執行個體 (無副本):如果可用區發生中斷,在受影響可用區中佈建的部分鍵空間會清除資料,且在中斷期間無法寫入或讀取。服務中斷結束後,受影響可用區中的主要執行個體會還原,叢集容量也會恢復為設定值。

單一可用區執行個體

  • 高可用性和非高可用性執行個體:如果佈建執行個體的可用區發生中斷,叢集將無法使用,資料也會清除。如果其他可用區發生服務中斷,叢集會繼續處理讀取和寫入要求。

最佳做法

本節說明高可用性和副本的最佳做法。

新增副本

新增副本時,必須提供 RDB 快照。RDB 快照會使用程序分支和「寫入時複製」機制,擷取節點資料的快照。視寫入節點的模式而定,節點的已用記憶體會隨著寫入作業觸及的頁面複製而增加。記憶體用量最多可達節點中資料大小的兩倍。

為確保節點有足夠的記憶體來完成快照,請將 maxmemory 保持或設為節點容量的 80%,預留 20% 做為系統資源。除了監控快照之外,這項記憶體負擔也有助於管理工作負載,確保快照成功。此外,新增副本時,請盡可能降低寫入流量。詳情請參閱「監控執行個體的記憶體用量」。