拆分Redis RDB文件



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

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

有什么工具可以拆分RDB文件吗?我还没有找到专门为此设计的东西。

如果你想分割你的数据,你需要有一种方法来分割你的密钥,这样一些密钥将从服务器a写入/读取,另一些则从服务器B 写入/读取

没有办法分割RDB文件,但可以做一些事情来实现您想要的。

首先,您可以在第二台服务器上启动一个redis实例,并说它是当前服务器的从属服务器,但将paramslave read-only设置为false。这将导致从设备同步并从主设备读取所有redi数据。到目前为止,您只有一个包含所有数据的slave,但现在我们将做一个有趣的部分。

然后你需要决定一个分片策略。一些redis客户为您做这件事。例如,如果你配置了Ruby官方客户端,它就知道如何处理这个问题。你需要配置你的客户端,这样密钥就会被分为A和B(或者使用twemproxy,这样客户端就不会知道不同的服务器,twempoxy会处理它)

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

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

步骤1:安装https://github.com/leonchen83/redis-rdb-cli/
步骤2:创建一个配置文件来设置拆分条件
nodes.conf 含量

34b6e1dfb871ad30398ef5edd6b9a954617e6ec1 127.0.0.1:10003@20003 master - 0 1531044047088 3 connected 8193-16383
89d020a7e727e81f003836207902ae26fe05fd51 127.0.0.1:10001@20001 myself,master - 0 1531044047000 1 connected 0-8192
vars currentEpoch 6 lastVoteEpoch 0

步骤3:运行rdt -s your-dump.rdb -c nodes.conf -o /path/to

在步骤3。将在/path/to目录34b6e1dfb871ad30398ef5edd6b9a954617e6ec1.rdb89d020a7e727e81f003836207902ae26fe05fd51.rdb 中生成2个rdb文件

最新更新