如何在没有DB的情况下正常关闭Mongo(在副本集中)?

mur*_*lai 1 shutdown mongodb node.js

我的服务器设置是这样的:

2台服务器.mongoDB在两个服务器之间都有副本集.每个都是一个节点.

然后我让我的node.js服务器连接到MongoDB.

当我杀死辅助服务器时,会发生什么.(关闭服务器).主要的MongoDB仍在运行,但Node.js Server与MongoDB有连接问题.即使我添加了服务器,它也无法正常工作.我用mongoose和connect-mongo.

所以发生了什么事?如何正确关闭Mongo节点?

dcr*_*sta 5

如果您有一个包含2个节点的副本集,当一个节点发生故障时,另一个节点将自身降级为辅助节点.如果你没有与slaveOktrue 连接,那么你将无法阅读(在任何一种情况下你都无法写).

这是MongoDB强加的安全措施,它要求副本集的大多数(意思是一半加一)能够相互看到,以确保可以安全地选出主要副本.如果无法看到多数,少数民族中的节点无法知道"另一半"是否选出了主要节点.同时有两个初选将是Very Bad(TM),因为这可能导致相互冲突的更新.

在您只想运行两个节点的情况下,您还可以运行仲裁器以在一个节点关闭或对副本集不可见的情况下断开连接.仲裁器是正常的mongod过程,但不存储任何数据 - 实际上它只参与选举,否则就是空闲.在具有2个"正常"节点和一个仲裁器的副本集中,两个数据保持节点中的任何一个可以在不失去多数的情况下停机.

有关更多信息,请参阅有关副本集的MongoDB文档artibers文档.