将MongoDB与2台服务器的副本集一起使用时,如果辅助服务器发生故障,则主服务器将成为辅助服务器。我希望它能维持它的主要状态,即使次要故障也是如此。显然,由于集合中没有其他成员,选举过程不能给主要成员提供超过50%的选票而成为次要成员。
答案 0 :(得分:3)
这就是为什么具有两个活动节点的副本集应始终在单独的服务器上包含arbiter作为第三个成员。仲裁者是一个mongod实例,它不保存数据,但允许在初选中投票。
当辅助设备发生故障时,仍然会有仲裁器将剩余的节点选为主设备。
仲裁器是一个非常轻量级的进程,因此它不需要专用服务器。但由于显而易见的原因,它不应与副本集的另一个成员共享硬件。
答案 1 :(得分:2)
我在Mongodb网站上找到了这个代码片段,使用投票权重和优先级轻松解决了这个问题: { _id:'setName', 成员:[ {_ id:0,主持人:“”,优先级:1}, {_ id:1,host:“”,priority:0,votes:0} ] }
我尝试过,它有效!我可以在不影响小学的情况下关闭中学。
答案 2 :(得分:1)
由于该套装的大部分都不在线,因此您无法选择新的主要版本(http://en.wikipedia.org/wiki/Quorum)或保留当前版本。
您必须始终拥有大部分在线设置,否则您需要:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
如果我使用我的精神记忆能力,我记得@Asya特别说明这是因为在一天结束时,MongoDB无法知道是否存在网络分区,或者该服务器实际上是那里的最后一个服务器,因此没有多数MongoDB中已配置的成员只是不会尝试猜测一致性。
这是一个古老的问题,"如果某些东西不能ping,它会失效吗?"