重启 Redis 副本

Restart Redis replica

我正在使用 2 级 master/slave 模式的 redis,没有集群或哨兵。基本上,我有 A -> B -> C,其中 A 是主 master,B 从 A 复制,C 从 B 复制。B 和 C 都是多个实例。现在我需要重新启动我们所有的实例,以便在不停机的情况下对 OS 进行一些安全修补。根据 Redis 官方文档,重启 master 会清除 slave 中的所有数据,这在我们的例子中是不可接受的。我正在尝试找到一种可以在不擦除 C 上的数据的情况下重启 A 和 B 的解决方案。我的尝试是将所有数据转储到一个 rdb 文件中并重启 A。但是,这仍然可能会导致一些停机时间,因为 B 和 C 将尝试重新同步当它加载回 rdb 文件时,他们的数据与 A。我想到的另一种方法是在我重新启动 master 时关闭 slaves 的复制,然后一个一个地重新启动 salves。但是,这需要大量手动操作来执行重启。有没有更好的方法可以在不停机的情况下执行此更新?

一个相关的问题是我如何配置系统以便将来能够轻松处理这种重新启动?我可以在所有实例上启用持久性吗?如果启用了从站以实现持久性。重启后会发生什么?重启时会加载本地rdb文件还是做全同步。

According to the official Redis documentation, restarting a master will wipe out all data in slaves, which is not acceptable in our case.

我不确定您指的是文档的哪一部分,但在任何情况下都不是这样 - 这完全取决于您的操作方式。对于您的情况,我会使用如下所示的工作流程来保持服务正常运行并以滚动方式对其进行修补:

  1. 提升B成为大师
  2. 重启A,从属于C
  3. 提升 C 语言水平
  4. 重启B,从属于A
  5. 将 A 提升为大师
  6. 重启C,从属B