Redis复制和客户端输出缓冲区限制

时间:2015-10-01 04:30:50

标签: redis replication

我遇到了redis复制问题,我无法弄清楚。 Master一直在达到客户端输出缓冲区限制。

主配置:

# redis-cli -p 6380 config get client-output-buffer-limit
1) "client-output-buffer-limit"
2) "normal 0 0 0 slave 536870912 536870912 0 pubsub 33554432 8388608 60"

主日志:

Client id=3014598 addr={{MASTER}} fd=6 name= age=217 idle=217 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=3723 oll=4806 omem=581952061 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.

主信息:

# redis-cli -p 6380 info
role:master
connected_slaves:1
slave0:ip={{SLAVE_IP}},port=6380,state=wait_bgsave,offset=0,lag=0  //  stays on wait_bgsave

奴隶信息:

role:slave
master_host:{{MASTER_IP}}
master_port:6380
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:1

Redis版本:3.0.2

数据库大小:~21GB Master是一个30GB的Ram EC2实例 Slave是一个60GB Ram EC2实例

从机正在连接,但无论我设置缓冲区有多高,主机总是超时。 master几乎总是处于wait_bgsave状态。

任何人都可以提供有关为什么会发生这种情况的任何见解吗?

1 个答案:

答案 0 :(得分:4)

尝试为复制创建RDB转储文件时可能会出现问题。它可能没有足够的RAM可用于创建文件,或者可能有一个peoblem,奴隶无法足够快地读取传入的数据,因此它会断开连接。
您可以通过在redis-cli上发出bgsave来检查它是否成功,并检查redis.conf是否为client-output-buffer-limit部分。对于解决方法,您可以尝试新的diskless replication,它可能需要更少的RAM来执行它(即使我从未发现任何文档说过这些)。