gpt4 book ai didi

redis - 如何在此 Redis Sentinel 配置中切换主节点?

转载 作者:IT王子 更新时间:2023-10-29 06:14:59 25 4
gpt4 key购买 nike

我有以下 Redis/Sentinel 配置:

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

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

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

我可以按如下方式进行:

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

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

  • 有没有一种方法可以切换 master 的名称,这样 B 对于哨兵来说就变成了 masterA,因此对于客户端应用程序也是如此?
  • 修改客户端应用程序代码以处理从旧 master 到新 master 的切换是否更好?

最佳答案

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

一种特别有效的方法是让您的客户端与 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 .

关于redis - 如何在此 Redis Sentinel 配置中切换主节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com