Redis:只读从站与故障转移从站?

kno*_*cte 5 failover replication high-availability failovercluster redis

我正在阅读大量有关 Redis 网络配置的文档,但我对架构心智模型中的要求似乎与当前选项不符的情况感到困惑。

首先:我不需要分片,因为目前可扩展性不是问题。所以现在只有一个主节点(节点 M)。

第二:我想要冗余,也就是说,如果一个主节点出现故障,我想要第二个节点接管,并执行客户端发送它们的请求。我们称其为第一个从站:故障转移从站(节点 FS)。

第三:我还想要另一个副本节点,它是一个从属节点,但只提供只读查询。如果客户端连接到它,并且客户端尝试修改数据,则节点应该给出错误。我们称其为第二个从站:只读从站 (RS)。

最后:我想要只读从属设备的故障转移。也就是说,如果 RS 死了,我希望另一个只读从站接管它的任务。我们称之为第四个从站:故障转移只读从站 (FRS)。

有没有办法像这样配置Redis?似乎所有的部署模式(正在阅读这篇文章:https : //blog.octo.com/en/what-redis-deployment-do-you-need/)除了集群之外都有一个主节点。现在,似乎我的“FS”节点将成为第二个主节点,因为它接受写查询,但是,集群配置默认启用分片,并且似乎没有正常的方法可以禁用它,除非我遗漏了一些东西。

Sri*_*nan 3

据我了解,redis Sentinel 可以满足你的需求。

您将有 1 个主站 (M) 和 3 个从站(FS、RS 和 FRS)。每个从站都连接到同一个主站。

然后,您部署奇数个哨兵进程来监视主服务器。如果master失败,哨兵就会将三个slave中的一个提升为新的master。

现在,根据您的笔记,您希望将“FS”从站设置为新的主站。Sentinel 不知道“FS”的特殊性,它可以选择 3 个 Slave 中的任何一个作为新 Master 的候选者。为了使“FS”特殊,您需要为每个从站设置“replica-priority”。您不希望“RS”和“FRS”成为主节点 - 因此为这两个节点设置replica-priority = 0。那么哨兵只会在需要进行故障转移时考虑“FS”。

你问题的另一部分——当“RS”死亡时会发生什么?从站没有故障转移机制——只是不需要。“RS”和“FRS”只是两个只读副本,都指向同一个主服务器。客户端应配置为随机尝试两个副本之一 - 以便分配负载。如果“RS”死机,客户端只需尝试“FRS”即可。由于它是只读的 - 数据的一致性并不重要。


对于 RS 和 FRS,设置一个附加属性replica-read-only yes。这将确保写入失败。

如果您愿意,可以使用非哨兵设置。如果这样做,从 M 到 FS 的故障转移将不会自动发生。如果/当主 M 宕机时,您必须 a) 检测到它,b) 将 FS 标记为无从属,c) 确保所有 Redis 客户端开始写入新主,以及 d) 重新配置 RS 和 FRS 以开始跟踪新主人。Sentinel 会自动执行此操作,但增加了复杂性。您也可以轻松地自己手动完成。