天天看點

【Azure Redis 緩存】當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析

問題描述

當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析

問題分析

1.   關于 Moved 問題,原因有可能是記憶體碎片整理,進而引起Redis發生failover。

2.   記憶體碎片多數情況是由于key值較大導緻的,同時記憶體使用率較高也會影響記憶體碎片,從可以根據Redis的Memory名額判斷(Used memory RSS比Used memory高不少),由于記憶體碎片會降低Redis的可用性以及Redis本身記憶體的不足,是以服務端會在碎片率較大的時候選擇整理,該動作會導緻failover,而此時用戶端就會有moved的報錯,原因在于切換前的master被關閉,發生failover。

3.  在Redis進行縮放操作(scale out) 期間,用戶端也會出現Moved異常。

4.  關于timeout,可以從慢指令(slowlog)中發現執行逾時的均為eval執行lua腳本時逾時。執行eval通常是在事務中執行,且從堆棧上看出執行了exists指令,目的是否是為了加分布式鎖呢?由于這個指令時間複雜度為O(N),是以建議使用 SCAN 代替該操作。

5.  當記憶體使用率較高的情況,可以參考以下幾個:

  • 減小redis中存儲的值的大小,文檔中建議在100kb以下:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices-memory-management#configure-your-maxmemory-reserved-setting
  • 增加分片數量 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-clustering#change-the-cluster-size-on-a-running-premium-cache
  • 提升定價層 :https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-scale

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀