【问题标题】:How Redis with sentinels behave after split brain?带哨兵的 Redis 在裂脑后如何表现?
【发布时间】:2018-07-15 17:52:02
【问题描述】:

问题是关于 Redis 服务器和哨兵配置的。

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

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

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

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

【问题讨论】:

    标签: redis nosql quorum splitbrain


    【解决方案1】:

    redis 有两种处理 HA 的方法 - sentinelredis cluster

    哨兵

    如果 master 没有按预期工作,Sentinel 可以启动故障转移 一个slave被提升为master的过程,另一个附加的 从站被重新配置为使用新的主站,并且应用程序 使用 Redis 服务器时获知要使用的新地址 连接

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

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

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

    在上面的配置中我们创建了两个master(假设S2可以 未经授权的故障转移)以完全对称的方式。 客户端可能会无限期地给双方写信,没有办法 了解分区何时恢复正确的配置 一,为了防止永久性的脑裂状况。所以,请 始终在三个不同的盒子中部署至少三个哨兵。

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

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

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

    是的

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

    Redis 集群

    beast 是干什么用的?

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

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

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

    回到你的场景

    引用here

    部署前需要了解的有关 Sentinel 的基本知识

    您需要至少三个 Sentinel 实例才能进行强大的部署。 三个 Sentinel 实例应放入计算机或 被认为以独立方式发生故障的虚拟机。所以 例如在不同的物理服务器或虚拟机上执行 不同的可用区。

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

    中大量使用

    您也可以使用 cluster 解决方案,但它更难配置 + 它对多键操作有一些限制,您仍然需要提供多数节点数量,以防其中一个子网出现某种 HA 故障

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      相关资源
      最近更新 更多