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