Redis复制将大数据复制到新的从属服务器

时间:2019-10-30 12:02:34

标签: redis replication

我有一个Redis主设备,它具有30 GB的数据,而内存则为90 GB。我们拥有这种设置,因为写入次数更少,读取次数更多。通常,我们将拥有3倍db大小的RAM计算机。

这里的问题是,一个奴隶损坏了,后来当我们使用哨兵将其重新装回时。它在主服务器上陷入了wait_bgsave状态(在看到主服务器上的信息之后)

原因是:

 client-output-buffer-limit slave 256mb 64mb 60

这是在主服务器上设置的,由于没有最大内存,它将中断新从服务器的复制。 我看到了这个问题Redis replication and client-output-buffer-limit,其中正在讨论类似的问题,但问题范围更广。

我们不能使用太多内存。因此,在这种情况下,有哪些可能的方法来进行复制以防止对主服务器造成任何故障(写入内存和延迟影响)

我的想法不多: 1-我应该进行无盘复制吗?它会对读写延迟产生任何影响吗? 2-我是否应该将转储文件从另一个从站复制到此新从站,然后重新启动Redis。 ?可以的。 3-我应该将输出缓冲区限制从站增加到更大的限制吗?如果是,那要多少钱?我想做一段时间直到复制发生,然后将其恢复为正常设置?我对此方法表示怀疑。

1 个答案:

答案 0 :(得分:1)

您遇到了这个问题,因为副本速度很慢,并且无法按需要快速读取复制数据。

为了解决该问题,您可以尝试增加client-output-buffer-limit缓冲区限制。您也可以尝试在从主数据库同步副本时禁用副本上的持久性,然后在其上启用持久性。通过禁用持久性,副本可能会更快地消耗数据。但是,如果主副本之间的带宽很小,则可能需要考虑重新部署副本以使其靠近主副本并具有较大的带宽。

  

1-我应该进行无盘复制吗?它会对读写延迟产生任何影响吗?

恕我直言,我认为这与无盘复制无关。

  

2-我是否应该将转储文件从另一个从站复制到此新从站,然后重新启动Redis。 ?会起作用吗?

不,它不起作用。

  

3-我是否应该将输出缓冲区限制从站增加到更大的限制?如果是,那要多少钱?我想做一段时间直到复制发生,然后将其恢复为正常设置?

是的,您可以尝试增加限制。在您的情况下,由于您的数据大小为30G,因此30G的硬限制应该可以解决此问题。但是,这太多了,并且可能会产生其他影响。您需要做一些基准测试才能获得正确的限制。

是的,您可以通过CONFIG SET命令动态更改此设置。