大脑分裂后,Redis和哨兵的行为如何?

大脑分裂后,Redis和哨兵的行为如何?,redis,nosql,quorum,splitbrain,Redis,Nosql,Quorum,Splitbrain,问题是关于Redis服务器和sentinels的配置 有两个子网,我希望总共有4台redis服务器,每个子网2台。由于可能存在连接问题,我想配置sentinels,以允许大脑分割实现高可用性 因此,当连接问题发生时,会出现两个Redis设置,它们独立工作一段时间 现在的问题是,子网连接恢复后会发生什么。哨兵会发现大脑分裂和两个主人?下一步,他们将只选择主,而第二个将降级为从?来自幸存主机的数据将被推送到降级主机,他需要删除在连接问题期间获得的所有数据差异 我可以配置一些东西以便合并数据吗?在re

问题是关于Redis服务器和sentinels的配置

有两个子网,我希望总共有4台redis服务器,每个子网2台。由于可能存在连接问题,我想配置sentinels,以允许大脑分割实现高可用性

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

现在的问题是,子网连接恢复后会发生什么。哨兵会发现大脑分裂和两个主人?下一步,他们将只选择主,而第二个将降级为从?来自幸存主机的数据将被推送到降级主机,他需要删除在连接问题期间获得的所有数据差异


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

在redis-and中有两种处理HA的方法

哨兵 如果主机未按预期工作,Sentinel可以启动故障切换 一个从机升级为主机的过程,另一个附加 从机被重新配置为使用新的主机和应用程序 使用Redis服务器时会通知要使用的新地址 连接

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

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

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

在上面的配置中,假设S2可以 以完全对称的方式进行未经授权的故障切换。 客户可能会无限期地给双方写信,而且没有办法 了解分区何时恢复,正确的配置是什么 第一,为了防止永久性的大脑分裂。所以请 始终在三个不同的箱子中部署至少三名哨兵

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

该数据将永远丢失,因为当分区恢复时 主设备将被重新配置为新主设备的从属设备,丢弃 它的数据集

问:幸存主机的数据将被推送到降级主机,他需要删除在连接问题期间获得的所有数据差异

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

Redis群集 这是干什么用的

能够在多个节点之间自动分割数据集。 当节点的子集被删除时继续操作的能力 遇到故障或无法与其他用户通信 集群

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

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

回到你的场景 引用

部署Sentinel之前需要了解的基本事项

您至少需要三个Sentinel实例才能实现健壮的部署。 这三个Sentinel实例应该放在计算机或 被认为以独立方式出现故障的虚拟机。所以 例如,在上执行的不同物理服务器或虚拟机 不同的可用性区域

注意,您也可以在客户端机器上放置Sentinel——这种方法在redis演示中大量使用

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