使用分布在3个数据中心的mongo
对于此示例,数据中心名称为A,B,C
当一切顺利时,所有用户流量都指向A
所以mongo primary在A上,mongo设置为:
当出现2个场景时,问题是支持mongo-writes:
方案1不是问题,当没有数据中心网络隧道时,A仍然拥有大部分副本和高度合规性,因此每件事情仍然有效。
方案2不会工作,因为当A停止工作时,所有3个副本(在A上)都无法访问,这样就不会在B或C中重新启动新主服务器,因为大多数副本都已关闭。如何设置我的副本集,以便支持2个场景?
答案 0 :(得分:3)
这是不可能的:你不能拥有'可用的'在整个网络分区和的情况下系统,如果使用MongoDB使用的多数选举方法的DC失败:大多数都在一个DC中,那么它将在分区中存活但不会在DC进行向下,或者大多数需要2个DC,这可以在一个DC停电但不是完全网络故障的情况下继续存在。
您的选择:
要在DC A关闭时保持系统运行,还需要DC B或C中的应用程序服务器,这本身就是一个棘手的问题。例如,如果您使用更多分区容忍的数据库,您可以很容易地拥有一个分裂的大脑'不同DC中的应用程序服务器接受不同但相互冲突的写入的问题。这些问题只能在应用层面解决。