問題描述
Azure Redis 出現連接配接失敗,過一會兒後,又能自動恢複。
問題解答
其實,因為Azure Redis服務一直都有更新維護的操作(平均每月一次),Redis服務更新是平台自動進行的計劃内的維護更新行為,一般用戶端都有重試機制,是不會影響應用。
故障轉移發生的情況有:
- 系統更新,例如 Redis 修補或 OS 更新。
- 管理操作,例如縮放和重新啟動。
由于節點會提前收到更新通知,是以它們可以協作交換角色,并在更改後快速更新負載均衡器。 計劃性故障轉移通常可在 1 秒内完成。對應用側的影響主要是所有的連接配接都需要重建立立,在用戶端SDK的重試機制觸發前,會出現以下幾類的異常:
- 逾時異常
- 連接配接異常
- 套接字異常
異常的數目和類型取決于當緩存關閉其連接配接時,請求在代碼路徑中所處的位置。 例如,在發生故障轉移時發送了請求但未收到響應的操作可能會收到逾時異常。 對關閉的連接配接對象發出的新請求将收到連接配接異常,直到重新連接配接成功為止。
大多數用戶端庫會嘗試重新連接配接到緩存(如果采用此配置)。 但是,不可預測的 bug 偶爾會将庫對象置于不可恢複狀态。 如果出錯的持續時間超過了預先配置的時間,則應重新建立連接配接對象。
但是為了更進一步的減少更新維護對Redis的正常業務的影響,可以配置更新視窗然更新發生在業務空閑期,詳細參考:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-administration#schedule-updates
參考資料
計劃更新 :https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-administration#schedule-updates
故障轉移 :https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-failover
Redis重試 :https://docs.microsoft.com/zh-cn/azure/architecture/best-practices/retry-service-specific#azure-cache-for-redis 和 https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices#client-library-specific-guidance