本頁說明 Memorystore for Valkey 的架構如何提供及支援高可用性 (HA)。本頁面也會說明如何透過我們建議的 HA 設定,提升執行個體效能和穩定性。
高可用性
Memorystore for Valkey 建構於高可用性架構,客戶可直接存取代管的 Memorystore for Valkey 節點。如要連線至個別端點,請按照「連線至 Memorystore for Valkey 執行個體」一文的說明操作。
直接連線至分片可帶來下列好處:
直接連線可避免中繼躍點,盡量縮短用戶端與 Memorystore for Valkey 節點之間的往返時間 (用戶端延遲)。
在叢集模式下,直接連線可避免任何單一故障點,因為每個分片的設計都是獨立故障。舉例來說,如果多個用戶端的流量導致某個時段 (鍵空間區塊) 負載過重,分片故障會將影響限制在負責提供該時段服務的分片。
建議設定
建議您建立高可用性的多區域執行個體,而非單一區域執行個體,因為前者提供的可靠性較高。不過,如果您選擇佈建沒有副本的執行個體,建議您選擇單一可用區執行個體。詳情請參閱「何時該使用單一區域執行個體」。
如要為執行個體啟用高可用性,每個分片都必須至少佈建 1 個副本。您可以在建立執行個體時執行這項操作,也可以將每個分片的副本數量擴充至至少 1 個。在預定維護作業和意外的分片故障期間,副本可提供自動容錯移轉。
建議您按照「用戶端最佳做法」的指引設定用戶端。使用建議的最佳做法,客戶就能自動處理執行個體的下列項目,且不會發生任何停機時間:
- 角色 (自動容錯移轉)
- 端點 (節點更換)
- 已啟用叢集模式的相關運算單元指派異動 (消費者水平擴展和縮減)
備用資源
可用性高的 Memorystore for Valkey 執行個體是區域性資源。Memorystore for Valkey 會將分片的 VM 主機和副本分配到多個可用區,以防範可用區服務中斷。Memorystore for Valkey 支援每個分片 0 到 5 個副本的執行個體。
您可以利用副本提高讀取輸送量,但可能會導致資料過時。
- 已啟用叢集模式:使用
READONLY指令建立連線,讓用戶端從副本讀取資料。 - 叢集模式已停用:連線至讀取器端點,即可連線至任何可用的副本。
已啟用叢集模式的執行個體範例
下圖說明已啟用叢集模式的執行個體範例:
執行個體範例:三個分片,每個分片零個副本

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

執行個體範例,包含三個分片,每個分片有多個副本

已停用叢集模式的執行個體範例
下圖說明已停用叢集模式的執行個體範例:
含有多個副本的執行個體範例

自動容錯移轉
由於維護作業或主要節點發生未預期的故障,分片內可能會發生自動容錯移轉。在容錯移轉期間,副本會升級為主要副本。您可以明確設定副本。服務也可以在內部維護期間暫時佈建額外副本,避免發生任何停機情形。
自動容錯移轉功能可避免在維護更新期間遺失資料。如要進一步瞭解維護期間的自動容錯移轉行為,請參閱「維護期間的自動容錯移轉行為」。
容錯移轉和節點修復時間
如果發生非預期事件 (例如主要節點程序當機或硬體故障),自動容錯移轉可能需要數十秒的時間。在這段期間,系統會偵測到故障,並選取備用資源做為新的主要資源。
服務需要幾分鐘的時間才能更換故障節點,因此節點修復作業可能需要一段時間。所有主要節點和副本節點都適用這項規定。對於非高可用性執行個體 (未佈建副本),修復失敗的主要節點也需要幾分鐘的時間。
非預期容錯移轉期間的用戶端行為
視失敗性質而定,用戶端連線可能會重設。自動復原後,您可以透過指數退避重試連線,避免主要和副本節點過度負載。
使用副本來提高讀取輸送量的用戶端,可能會暫時遇到容量下降的問題,直到系統自動更換失敗的節點為止。
寫入作業遺失
如果發生非預期故障而導致容錯移轉,由於 Valkey 複製通訊協定是異步作業,因此已確認的寫入作業可能會遺失。
用戶端應用程式可以運用 Valkey WAIT 指令,提升實際資料安全性。
單一可用區中斷對鍵空間的影響
本節說明單一可用區中斷對 Memorystore for Valkey 執行個體的影響。
多可用區執行個體
高可用性執行個體:如果某個可用區發生中斷情形,整個鍵空間仍可供讀取和寫入,但由於部分唯讀備用資源無法使用,讀取容量會減少。強烈建議您超量佈建叢集容量,確保執行個體有足夠的讀取容量,以防單一可用區發生罕見的服務中斷事件。中斷結束後,受影響可用區的副本就會還原,叢集的讀取容量也會恢復為設定值。詳情請參閱「可擴充及可靠的應用程式模式」。
非高可用性執行個體 (沒有副本):如果某個可用區發生中斷,在受影響可用區中佈建的部分鍵空間會進行資料排清,且在服務中斷期間無法寫入或讀取資料。中斷結束後,受影響區域中的主要節點會還原,叢集的容量也會恢復為設定值。
單一可用區執行個體
- 高可用性和非高可用性執行個體:如果執行個體佈建所在的可用區發生中斷,叢集將無法使用,且資料會遭到清除。如果其他區域發生服務中斷,叢集仍會繼續處理讀取和寫入要求。
最佳做法
本節說明高可用性和副本的最佳做法。
新增副本
新增副本時,需要 RDB 快照。RDB 快照會使用程序分叉和「寫入時複製」機制,擷取節點資料的快照。視節點的寫入模式而定,節點的已用記憶體會隨著寫入所觸及的頁面複製而增加。記憶體用量最多可達節點中資料大小的兩倍。
為確保節點有足夠的記憶體來完成快照,請將 maxmemory 保留或設為節點容量的 80%,以便預留 20% 的額外空間。除了監控快照之外,這項記憶體負擔也有助於管理工作負載,確保快照作業順利完成。此外,新增副本時,請盡可能降低寫入流量。詳情請參閱「監控執行個體的記憶體用量」。