问题是关于Redis服务器和标记配置。
有两个子网,我想总共有4台redis服务器,每个子网有2台。由于可能存在连接问题,我想配置哨兵以便大脑分裂以获得高可用性。
因此,当连接问题发生时,会出现两个Redis设置,它们可以独立工作一段时间。
现在问题是在恢复子网连接后会发生什么。哨兵会发现大脑分裂和两个大师?接下来他们只会选择主人,第二人会被降级为奴隶吗?幸存的主人的数据会被推送到降级的主人,他需要放弃在连接问题中获得的所有数据差异吗?
我可以配置一些东西以便合并数据吗?
答案 0 :(得分:3)
在 redis - sentinel和redis cluster中,有两种方法可以处理HA。
如果主服务器未按预期工作,Sentinel可以启动故障转移 奴隶被提升为主人的过程,另一个是额外的 从属服务器被重新配置为使用新的主服务器和应用程序 使用Redis服务器通知有关新的地址时使用 连接
问:由于可能存在连接问题,我想配置标记以便大脑分割以实现高可用性
这是使用 sentinel 的反模式。这是一个类似的例子,文档中解释了偶数个节点
示例1:只有两个哨兵,不要做这个
在上面的配置中,我们创建了两个主人(假设S2可以 未经授权的故障转移)以完全对称的方式。 客户可以无限期地写信给双方,也没有办法 了解分区何时愈合哪种配置是正确的 一,为了防止永久性裂脑情况。所以,请 总是在三个不同的盒子中部署至少三个Sentinels。
问:现在问题是在恢复子网连接后会发生什么。哨兵会发现大脑分裂和两个大师?
这个数据将永远丢失,因为当分区将愈合时, master将被重新配置为新master的slave,丢弃 它的数据集。
问:来自幸存的主人的数据会被推送到降级的主人,他需要放弃在连接问题期间获得的所有数据差异吗?
是
问:我可以配置一些东西以便合并数据吗? 你不能, redis 永远不会合并任何东西
这是beast的内容是什么?
能够在多个节点之间自动拆分数据集。 在节点的子集是时继续操作的能力 遇到失败或无法与其他人沟通 集群。
所以它基本上是一个多作家解决方案。但它不支持合并操作either
Redis群集设计避免了相同键值的冲突版本 在多个节点中配对,就像Redis数据模型一样 并不总是可取的。 Redis中的值通常非常大;它是 通常可以查看包含数百万个元素的列表或排序集。也 数据类型在语义上很复杂。转移和合并这些 一种价值观可能是一个主要的瓶颈和/或可能需要 应用程序端逻辑的非平凡参与,额外的内存 存储元数据,等等。
引自here
在部署之前了解Sentinel的基本知识
您需要至少三个Sentinel实例才能实现强大的部署。 应将三个Sentinel实例放入计算机或 被认为以独立方式失败的虚拟机。所以 例如,执行不同的物理服务器或虚拟机 不同的可用区域。
请注意,您也可以将哨兵放在客户端计算机上 - 这种方法在 redis 演示https://redis.io/topics/sentinel
中大量使用您也可以使用群集解决方案,但配置起来比较困难+它对多键操作有一些限制,而且您仍然 需要提供大多数节点,以防其中一个子网关闭以具有某种HA