10

好的,我觉得我错过了一些重要的信息。

在本地,我有 1 个主和 1 个从 redis 服务器在不同的端口上运行 http://redis.io/topics/sentinel

我也有 3 个哨兵,他们似乎都知道彼此并按预期工作。

现在我有一大段java代码指向我的主redis服务器所在的127.0.0.1:6379。

如果我拿下主人,哨兵会按预期做任何事情,将奴隶提升为主人,所以现在新主人开始了

127.0.0.1:6380

我的问题是我的代码如何知道这一点并自动切换?

4

1 回答 1

7

您必须在他们的 pubsub 频道之一上订阅哨兵消息。您可以在您发布的链接中看到哨兵将发布消息,例如

+odown <instance details> -- The specified instance is now in Objectively Down state.
-odown <instance details> -- The specified instance is no longer in Objectively Down state.
+failover-takedown <instance details> -- 25% of the configured failover timeout has elapsed, but this sentinel can't see any progress, and is the new leader. It starts to act as the new leader reconfiguring the remaining slaves to replicate with the new master.
+failover-triggered <instance details> -- We are starting a new failover as a the leader sentinel.

因此,当您在其中一个频道上看到哨兵发布时,您需要解析消息并让您的客户做出相应的响应。Redis 并不聪明——你必须使用客户端库来处理这些事情。

具体来说,最有用的渠道是

+odown
+failover-detected
+switch-master
于 2013-03-15T16:26:37.623 回答