【问题标题】:How to switch masters in this Redis Sentinel configuration?如何在这个 Redis Sentinel 配置中切换 master?
【发布时间】:2014-10-31 06:23:00
【问题描述】:

我有以下 Redis/Sentinel 配置:

  • Redis master A + N slaves
  • M哨兵看A,命名masterA
  • 客户端应用程序查询哨兵masterA,然后查询和修改A

现在说 A 已过时,我想用一个名为 B 的新 Redis 主服务器替换它(停机时间/数据丢失最少。)。在操作结束时,我想要这个:

  • Redis master B + N slaves
  • 客户端应用程序查询和修改B

我可以如下进行:

  1. 让哨兵开始监视B,命名为masterB
  2. A 的每个从站成为B 的从站

从那里开始,我被卡住了,因为客户端应用程序在与哨兵交谈时仍然要求masterA。我有两个问题:

  • 有没有办法切换主控名称,这样B 就被称为masterA 用于哨兵,因此也用于客户端应用程序?
  • 修改客户端应用程序代码以处理从旧主机到新主机的切换是否更好?

【问题讨论】:

    标签: redis redis-sentinel


    【解决方案1】:

    实现目标的一种方法是遵循“添加另一个间接级别”的古老解决方案。

    一种特别有效的方法是让您的客户端与 TCP 代理(例如 HAProxy)通信并将流量传递给当前的主服务器。

    要保持 TCP 代理同步,您可以执行类似于 http://blog.haproxy.com/2014/01/02/haproxy-advanced-redis-health-check/ 的操作,这会使 HAProxy Sentinel 感知。

    此解决方案的主要优点是它使您的客户端非常简单 - 他们只连接到一个地方,并且流量总是被转发到正确的 Redis 实例。

    此解决方案的一个问题是 HAProxy 的配置 DSL 无法处理 Redis 服务器重新启动并在哨兵将其变为从属之前最初宣布自己为主服务器的时间段。这将导致丢失的写入和不一致的状态,这取决于您的应用程序可能没问题。

    为了解决这个问题,我已经开始开发一个“更智能”的守护进程来保持 HAProxy 与当前的 master 同步。我的解决方案是https://github.com/mdevilliers/redishappy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2020-03-08
      • 2018-08-22
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多