問題簡介
![codis-server/redis主從同步超時](http://p2.ttnews.xyz/loading.gif)
在linux服務器上搭建了codis集群,新增加了一個節點,在操作codis集群進行主從同步的時候,發現key加載到快完成的時候,就停下來了,不繼續加載key到內存了,等一下又在重新全量同步了。(codis-server節點內存使用量比較大)
排查日誌看到如下內容:
主節點日誌:
[12168] 14 Jun 23:47:45.015 # Client id=2527238 addr=X.X.X.X:18890 fd=7 name= age=219 idle=219 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=16347 oll=4151 omem=95590296 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.
從節點日誌:
Connection with master lost
原因分析
redis主從複製一般涉及到兩個變量:
1、codis-server/redis默認配置中repl-timeout的時間為60s,當複製數據的時間超過60s時,codis-server/redis master就會認為連接超時主動斷開連接,也就是Connection with master lost報錯。
2、複製數據佔用服務器資源的大小client-output-buffer-limit參數就決定了客戶端輸出緩衝區內存使用量,默認client-output-buffer-limit slave 256mb 64mb 60
從上面的日誌可以看到scheduled to be closed ASAP for overcoming of output buffer limits. 這個應該是第二個參數影響的。
![codis-server/redis主從同步超時](http://p2.ttnews.xyz/loading.gif)
解決
先查看一下當前變量的
127.0.0.1:7001> config get client-output-buffer-limit
1) "client-output-buffer-limit"
2) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
查看:
127.0.0.1:7001> config get client-output-buffer-limit
動態修改:
127.0.0.1:7001> config set client-output-buffer-limit "slave 536870912 134217728 120"
默認:
127.0.0.1:7001> config get client-output-buffer-limit "slave 268435456 67108864 60"
注意:當數據同步完成後最好將配置修改為原配置,避免佔用服務器資源過高引起其他問題,特別注意內存的使用量。
如果是要永久生效在配置文件添加以下內容:
client-output-buffer-limit slave 268435456 67108864 60
閱讀更多 linux運維菜 的文章