Redis 将大数据复制到新的从站
Redis replication for large data to new slave
我有一个redis master,它有30 GB的数据,内存有90 GB。我们有这个设置,因为我们有更少的写入和更多的读取。通常,我们会有一个 3X db 大小的 RAM 机器。
这里的问题是,一个 slave 损坏了,后来我们使用 sentinel 将它添加回来。它在 master 上卡在 wait_bgsave 状态(在看到 master 上的信息后)
原因是:
client-output-buffer-limit slave 256mb 64mb 60
这是在主服务器上设置的,由于最大内存不可用,它会中断新从服务器的复制。
我看到这个问题 正在讨论类似的问题,但我的问题范围更广。
我们不能使用大量内存。那么,在这种情况下进行复制以防止主服务器出现任何故障的可能方法是什么(wrt。内存和延迟影响)
我有几件事要考虑:
1 - 我应该做无盘复制 - 它会对写入和读取的延迟产生任何影响吗?
2 - 我是否应该将转储文件从另一个从站复制到这个新从站并重新启动 redis。 ?那行得通吗
3 - 我应该将输出缓冲区限制从机增加到更大的限制吗?如果是,那么多少钱?我想这样做一段时间直到复制发生,然后将其恢复到正常设置?我对这种方法持怀疑态度。
你遇到了这个问题,因为你有一个慢速副本,它无法按需要快速读取复制数据。
为了解决问题,您可以尝试增加client-output-buffer-limit
缓冲区限制。您也可以尝试在从主服务器同步时禁用副本的持久性,然后启用持久性。通过禁用持久性,副本可能会更快地使用数据。但是,如果master和replica之间的带宽真的很小,你可能需要考虑重新部署你的replica,让它靠近master,并且有一个大的带宽。
1 - Should i do diskless replication - will it have any impact on latency of writes and reads?
恕我直言,我认为这与无盘复制无关。
2 - Should i just copy the dump file from another slave to this new slave and restart redis. ? will that work.
不,它不会起作用。
3 - Should i increase the output-buffer-limit slave to a greater limit? If yes, then how much? I want to do this for sometime till replication happens and then revert it back to normal setting?
是的,您可以尝试增加限制。在您的情况下,由于您的数据大小为 30G,因此 30G 的硬限制应该可以解决问题。但是,这太多了,可能会产生其他影响。您需要做一些基准测试才能获得正确的限制。
是的,您可以通过 CONFIG SET
命令动态更改此设置。
我有一个redis master,它有30 GB的数据,内存有90 GB。我们有这个设置,因为我们有更少的写入和更多的读取。通常,我们会有一个 3X db 大小的 RAM 机器。
这里的问题是,一个 slave 损坏了,后来我们使用 sentinel 将它添加回来。它在 master 上卡在 wait_bgsave 状态(在看到 master 上的信息后)
原因是:
client-output-buffer-limit slave 256mb 64mb 60
这是在主服务器上设置的,由于最大内存不可用,它会中断新从服务器的复制。
我看到这个问题
我们不能使用大量内存。那么,在这种情况下进行复制以防止主服务器出现任何故障的可能方法是什么(wrt。内存和延迟影响)
我有几件事要考虑: 1 - 我应该做无盘复制 - 它会对写入和读取的延迟产生任何影响吗? 2 - 我是否应该将转储文件从另一个从站复制到这个新从站并重新启动 redis。 ?那行得通吗 3 - 我应该将输出缓冲区限制从机增加到更大的限制吗?如果是,那么多少钱?我想这样做一段时间直到复制发生,然后将其恢复到正常设置?我对这种方法持怀疑态度。
你遇到了这个问题,因为你有一个慢速副本,它无法按需要快速读取复制数据。
为了解决问题,您可以尝试增加client-output-buffer-limit
缓冲区限制。您也可以尝试在从主服务器同步时禁用副本的持久性,然后启用持久性。通过禁用持久性,副本可能会更快地使用数据。但是,如果master和replica之间的带宽真的很小,你可能需要考虑重新部署你的replica,让它靠近master,并且有一个大的带宽。
1 - Should i do diskless replication - will it have any impact on latency of writes and reads?
恕我直言,我认为这与无盘复制无关。
2 - Should i just copy the dump file from another slave to this new slave and restart redis. ? will that work.
不,它不会起作用。
3 - Should i increase the output-buffer-limit slave to a greater limit? If yes, then how much? I want to do this for sometime till replication happens and then revert it back to normal setting?
是的,您可以尝试增加限制。在您的情况下,由于您的数据大小为 30G,因此 30G 的硬限制应该可以解决问题。但是,这太多了,可能会产生其他影响。您需要做一些基准测试才能获得正确的限制。
是的,您可以通过 CONFIG SET
命令动态更改此设置。