如何正确closuresMongo(在副本集)没有数据库closures?

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

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

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

发生什么事情是..当我杀死辅助服务器。 (closures服务器)。 主要的MongoDB依然在运行,但Node.js服务器与MongoDB有连接问题。 即使我添加了服务器,它没有工作。 我使用mongoose和连接mongo。

所以发生了什么事? 如何正确closuresMongo节点?

如果您的主服务器在您closures辅助服务器后仍然是主服务器,那么这是一个节点的驱动程序问题。 无论如何,你总是应该有一个偶数个副本节点的仲裁者,“为什么”在mongodb的文档中有很好的logging。

如果这是一个node.js问题,你使用的是什么版本的node-mongodb-native? 2个月前我有一些不同的复制问题,但是最新的版本已经修复了。 驱动程序的最后一个复制问题已closures9月9日,你应该试着用最后的标签版本( V0.9.6.18,因为我写这个)

如果您有一个具有2个节点的副本集,则当一个节点closures时,另一个节点将自己降级到次要节点。 如果你没有连接slaveOk ,那么你将无法阅读(在任何情况下,你将无法写)。

这是MongoDB实施的一项安全措施,要求复制套件中的大多数(意思是半加一)能够互相看到,以确保可以安全地选出一个主节点。 如果大多数人看不到,less数人的节点就不知道“另一半”是否选了小学。 同时有两个初选会是Very Bad(TM),因为这可能导致更新冲突。

在只想运行两个节点的情况下,如果一个节点发生故障或对副本集不可见,也可以运行一个仲裁器来打破关系。 仲裁者是一个正常的mongod过程,但不存储任何数据 – 实质上它只参与选举,否则是空闲的。 在具有2个“正常”节点和一个仲裁器的副本集中,两个数据保持节点中的任何一个可以下降而不失去大多数。

有关更多信息,请参阅副本集上的MongoDB文档以及artibers上的文档 。