【问题标题】:MongoDB Replicaset with two members, hot to prevent Primary from becoming secondary when secondary disconnects?MongoDB Replicaset 有两个成员,hot 以防止 Primary 在 Secondary 断开连接时变为辅助?
【发布时间】:2013-12-31 12:20:09
【问题描述】:

当使用具有 2 个服务器的副本集的 MongoDB 时,如果辅助服务器出现故障,则主服务器将变为辅助服务器。即使辅助服务器关闭,我也希望它保持其主要状态。显然,由于该集合中没有其他成员,因此选举过程不能将超过 50% 的选票给予主节点成为主节点,它成为次节点。

【问题讨论】:

    标签: mongodb replication database


    【解决方案1】:

    这就是为什么具有两个活动节点的副本集应始终在单独的服务器上包含arbiter 作为第三个成员。仲裁者是一个 mongod 实例,它不保存任何数据,但允许在初选中投票。

    当Secondary宕机时,仍然会有arbiter来选举剩余节点为主。

    仲裁器是一个非常轻量级的进程,因此它不需要专用服务器。但由于显而易见的原因,它不应该与副本集的另一个成员共享硬件。

    【讨论】:

      【解决方案2】:

      我在 Mongodb 网站上找到了这个 sn-p,它使用投票权重和优先级轻松解决了这个问题: { _id : 'setName', 成员:[ {_id:0,主机:“”,优先级:1}, { _id:1,主机:“”,优先级:0,投票:0 } ] }

      我试过了,效果很好!我可以在不影响主节点的情况下关闭辅助节点。

      【讨论】:

      • 在调整投票“有效”时,它破坏了副本集的关键特性之一:您的配置未启用自动故障转移。如果您的主服务器出现故障,您的辅助服务器将仍然是辅助服务器。更好的方法是添加一个仲裁器,这样您的任何一个数据承载节点都可以被选为主要节点。
      • 谢谢,一般来说你是对的,但在我的情况下,我使用复制的目的与故障转移不同,我们正在副本服务器上进行 BI 和分析和报告,以从主服务器上卸载这些任务一。
      【解决方案3】:

      由于该集合的大多数未在线,您无法选择新的主节点 (http://en.wikipedia.org/wiki/Quorum) 或保留当前主节点。

      您必须始终让大部分集合在线,否则您需要:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

      如果我使用我的记忆力,我记得@Asya 特别指出这是因为在一天结束时 MongoDB 无法知道是否存在网络分区或者该服务器实际上是那里的最后一个服务器,因此没有大多数MongoDB 中配置的成员不会尝试猜测一致性。

      它归结为一个古老的问题,“如果某些东西无法 ping 通,是不是已经关闭了?”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多