侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Redis从机异常,报“I/O error trying to sync with MASTER: connection lost”

2023-09-23 星期六 / 0 评论 / 0 点赞 / 53 阅读 / 3203 字

异常现象 在从机看到redis运行状态异常,这个监控项是通过在从机“/usr/local/redis/bin/redis-cli -p 8899 ping”来判断客户端和服务端连接是否正常,若返回P

异常现象

在从机看到redis运行状态异常,这个监控项是通过在从机“/usr/local/redis/bin/redis-cli -p 8899 ping”来判断客户端和服务端连接是否正常,若返回PONG则表示连接正常,返回其他值则表示客户端和服务器连接不正常(网络不正常或服务器未能正常运行),返回连接异常。

查看redis的日志发现“I/O error trying to sync with MASTER: connection lost”

查看从机redis状态发现master_link_status:长时间一直都是down状态。

通过查阅资料发现是client-output-buffer-limit slave这个参数配置不当造成的。

这里,output buffer是Redis为client分配的缓冲区(这里的"client"可能是真正的client,也可能是slave或monitor),若为某个客户端分配的output buffer超过了预留大小,Redis可能会根据配置策略关闭与该端的连接。

 

该配置项格式如下:
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

hard limit是一旦redis到达这个值后会马上关闭client连接。
soft limit是一种依赖于时间的。 比如一个soft limit被设置为64MB 60s, 那就意味着当client的output buffer超过64MB,并且持续60秒钟,那这个连接就会被断开。

 

在redis主节点查看当前client-output-buffer-limit设置的值

# /usr/local/redis/bin/redis-cli -p 8899  config get "client-output-buffer-limit"

1) "client-output-buffer-limit"

2) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"

可以看到当前client-output-buffer-limit slave的值是默认的256mb 64mb 60,目前用户量的增加或大量的同时连接让client分配的缓冲区满了,所以应该要增大这个参数的值。

 

先动态修改client-output-buffer-limit slave的值,增大到1024mb 256mb 60

稍等一会,查看master_link_status的状态,已经变为up了

 

redis进程的运行状态也恢复正常了。

 

 

最后修改redis.conf里面client-output-buffer-limit slave的值

 

参考资料:

https://redis.io/topics/clients

http://lee90.blog.51cto.com/10414478/1871638

http://blog.csdn.net/jiangguilong2000/article/details/38436941

 

广告 广告

评论区