redis主从复制同步数据死循环问题

发布时间:2020-06-23 16:04:06 作者:524683249
来源:网络 阅读:2583

redis主从复制同步数据死循环问题

发现现象:

最近有问必答codis一个从库端口6504一直时不时,主从延时和从库连接不上的报警,开始怀疑是redis备份导致,没有深入去找原因,后面发现白天也在报警,故深入排查了一下原因。

host: 10.20.1.4

port: 6504

idc: KDDI

role: redis_s

item: r_replication

current: 32767

last: 1 minutes.

info: 

send at [2015-11-27 09:17:49]

------------------------------------------

host: 10.20.1.4

port: 6504

idc: KDDI

role: redis_s

item: r_connection

current: 0

last: 1 minutes.

info: failed

send at [2015-11-27 08:13:46]

问题现象:

1、登录到从库所在服务器,奇怪的发现了,从库周期性的在产生temp-rewriteaof-xxx.aof文件,见下图

redis主从复制同步数据死循环问题

2、从库的日志里面出现大量“Connection with master lost”日志,从句面意思来理解是说主库连接丢失,见下图

redis主从复制同步数据死循环问题

3、登录到主库,查看日志发现了"Connection with slave 10.20.1.4:6504 lost"“scheduled to be closed ASAP for overcoming of output buffer limits.”两条重要信息

redis主从复制同步数据死循环问题

4、登录到主库使用info命令发现“slave0:ip=10.20.1.4,port=6504,state=send_bulk,offset=0,lag=0”

redis主从复制同步数据死循环问题

问题分析:

1、通过从库周期性的生成aof文件以及日志里面看到周期性的连接主库lost现象,初步怀疑是复制层面的问题,并查看其他几个从库的日志没有发现这种情况,先排除网络问题

2、在主库也发现了连接从库lost现象,确定是6504端口redis内部的问题,并且看到“overcoming of output buffer limits”,提示buffer限制了

3、以上信息基本上可以确认问题的原因,先回想一下redis主从复制原理:当在从库执行slaveof ip port命令之后,主库会使用bgsave生成一个rdb快照文件,生成文件之后通过网络将这个文件传到从库,同时主库上会将生成rdb快照那一刻起的新数据写的一个buffer缓冲区,另一方面,从库接受主库刚刚生成那个rdb文件之后,开始加载这个rdb文件,加载需要一定时间,如果这个时间越长,其主库的写入量越大,那么刚刚主库产生的buffer也会越大(当然不能无限大),在主库client-output-buffer-limit参数 slave 268435456 67108864 60设置了其大小,意思说如果buffer大小超过256Mb或者连续60秒钟产生的buffer大小大于64Mb,则buffer会强制关闭

解决办法:

1、调整主库client-output-buffer-limit默认参数,CONFIG SET client-output-buffer-limit "slave 1073741824 268435456 300",将其限制设置为1G,连续300秒超过256Mb才强制关闭,问题解决。

在主库的日志里面看到现象如下:

redis主从复制同步数据死循环问题

在从库的日志里面看到现象如下:

redis主从复制同步数据死循环问题

 


推荐阅读:
  1. redis主从复制
  2. Redis数据库主从复制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

主从复制 同步数据 redis

上一篇:eclipse如何实现DSA数字签名?

下一篇:C#语言知识点整理 - 委托

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》