拆分Redis RDB文件

时间:2013-11-27 10:01:44

标签: caching amazon-ec2 redis rdb

目前我在EC2机器上使用redis,60G RAM没有任何从属设备,但随着我的数据增长,我将需要更多内存。

我正在考虑迁移到2 x 60G机器并将两者之间已有的数据拆分。

是否有用于拆分RDB文件的工具?我没有找到任何专门为此设计的东西。

1 个答案:

答案 0 :(得分:1)

如果要分割数据,则需要设置方法来对密钥进行分片,以便从服务器A写入/读取某些密钥,从服务器B写入/读取其他密钥

无法拆分RDB文件,但您可以采取一些措施来实现您想要的目标。

首先,您可以在第二台服务器上启动一个redis实例并说它是当前服务器的slave,但是将param slave-read-only设置为false。这将使从站同步并从主站读取所有redis数据。到目前为止,你只有一个拥有所有数据的奴隶,但现在我们将做有趣的一点。

然后你需要决定分片策略。一些redis客户端会为您执行此操作。例如,官方Ruby客户端知道如何配置它。您将需要配置您的客户端,以便将密钥分片为A和B(或者替代使用twemproxy,以便客户端不会知道不同的服务器,而twemproxy将负责它)

一旦配置了客户端,就需要将新客户端部署到生产环境,并立即将从属服务器配置为不再是从服务器。您可以使用从属服务器上的CONFIG命令直接执行此操作(不要忘记使用CONFIG REWRITE保持配置),或者您可以更改从属的配置文件并重新启动,这对您来说更方便。由于从器件配置为slave-read-only false,因此即使在从模式下也会接受写入。这意味着如果您直接从redis-cli更改配置,您可以从slave更改为仅分片的独立redis而无需重新启动,我认为这很酷。

请注意,一旦您进行了分片,就必须小心使用MULTI命令或使用LUA脚本。如果您使用的是twemproxy,则无法使用这些命令,但如果您在客户端进行分片,则仍可以使用MULTI或LUA。请注意使用分片机制,其中所有相关密钥将保留在同一服务器上。