Redis与哨兵在分裂大脑后表现如何?

时间:2018-02-05 19:20:11

标签: redis nosql quorum splitbrain

问题是关于Redis服务器和标记配置。

有两个子网,我想总共有4台redis服务器,每个子网有2台。由于可能存在连接问题,我想配置哨兵以便大脑分裂以获得高可用性。

因此,当连接问题发生时,会出现两个Redis设置,它们可以独立工作一段时间。

现在问题是在恢复子网连接后会发生什么。哨兵会发现大脑分裂和两个大师?接下来他们只会选择主人,第二人会被降级为奴隶吗?幸存的主人的数据会被推送到降级的主人,他需要放弃在连接问题中获得的所有数据差异吗?

我可以配置一些东西以便合并数据吗?

1 个答案:

答案 0 :(得分:3)

redis - sentinelredis cluster中,有两种方法可以处理HA。

哨兵

  

如果主服务器未按预期工作,Sentinel可以启动故障转移   奴隶被提升为主人的过程,另一个是额外的   从属服务器被重新配置为使用新的主服务器和应用程序   使用Redis服务器通知有关新的地址时使用   连接

问:由于可能存在连接问题,我想配置标记以便大脑分割以实现高可用性

这是使用 sentinel 的反模式。这是一个类似的例子,文档中解释了偶数个节点

  

示例1:只有两个哨兵,不要做这个

     

在上面的配置中,我们创建了两个主人(假设S2可以   未经授权的故障转移)以完全对称的方式。   客户可以无限期地写信给双方,也没有办法   了解分区何时愈合哪种配置是正确的   一,为了防止永久性裂脑情况。所以,请   总是在三个不同的盒子中部署至少三个Sentinels。

问:现在问题是在恢复子网连接后会发生什么。哨兵会发现大脑分裂和两个大师?

  

这个数据将永远丢失,因为当分区将愈合时,   master将被重新配置为新master的slave,丢弃   它的数据集。

问:来自幸存的主人的数据会被推送到降级的主人,他需要放弃在连接问题期间获得的所有数据差异吗?

问:我可以配置一些东西以便合并数据吗? 你不能, redis 永远不会合并任何东西

Redis群集

这是beast的内容是什么?

  

能够在多个节点之间自动拆分数据集。   在节点的子集是时继续操作的能力   遇到失败或无法与其他人沟通   集群。

所以它基本上是一个多作家解决方案。但它不支持合并操作either

  

Redis群集设计避免了相同键值的冲突版本   在多个节点中配对,就像Redis数据模型一样   并不总是可取的。 Redis中的值通常非常大;它是   通常可以查看包含数百万个元素的列表或排序集。也   数据类型在语义上很复杂。转移和合并这些   一种价值观可能是一个主要的瓶颈和/或可能需要   应用程序端逻辑的非平凡参与,额外的内存   存储元数据,等等。

返回您的场景

引自here

  

在部署之前了解Sentinel的基本知识

     

您需要至少三个Sentinel实例才能实现强大的部署。   应将三个Sentinel实例放入计算机或   被认为以独立方式失败的虚拟机。所以   例如,执行不同的物理服务器或虚拟机   不同的可用区域。

请注意,您也可以将哨兵放在客户端计算机上 - 这种方法在 redis 演示https://redis.io/topics/sentinel

中大量使用

您也可以使用群集解决方案,但配置起来比较困难+它对多键操作有一些限制,而且您仍然 需要提供大多数节点,以防其中一个子网关闭以具有某种HA