記一次redis主從同步失敗


zabbix告警突然從某個時間點開始提示CPU使用高,網卡流量也一直居高不下。

首先查看redis日志,發現告警時間點redis主節點被重啟了,發生了主備切換,並且在日志中發現這么一段

[3081] 06 Dec 02:33:28.090 # Client addr=****:35810 fd=122 name= age=88 idle=88 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=16299 oll=3041 omem=79211304 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.
[3081] 06 Dec 02:33:28.090 # Connection with slave *****:6379 lost.

scheduled to be closed ASAP for overcoming of output buffer limits意思是:psync的命令超過了output-buffer-limits,master主動關閉了slave的連接。然后slave被斷開了和master的連接,然后slave又重新找master請求同步,然后就陷入了惡性循環,slave找master做全同步的過程是一個很消耗cpu消耗io消耗帶寬的過程,所以會一直持續的告警。

output-buffer-limits這個參數的作用是:當客戶端來獲取數據的時候,數據會被保存在output-buffer中,等信息傳輸完后output-buffer中的數據會被清理掉,redis對output-buffer做了限制。

這個時候問題根源已經找到,就是主備切換以后要同步的數據過大,超出了output-buffer-limits這個參數設置的值,所以數據同步一直失敗。

解決辦法:

在master節點執行redis-cli config set client-output-buffer-limit slave '2147483648 1073741824 300',放大這個限制,當然這個參數里面的3個數字需要根據自己的系統實際情況來定。

redis-cli  config rewrite -這個命令是將變更的配置落地到配置文件的,即使redis再次重啟,這個變更也不會失效。這部可執行可不執行。

2147483648 -是一個硬性限制,當output-buffer的大小大於2147483648之后就會斷開連接

1073741824 300 -是一個軟限制,當output-buffer的大小大於1073741824並且超過了300秒的時候就會斷開連接

注意:執行完這個命令機器的cpu和內存都會有一定的上漲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM