重新同步期间redis client-output-buffer-limit的行为

时间:2019-05-28 17:08:56

标签: redis

我假设在副本重新同步期间(全部或部分),主服务器将尝试将数据尽快发送到副本。这是否意味着主服务器上的副本输出缓冲区会迅速填满,因为主服务器可以写入的速度可能比网络的吞吐量还要快?如果我为副本设置了client-output-buffer-limit,那么主服务器会不会在重新同步完成之前最终关闭连接?

1 个答案:

答案 0 :(得分:0)

是的,Redis Master将关闭连接,并且同步将从头开始。但是,请在下面找到一些详细信息:

  1. 您需要触摸此配置参数,它的目的/优点/成本是什么?
  2. 使用默认配置和相当适度的现代硬件,这种情况发生的可能性(几乎)为零(
  3. )。
  4. “默认情况下,普通客户端不受限制,因为它们不接收数据 无需询问(以推送方式),而是在请求之后,因此只有异步客户端可能会创建这样一种情况:请求数据的速度比读取数据的速度快。”-文档中的部分。
  5. 即使发生这种情况,复制也会从头开始,但是当从站不断重复要求同步时,它可能会导致无限循环。 Redis Master将需要派生整个内存快照(执行BGSAVE),并且在同步期间每次每次都使用多达初始快照大小三倍的RAM。这将导致更高的CPU使用率,内存增加网络利用率(如果有)和IO。

为避免生产问题调整此配置参数的一般建议:

  1. 请不要减少此缓冲区,并且在增加缓冲区的大小之前,请确保盒子上有足够的内存。
  2. 请考虑将RAM的总量作为快照内存大小(对于写时复制BGSAVE进程加倍),再加上已配置的任何其他缓冲区的大小以及一些额外的容量。

请找到更多详细信息here