【Redis】slaveof 报错 Background transfer error

在slave上执行slaveof到master上,迟迟未成功。
检查master的redis进程日志输出如下:

  1. 427:S 03 May 20:32:07.320 * Slave 10.9.95.71:6379 asks for synchronization
  2. 427:S 03 May 20:32:07.320 * Unable to partial resync with slave $slaveip:6379 for lack of backlog (Slave request was: 5974421660).
  3. 427:S 03 May 20:32:07.320 * Delay next BGSAVE for SYNC
  4. 427:S 03 May 20:32:13.350 * Starting BGSAVE for SYNC with target: slaves sockets
  5. 427:S 03 May 20:32:14.333 * Background RDB transfer started by pid 478
  6. 427:S 03 May 20:35:04.136 # Connection with slave $slaveip lost.
  7. 427:S 03 May 20:35:04.912 # Background transfer error

手动通过stat检查了一下rdb文件,确认bgsave成功。
报错也显示为transfer error,大致判定为rdb文件在transfer到slave的时候报错。
 
google了一下发现应该是client-output-buffer-limit设置过小。
 
〇 client-output-buffer-limit 
在文档中指出,该参数用于限制client缓冲区的限制。
redis的client被分为三种类型:normal、slave、pubsub。
normal:正常的客户端并包括MONITOR客户端
slave:slave客户端
pubsub:pub/sub客户端
 
其设置方式为:
client-output-buffer-limit [class] [hard limit] [soft limit] [soft seconds]
[class] 为client的类型。
[hard limit]硬限制,即超过[hard limit]值的缓冲区客户端会被强制中断。
[soft limit] [soft seconds]为软限制,即持续[soft seconds]时间内,超过[soft limit]的缓冲区客户端会被强制中断。
 
当然,默认情况下普通client不受限制(设置为0),因为如果以推送的方式(不询问),在请求之后才接收到数据,那么只有异步客户端可能会创建一个请求数据的速度超过其读取速度的情况。

而slave和pubsub client有一个默认限制,因为他们以推送的方式接收数据。

此处将slave的hard limit设置为32G。
 
config set client-output-buffer-limit "normal 0 0 0 slave 34359738368 268435456 600 pubsub 33554432 8388608 60" 

重新slaveof后,观察info replication和主库redis进程日志,创建复制成功:

  1. 427:S 03 May 21:41:16.962 * Slave $slaveip:6379 asks for synchronization
  2. 427:S 03 May 21:41:16.984 * Full resync requested by slave $slaveip:6379
  3. 427:S 03 May 21:41:16.984 * Delay next BGSAVE for SYNC
  4. 427:S 03 May 21:41:22.712 * Starting BGSAVE for SYNC with target: slaves sockets
  5. 427:S 03 May 21:41:23.679 * Background RDB transfer started by pid 568
  6. 568:C 03 May 21:51:14.107 * RDB: xxxxx MB of memory used by copy-on-write
  7. 427:S 03 May 21:51:15.012 * Background RDB transfer terminated with success
  8. 427:S 03 May 21:51:15.012 # Slave $slaveip:6379 correctly received the streamed RDB file.
  9. 427:S 03 May 21:51:15.012 * Streamed RDB transfer with slave $slaveip:6379 succeeded (socket). Waiting for REPLCONF ACK from slave to enable streaming

复制建立好后,将client-output-buffer-limit改为默认值。



作者微信公众号:





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29773961/viewspace-2154243/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29773961/viewspace-2154243/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值