1

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2013-11-27T12:39:54.590 回答
0

step1: 安装https://github.com/leonchen83/redis-rdb-cli/
step2: 创建一个配置文件来设置分割条件
内容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

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

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

于 2022-01-24T09:50:59.443 回答