MongoDB - 跨数据中心主要选举DRP /地理分布式副本集

时间:2015-05-17 18:42:29

标签: mongodb database-replication high-availability eventual-consistency database

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

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

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

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

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

当出现2个场景时,问题是支持mongo-writes:

  1. A-B-C之间没有网络(网络隧道已关闭)
  2. 数据慢跑A正在着火:),假设数据中心不工作,此时所有用户流量都指向B,预计B中的主要选举。
  3. 方案1不是问题,当没有数据中心网络隧道时,A仍然拥有大部分副本和高度合规性,因此每件事情仍然有效。

    方案2不会工作,因为当A停止工作时,所有3个副本(在A上)都无法访问,这样就不会在B或C中重新启动新主服务器,因为大多数副本都已关闭。

    如何设置我的副本集,以便支持2个场景?

1 个答案:

答案 0 :(得分:3)

这是不可能的:你不能拥有'可用的'在整个网络分区的情况下系统,如果使用MongoDB使用的多数选举方法的DC失败:大多数都在一个DC中,那么它将在分区中存活但不会在DC进行向下,或者大多数需要2个DC,这可以在一个DC停电但不是完全网络故障的情况下继续存在。

您的选择:

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

要在DC A关闭时保持系统运行,还需要DC B或C中的应用程序服务器,这本身就是一个棘手的问题。例如,如果您使用更多分区容忍的数据库,您可以很容易地拥有一个分裂的大脑'不同DC中的应用程序服务器接受不同但相互冲突的写入的问题。这些问题只能在应用层面解决。