遇到的問題及說明
在一個生產項目中redis采用sentinel集群,在一次故障主從切換后,主從同步一直存在異常,在日志中發現有這樣一條日志,不停的刷新。
在主從切換時,主庫會進行rdb文件備份,備份完成后傳給從庫,從庫load接收的文件。這期間主庫的情況會存在一個復制積壓緩存區中,等從庫load完成后,主庫把數據發給從庫
上面的錯誤是在這個過程中積壓緩存區寫滿,導致主庫斷掉從庫連接,同步失敗;從庫發現失敗后又重新支持slaveof;從而導致不停的斷開,重連。
解決辦法
解決辦法是修改 client-output-buffer-limit,在redis配置文件中默認配置是client-output-buffer-limit slave 256mb 64mb 60,對於訪問量很大或存儲數據很多redis服務,這個設置太小了,需要調大或直接取消限制
登入master執行命令:config set client-output-buffer-limit 'slave 0 0 0' //取消限制
然后執行 config rewrite 將改動保存到redis配置文件
然后在修改slave的配置,避免再次故障切換出現同樣的問題