gpt4 book ai didi

MongoDB——跨数据中心初选DRP/Geographically Distributed Replica Sets

转载 作者:可可西里 更新时间:2023-11-01 10:03:42 26 4
gpt4 key购买 nike

使用分布在 3 个数据中心的 mongo

对于此示例,数据中心名称是 A、B、C

当一切顺利时,所有用户流量都指向 A

所以 mongo primary 在 A 上,mongo 设置是:

  • A 中的 3 个服务器(具有高优先级)
  • B 中的 1 个服务器(低优先级)
  • C 中的 1 个服务器(优先级 0)

问题是在发生 2 种情况时支持 mongo 写入:

  1. A-B-C 之间没有网络(网络隧道已关闭)
  2. 数据中心 A 着火了 :),假设数据中心不工作,此时所有用户流量都指向 B,预计 B 将进行初选。

场景 1 不是问题,当没有数据中心网络隧道时,A 仍然有大部分副本和高优先级,所以一切都还在工作。

场景 2 不会工作,因为当 A 将停止工作时,所有 3 个副本(在 A 上)都无法访问,这样就不会在 B 或 C 中重新生成新的主副本,因为大多数副本已关闭。

我如何设置我的副本集以使其支持这两种情况?

最佳答案

这是不可能的:在整个网络分区的情况下,您不能拥有“可用”系统在 DC 故障的情况下,如 MongoDB 使用的多数选举方法:要么大多数在一个 DC 中,那么它将在分区中幸存下来,但不会在 DC 出现故障时幸存下来,或者大多数需要 2 个 DC 启动,这可以在一个 DC 出现故障时幸存下来,但不会出现整个网络故障。

您的选择:

  • 接受分区问题并将设置更改为 2-2-1。 不可靠的隧道应该是可以解决的,如果 DC 的整个网络出现故障,您就处于场景 2。
  • 接受 DC 问题并坚持您的配置。最有可能出现的问题可能是大规模网络问题和大规模停电,而不是火灾。
  • 使用支持其他类型容错的数据库。然而,这并不是 Elixir ,因为这需要进行其他必须充分理解的权衡。

要在数据中心 A 出现故障时保持系统正常运行,还需要数据中心 B 或 C 中的应用程序服务器,这本身就是一个棘手的问题。例如,如果您使用分区容错性更强的数据库,则很容易出现“脑裂”问题,即不同 DC 中的应用程序服务器接受不同但冲突的写入。此类问题只能在应用层面解决。

关于MongoDB——跨数据中心初选DRP/Geographically Distributed Replica Sets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com