Redis问题:主从maxmemory策略配置不当会致死循环
2012-07-21 15:13:50   来源:我爱运维网   评论:0 点击:

以前应用都没有Redis Slave之前,我们可以不关心这个bug。但有应用开始使用Redis Slave后,所有的redis需要设置maxmemory-policy为noevit...
以前应用都没有Redis Slave之前,我们可以不关心这个bug。但有应用开始使用Redis Slave后,所有的redis需要设置maxmemory-policynoevition, 并且监控主库的内存使用率,不够的话需要增加内存
         noeviction -> don't expire at all, just return an error on write operations
 
这是Redis的一个Bug:即 maxmemory + evicting policy + slaves = death,详细可参考:         https://github.com/antirez/redis/issues/327
 
这是Redis曝出了一个新bug,是指如果设定了Redismaxmemory,并且这个RedisSlave,那么当maxmemory限制达到后,就会出现死循环。具体原因和流程如下:
·         Redis 达到了配置中设定的maxmemory限制,开始按LRU策略删除数据
·         被过期清除的数据会生成DEL 日志推送到Slave
·         但是如果Slave达到一定数量时,这条DEL日志使用的output buffer空间可能会超过刚刚清除数据空闲出来的空间,这时候会导致空间又超限了
·         于是整个清除过程就变成了死循环
而且这个问题不仅会出现在Slave的情况下,在写AOF buffer的时候也会发生同样的问题。
Redis作者随后发布了补丁(This fixes issue)对这个问题进行修复。目前此bug的修复已经合并到2.4的主干中,截止目前为止,Redis官方2.4.8稳定版本中已经包含对此问题的修复。
 

相关热词搜索:Redis Bug

上一篇:Percona Playback 0.3 development release
下一篇:Mysql数据库复制延时分析

分享到: 收藏
iTechClub广告