前几天,在修改一台从节点的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 配置丢失。