前几天,在修改一台从节点的redis的监听端口后,重启了下redis,发现master_link_status:很长时间一直都是down状态。
查看了redis日志,发现日志里出现很多的“I/O error trying to sync with MASTER:connection lost'”
百度了下,发现是client-output-buffer-limit slave这个参数配置不当造成的。
网上找到的相关说明:
# 这个参数太小的话,错误日志会显示I/O error trying to sync withMASTER: connection lost'
# 这是说负责发数据给slave的client,如果buffer超过256m或者连续60秒超过64m,就会被立刻强行关闭!!! Traffic大的话一定要设大一点。否则就会出现一个很悲剧的循环,Master传输一个大的RDB给Slave,Slave努力的装载,但还没装载完,Master对client的缓存满了,再来一次。
解决方法:
# redis-cli -a 'xxxxxxx' 密码方式连接到redis服务器
> config set client-output-buffer-limit slave 1024mb 256mb 0 这样动态修改下参数即可,省的重启redis,造成数据再次同步。
稍等片刻,执行 > info replication
如果master_link_status变成up了,说明我们的配置生效了。
然后,还要去修改下redis.conf里面的设置,免得重启redis后,修改的client-output-buffer-limit 配置丢失。