如何在Redis Sentinel配置中切换主设备?

时间:2014-09-06 12:46:44

标签: redis redis-sentinel

我有以下Redis / Sentinel配置:

  • Redis主人A + N奴隶
  • M哨兵正在观看A,名为masterA
  • 客户端应用程序查询masterA的标记,然后查询和修改A

现在说A已过时,我希望将其替换为名为B的新Redis主机(最短停机时间/数据丢失)。在操作结束时,我想要这个:

  • Redis主人B + N奴隶
  • 客户端应用程序查询和修改B

我可以按照以下步骤进行:

  1. 让哨兵开始关注B,名为masterB
  2. A的每个奴隶成为B
  3. 的奴隶

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

    • 有没有办法切换大师名称,以便B被称为masterA的哨兵,因此也被称为客户端应用程序?
    • 修改客户端应用程序代码以处理从旧主服务器到新主服务器的切换是否更好?

1 个答案:

答案 0 :(得分:1)

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

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

为了保持TCP代理同步,您可以执行与http://blog.haproxy.com/2014/01/02/haproxy-advanced-redis-health-check/类似的操作,这使HAProxy Sentinel可以识别。

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

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

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