在多数据中心配置副本集

时间:2014-03-12 07:05:51

标签: mongodb replication

我们有以下多数据中心场景

Node1 --- Node3
    |        |
    |        |
    |        |
   ---      ---
  Node2    Node4

Node1Node3形成副本(类似)集(表示高可用性

Node 2/Node 4是优先级为0的成员(他们永远不应该成为Primaries - 仅用于阅读目的

警告 - 根据我们配置VPN /防火墙的方式,由于Node 2Node4彼此无法访问,因此设计此类情况的最佳方法是什么?

基本上排除了Node2Node4之间的任何心跳。

非常感谢

2 个答案:

答案 0 :(得分:0)

以下是我的想法:

  1. 不要让成员保持在一个集合中。因此,您需要另一个arbiter或将node2 / 4设置为non-voting成员。

  2. 由于我使用的是C#驱动程序,我不确定您是否使用相同的技术来构建应用程序。无论如何,事实证明,C#驱动程序从种子(您在连接字符串中提供的服务器)获取完整的可用服务器列表,并尝试对所有这些服务器进行负载均衡请求。在您的情况下,我猜您将在所有3个数据中心运行应用程序服务器。但是,您可能不希望节点1接受来自不同数据中心的连接。这将显着减慢应用程序。所以你需要进一步的设置:

    1. 将节点3/4设置为hidden个节点。
    2. 对于在节点3/4的同一数据中心中运行的应用程序,请不要在连接字符串中配置replicaSet参数。但是配置readPreference = secondary。如果需要编写,则必须将另一个连接字符串配置为主节点。

答案 1 :(得分:0)

如果您使2和4的投票也为0,那么它应该在故障转移中起作用,就像1和2只符合条件一样。如果你将它们设置为隐藏你必须强制连接它们,MongoDB驱动程序会故意正常地避免它们。

除了那个节点2和4可以直接访问任何主要节点之外,我认为没有其他问题。