我想在 Amazon ElastiCache for Redis 擴展時最大限度地減少停機時間。
解決方法
為了協助最大程度地減少停機時間,請檢閱下列動作並檢查設定和維護程序:
- 為了將同步期間的停機時間降至最低,請避免在工作負載高時擴展。如果叢集的工作負載高,且擴展需要很長時間,請減少傳入至 Redis 的請求,以防止同步處理失敗。如果發生同步處理,請檢查 Amazon CloudWatch 中的 SaveInProgress 指標,以確定發生同步處理的時間。請注意,SaveInProgress 指標每分鐘收集資料,並且可能無法擷取在一分鐘內完成的同步處理。如需詳細資訊,請參閱透過使用 Amazon CloudWatch 的Amazon ElastiCache for Redis 進行監控最佳做法。
- 若要識別連線到叢集時由用戶端設定錯誤引起的問題,請在非生產環境中測試縮減。根據擴展類型,可能會在擴展期間新增節點、移除節點或者變更節點 IP 位址。ElastiCache for Redis 提供不同類型的連線端點來連線到叢集,因此選擇的連線端點類型取決於應用程式要求。
- 設定 Redis 用戶端或應用程式代碼,以在其他複本上重試查詢,或將查詢傳送至主要應用程式代碼。如果用戶端連線到正在同步處理程序中的新複本,則 LOADING: Redis is loading the dataset in memory 錯誤會出現。載入資料集所需的時間取決於節點的資料大小和效能。為確定這是否是問題,請在非生產環境中進行測試。
- 設定叢集自動擴展。自動擴展可防止傳入工作負載突然增加所造成的效能問題。如需詳細資訊,請參閱自動擴展 ElastiCache for Redis 叢集。
對於已關閉叢集模式的 Redis 叢集,請檢閱下列動作並檢查您的設定和維護程序:
- 對於縮減,如果您的應用程式只使用主要端點來連線,則移除複本節點時不會發生停機時間。如果您的應用程式使用讀取器或個別端點連線到該複本節點,則原始連線會中斷。當原始連線中斷時,必須建立新的 TCP 連線。應用程式還必須執行 DNS 查詢,以避免連線到已移除的複本節點。如果用戶端使用讀取器端點,則可能會因讀取器端點的 DNS 傳輸而導致停機時間。
- 若要橫向擴充,請確定在工作負載最小時擴展,以避免同步處理造成的停機時間。
- 對於節點類型變更,高工作負載可能會導致同步處理失敗。此外,您的應用程式可能需要在主要或讀取器端點上執行 DNS 查詢,以建立與新節點的新連線。DNS 傳輸需要幾秒鐘,且在用戶端到達新節點之前可能會發生服務中斷。對於 Redis 5.0.5 或更新版本,中斷將最小化。升級到新的 Redis 版本以最佳化 ElastiCache 是最佳做法。
對於已開啟叢集模式的 Redis 叢集,請檢閱下列動作並檢查您的設定和維護程序:
- 若要在擴展期間減少或避免停機時間,請參閱 Redis 叢集用戶端探索和指數退避。
- 為協助在縮減時減少停機時間,請參閱線上叢集調整大小。為了將效能問題降至最少,請逐步擴展。在進一步縮減之前,請務必在初始縮減之後檢查叢集在高峰時間的效能。
- 為協助在擴展時減少停機時間,請參閱線上叢集調整大小。
- 發生節點類型變更時,高工作負載可能會導致同步處理失敗。此外,新節點 IP 位址可能與舊節點不同。為確定 IP 位址,您的應用程式可以使用 cluster nodes 或 cluster slots 命令從叢集取得更新的資訊。支援 Redis 叢集的 Redis 用戶端可更新叢集拓樸。若要設定 Redis 用戶端,請參閱特定用戶端類型的文件。
- 變更複本數目時,請確保在新增其他複本節點之前先檢查主節點的效能。當複本節點數減少且用戶端必須讀取已移除的複本節點時,請求會傳送到新的複本節點。此外,為了防止向移除節點發出請求,用戶端必須更新叢集拓樸。
相關資訊
複寫: Redis (叢集模式停用) 與Redis (叢集模式啟用)
尋找節點端點
擴展 ElastiCache for Redis
確保您有足夠的記憶體來建立 Redis 快照
Redis 用戶端最佳做法