【问题标题】:Redis - There is no way to migrate from a AOF-disabled environment to a AOF-enabled environment?Redis - 没有办法从禁用 AOF 的环境迁移到启用 AOF 的环境吗?
【发布时间】:2014-01-21 06:24:27
【问题描述】:

基本上我的情况如下:

1) 我最初在没有 AOF 的情况下启动了 Redis,并且运行了 n 周。

2) 我决定要使用 AOF,所以我在 n+1 周后重新启动 Redis 并开启 AOF。

3) 我决定要迁移到新服务器。所以我安全地关闭了当前的 Redis 进程,并将 RDB 文件和 AOF 文件复制到我的新服务器上。

4) 当我在启用 AOF 的新服务器中启动 Redis 时,Redis 的默认行为是从 AOF 加载数据ONLY这意味着我在前 n 周的数据丢失了。

当然有一个明显的解决方案,即在没有 AOF 的情况下启动 Redis,以便从 RDB 加载数据,然后在运行时打开 AOF。

但这几乎意味着如果你有一段时间关闭了 AOF,你就无法使用 AOF,而且你只能使用 AOF,如果你从第一天开始就一直在使用它.

这种理解正确吗?如果是这样,对于任何想要迁移到启用 AOF 的环境的人来说,这听起来毫无用处。而且一个没有迁移手段的系统听起来很糟糕。

我在这里遗漏了什么吗?有没有办法将您过去的数据包含到您的 AOF 文件中?

我会很感激一些帮助,因为这会影响我在我的环境中是否需要 AOF 的决定。 (也就是说我无法体验AOF的巨大好处……)

【问题讨论】:

    标签: nosql redis


    【解决方案1】:

    我认为你误解了 AOF 的工作原理。

    AOF其实是两种机制:

    • 一种将所有写操作附加到 AOF 文件的重做日志机制
    • 后台重写操作,可以根据内存内容生成 AOF 文件

    Redis 会定期触发后台重写操作,但您也可以使用BGREWRITEAOF 命令手动启动它。

    现在,当通过“config set appendonly yes”命令动态开启 AOF 时,会自动触发重写操作,因此您可以确定所有现有数据都是生成的 AOF 文件的一部分。

    你可以在 aof.c 文件中看到这段代码: https://github.com/antirez/redis/blob/unstable/src/aof.c#L192

    在您描述的情况下,您应该在 AOF 文件中获取所有数据。

    【讨论】:

    • 非常感谢!果然如你所说,我一直对后台重写操作有误解。触发重写操作后,我的数据集都安全地在我的 AOF 中,我只能使用 AOF 文件启动我的服务器。我以为BGREWRITEAOF只是现有AOF文件的压缩机制,结果我错了。 redis.io/topics/persistence#append-only-file这个页面也解释了。非常感谢你的解释:)
    • 为什么Redis in Action - 4.1.3 Rewriting/compacting append-only files会说为了解决日益增长的AOF问题,我们可以使用BGREWRITEAOF,它会通过删除冗余命令将AOF重写为尽可能短。?似乎重写是基于原始 AOF 文件。这是一个错误吗?
    【解决方案2】:

    无论如何,redis 的最佳实践是永远不要停止服务器并将文件复制到另一台服务器。最佳做法是在新服务器上启动 redis 作为当前服务器的从属服务器,然后让 redis 完成所有同步。

    您可以配置从属服务器以接受写入,但到目前为止,您的所有客户端仍然只指向旧主服务器。

    然后,当一切都同步后,您将所有客户端指向从站。从站将拥有与主站相同的数据,并且由于它正在接受写入,因此您的客户端可以根据需要设置新密钥。

    在这个阶段,旧服务器没有收到任何请求,所以你现在可以做的是动态更改从服务器,并说它是无从服务器。这样它将停止与主节点通信以进行同步。如果您动态更改此设置,请不要忘记将配置文件保存到磁盘。

    在这一步之后,你的老主人就完全孤立了。没有客户端与之交谈,也没有从属设备在同步。你可以阻止它。

    看到了吗?您的停机时间为零,并且不会手动弄乱文件:)

    无论如何,您都应该阅读 Didier 的评论。他对 AOF 的看法是正确的

    【讨论】:

    • 感谢您的评论!为了阐明我对 AOF 文件的理解,我提出了迁移示例,因此服务器迁移不是我主要关心的问题。但是您的迁移技巧听起来很有希望且简单;下次我必须移动服务器时,我肯定会使用它!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多