我们有以下多数据中心场景
Node1 --- Node3
| |
| |
| |
--- ---
Node2 Node4
Node1
和Node3
形成副本(类似)集(表示高可用性)
Node 2/Node 4
是优先级为0的成员(他们永远不应该成为Primaries - 仅用于阅读目的)
警告 - 根据我们配置VPN /防火墙的方式,由于Node 2
和Node4
彼此无法访问,因此设计此类情况的最佳方法是什么?
基本上排除了Node2
和Node4
之间的任何心跳。
非常感谢
答案 0 :(得分:0)
以下是我的想法:
不要让成员保持在一个集合中。因此,您需要另一个arbiter或将node2 / 4设置为non-voting成员。
由于我使用的是C#驱动程序,我不确定您是否使用相同的技术来构建应用程序。无论如何,事实证明,C#驱动程序从种子(您在连接字符串中提供的服务器)获取完整的可用服务器列表,并尝试对所有这些服务器进行负载均衡请求。在您的情况下,我猜您将在所有3个数据中心运行应用程序服务器。但是,您可能不希望节点1接受来自不同数据中心的连接。这将显着减慢应用程序。所以你需要进一步的设置:
答案 1 :(得分:0)
如果您使2和4的投票也为0,那么它应该在故障转移中起作用,就像1和2只符合条件一样。如果你将它们设置为隐藏你必须强制连接它们,MongoDB驱动程序会故意正常地避免它们。
除了那个节点2和4可以直接访问任何主要节点之外,我认为没有其他问题。