【问题标题】:Splitting a Redis RDB file拆分 Redis RDB 文件
【发布时间】:2013-11-27 10:01:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: caching amazon-ec2 redis redis-rdb


    【解决方案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。请注意使用分片机制,在该机制中,所有相关密钥都将保留在同一台服务器上。

    【讨论】:

      【解决方案2】:

      第一步:安装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文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 2023-01-22
        • 2015-03-09
        相关资源
        最近更新 更多