標籤:
Redis記憶體配置大小要求
配置redis時,記憶體不宜超過機器總記憶體的50%,否則寫RDB檔案時會導致機器總記憶體不足,從而進行IO等待,使redis訪問速度驟降
maxmemory 12gb
設定redis總記憶體為機器總記憶體的50%,且當redis進程佔用記憶體超過機器記憶體的40%時進行警示,此時需要遷移資料
Redis資料較大時,主從同步失敗
當redis資料較大時,RDB檔案有好幾個G,第一次主從同步時會傳輸整個RDB檔案並載入到記憶體中,資料較大時會導致slave還沒同步完,已經逾時。此時主從之間會再次進行同步,迴圈失敗。需修改相關參數
repl-ping-slave-period 10
repl-timeout 600
client-output-buffer-limit slave 768mb 512mb 600
Redis記憶體較大時,bgsave失敗後整個Redis不可寫
配置中有選項,gbsave失敗時不讓寫,該配置應該設定為no
stop-writes-on-bgsave-error no
slave-serve-stale-data yes
Redis中啟動了bgsave進程,且殺不死
設定no-appendfsync-on-rewrite 為yes,再殺死
通過redis-cli進入,然後 config set no-appendfsync-on-rewrite yes
如果是有slave進行同步,則要先關閉slave,然後再殺進程
Redis最好運行在內網中(可信任環境)
bind 127.0.0.1
Redis持久化流程相關內容
Rdb備份
主redis禁用rdb備份,啟用aof,且aof重寫時間設定長點(也可以自己禁用aof,當主出問題時自動切換從)
遷移中若proxy無響應
網路不好時,遷移slot時可能導致proxy無響應,此時需重啟沒有響應的proxy,否則可能導致proxy還去以前的slot找key,找不到
Redis進程佔用記憶體已經超過總記憶體的70%
此 時如果有salve與master進行第一次全同步,可能導致master機器記憶體不足,從swap讀取資料,IO等待導致master處理量驟降,此時 需要啟動一台新機器,然後將master中的資料移轉到新機器上,直至遷完,然後將該機器down掉重啟,按照ReID是記憶體配置要求重新設定啟動,再加 入到組中,把其他機器的資料移轉過去。
Redis進程佔用記憶體不減少
Redis佔用記憶體沒有超過配置中的最大記憶體數,如果不DEL key,其記憶體不會減少,即使HDEL 或者 遷移,記憶體仍然不會變
Codis進行遷移時slot遷移完成卻更新slot狀態到zk失敗
Codis 進行遷移時,如果發生情況:遷移某個slot時,key已經遷移完成,但是更新slot狀態到zk時失敗,會導致訪問proxy時落到這個slot的資料 都找不到。原因是proxy不知道該slot已經遷移完成,當外部存取時,還會要求從源redis中遷移key到現在的redis中,此時如果源 redis給proxy返回錯誤,則proxy直接退出該次請求。
Redis進行主從全同步時,禁止寫磁碟
Redis進行主從同步時,預設會寫rdb檔案到本地,如果此時記憶體不足,會使redis IO等待導致處理速度驟降。可以通過禁用寫磁碟操作,環境IO等待,配置如下
repl-diskless-sync yes
redis線上問題及解決方案