0

你好堆栈社区,

我对特定问题案例的 Redis sentinel 有疑问。我将 AWS 与 Multi AZ 一起使用来创建一个 sensu 集群。

在 eu-central-1a 上,我有一个 sensu+redis(M)、一个 RBMQ+Sentinel 和另外 2 个 Sentinel。在 eu-central-1b 上也一样,但 redis 是我在这个 AZ 上的奴隶。

如果出现问题并且 eu-central-1a 无法与 eu-central-1b 通信怎么办?我认为eu-central-1b上的Sentinel应该将我的redis slave提升为master,因为他无法联系我的redis master。所以我应该有 2 个 redis master 在 2 个不同的 AZ 上一起运行。

但是当 AZ 之间的链接被检索到时,我仍然会有 2 个 master,有 2 个不同的数据。在这种情况下会发生什么?一个master将成为slave,并且数据将被复制而不会丢失?我们是否需要重新启动一个主人,他将成为奴隶?

4

1 回答 1

0

例如,Sentinel 检测到主服务器的更改

如果主服务器宕机并且无法访问,则会选出一个新的从服务器。这是基于quorum多个哨兵同意主人已经倒下的地方。然后failover发生。

一旦哨兵检测到主人重新上线,我相信它就是奴隶,因此我相信新主人继续存在。在从 master 到新 master 的切换中,您将不可避免地丢失数据。

如果您失去连接,那么是的哨兵将无法正常工作,因为它依赖多个哨兵来同意主 redis 已关闭。您不应该在 2 sentinel 系统中使用 sentinel。

基本的解决方案是让您在另一台服务器上放置一个额外的哨兵,也许是没有运行 redis/sentinel 的客户端/应用程序服务器,这样您就可以使用quorum同意主服务器关闭的哨兵。

于 2016-08-09T10:56:26.033 回答