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

标签 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状态。

任何人都可以深入了解为什么会发生这种情况吗?

最佳答案

尝试为复制创建 RDB 转储文件时可能会出现问题。它可能没有足够的可用 RAM 来创建文件,或者可能存在从站无法足够快地读取传入数据的问题,因此它会断开连接。
您可以通过在 redis-cli 上发出 bgsave 来检查是否成功,还可以检查 redis.conf对于客户端输出缓冲区限制部分。对于解决方法,您可以尝试新的 diskless replication ,它可能需要更少的 RAM 来执行此操作(即使我从未找到任何文档这样说)。

关于Redis 复制和客户端输出缓冲区限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879499/

相关文章:

elasticsearch - 为什么当第二个节点再次启动时,没有分片成为第二个节点上的主要节点?

web-services - 首次成功验证密码后,Redis 似乎不再检查密码

php - 如何通过作业 ID 从 Redis 队列中删除作业?

java - 具有大量实体的 Ehcache/Hibernate 和 RMI 复制

mongodb - 如何在我的 mac 上部署测试 replset 时修复 "EMPTYUNREACHABLE"?

powerbi - 将 tableau 报告复制到 power BI 中

MySQL 复制 - 如何验证复制的数据?

redis - 启动redis.service失败 : Unit redis-server. 服务被屏蔽

asp.net-web-api - ASP.Net Web API - 扩展大量写操作

ruby-on-rails - 在 Rails 中安排付款工作的最佳方式