繁体   English   中英

拆分 Redis RDB 文件

[英]Splitting a Redis RDB file

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

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

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

如果你想分割你的数据,你需要有一种方法来对你的密钥进行分片,这样一些密钥将从服务器 A 写入/读取,而其他密钥则从服务器 B

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

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

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

一旦您配置了客户端,您需要将新客户端部署到生产中并立即将从站配置为不再是从站。 您可以直接使用从服务器上的 CONFIG 命令来执行此操作(不要忘记使用 CONFIG REWRITE 保留配置),或者您可以更改从服务器的配置文件并重新启动,无论对您来说哪个更方便。 由于从设备配置为从设备只读 false,即使在从设备模式下,它也会接受写入。 这意味着如果您直接从 redis-cli 更改配置,则无需重新启动即可从 slave 更改为分片的独立 redis,我认为这非常酷。

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

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目录34b6e1dfb871ad30398ef5edd6b9a954617e6ec1.rdb89d020a7e727e81f003836207902ae26fe05fd51.rdb中生成 2 个 rdb 文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM