高可用性和複本

本頁說明 Memorystore for Redis Cluster 架構如何提供及支援高可用性 (HA)。本頁面也會說明如何透過我們建議的 HA 設定,提升叢集效能和穩定性。

如要進一步瞭解特定區域的注意事項,請參閱「地理位置與區域」一文。

高可用性

Memorystore for Redis Cluster 建構於高可用性架構,客戶可直接存取受管理的 Memorystore for Redis Cluster VM。如「連線至 Memorystore for Redis Cluster 執行個體」一文所述,用戶端會連線至個別分片網路位址,藉此執行這項操作。

直接連線至分片有下列好處:

  • 直接連線可避免任何單點故障,因為每個分片的設計都是獨立故障。舉例來說,如果多個用戶端的流量導致某個時段 (鍵空間區塊) 負載過重,分片故障會將影響限制在負責提供該時段服務的分片。

  • 直接連線可避免中繼躍點,將用戶端與 Redis VM 之間的封包往返時間 (用戶端延遲) 降至最低。

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

如要為執行個體啟用高可用性,每個分片都必須至少佈建 1 個副本。您可以在建立執行個體時執行這項操作,也可以將每個分片的副本數量擴充至至少 1 個。在預定維護作業和意外的分片故障期間,副本可提供自動容錯移轉。

建議您按照「Redis 用戶端最佳做法」的指引設定用戶端。使用建議的最佳做法,可讓 OSS Redis 用戶端自動且順暢地處理叢集的角色 (自動容錯移轉) 和時段指派變更 (節點更換、消費者水平擴展/縮減),且不會發生任何停機情形。

備用資源

可用性高的 Memorystore for Redis Cluster 執行個體是區域性資源。也就是說,資料分割的主要和備用 VM 會分散到多個可用區,以防可用區發生服務中斷。Memorystore for Redis Cluster 支援每個分片 0 到 5 個副本的執行個體。

您可以透過調整讀取作業的規模,使用副本提高讀取輸送量。 如要執行這項操作,您必須使用 READONLY 指令建立連線,讓用戶端從副本讀取資料。如要進一步瞭解如何從副本讀取資料,請參閱「使用 Redis 叢集進行擴充」。

每個分片有 0 個副本的叢集範例

Memorystore Cluster for Redis 執行個體,每個分片沒有副本,節點平均分配在三個區域。

叢集範例,每個分片有 1 個副本

每個分片有一個副本,節點平均分配在三個區域的 Memorystore Cluster for Redis 執行個體。

叢集範例,每個分片有多個副本

每個分片有多個副本,且節點平均分配在三個可用區的 Memorystore Cluster for Redis 執行個體。

自動容錯移轉

由於維護作業或主要節點發生未預期的故障,分片內可能會發生自動容錯移轉。在容錯移轉期間,副本會升級為主要副本。您可以明確設定副本。服務也可以在內部維護期間暫時佈建額外副本,避免發生任何停機情形。

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

容錯移轉和節點修復時間

如果發生非預期事件 (例如主要節點程序當機或硬體故障),自動容錯移轉可能需要數十秒的時間。在這段期間,系統會偵測到故障,並選取備用資源做為新的主要資源。

服務需要幾分鐘的時間才能更換故障節點,因此節點修復作業可能需要一段時間。所有主要節點和副本節點都適用這項規定。對於非高可用性執行個體 (未佈建副本),修復失敗的主要節點也需要幾分鐘的時間。

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

視失敗性質而定,用戶端連線可能會重設。自動復原後,您可以透過指數退避重試連線,避免主要和副本節點過度負載。

使用副本來提高讀取輸送量的用戶端,可能會暫時遇到容量下降的問題,直到系統自動更換失敗的節點為止。

寫入作業遺失

如果發生非預期故障而導致容錯移轉,由於 Redis 複製通訊協定為非同步,因此已確認的寫入作業可能會遺失。

用戶端應用程式可以運用 Redis WAIT 指令,提升實際資料安全性。這項方法會盡量提供最佳結果,但如 Redis WAIT 指令文件所述,這項方法也有缺點。

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

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

多可用區執行個體

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

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

單一可用區執行個體

  • 高可用性和非高可用性執行個體:如果執行個體佈建所在的可用區發生中斷,叢集將無法使用,且資料會遭到清除。如果其他區域發生服務中斷,叢集仍會繼續處理讀取和寫入要求。服務中斷結束後,叢集的設定容量就會還原。

最佳做法

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

新增副本

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

為確保節點有足夠的記憶體來完成快照,請將 maxmemory 保留或設為節點容量的 80%,以便預留 20% 的額外空間。除了監控快照之外,這項記憶體負擔也有助於管理工作負載,確保快照作業順利完成。此外,新增副本時,請盡可能降低寫入流量。詳情請參閱「監控寫入負載高的叢集」。