我在一个replicaset中有一个简单的mongodb设置,有一个实际的实例和一个仲裁器(为了避免冲突)。 随着我们的负荷增加,这是预期扩大复制品包括更多的实例。
如果我通过shell访问mongodb,我正确地得到了PRIMARY >提示符,并且运行rs.status()告诉我一切正常。
我有一个正在访问数据库的node.js服务器,使用github上的mongodb-native驱动,版本为0.9.9-8。 然而,偶尔它只是打破了以下错误: Unable to connect to database: Error: no primary server found
程序给出两个实例的两个地址(正常实例+仲裁者),否则程序日志或mongodb的日志都不能提供任何线索。 任何帮助,欢迎!
那么首先,不要给司机仲裁员的地址,只是主要的 – 司机没有理由与仲裁者谈话,它没有数据。 只有主要连接到它将然后连接到主要只有你的问题应该消失。
你的设置是另一回事 – 拥有一个单一节点的仲裁者并没有购买任何东西,实际上使你的设置变得不可靠,而不是更加稳定。
场景1:仲裁者下线/离线
场景2:主要closures/脱机
正如你所看到的,只用一个主节点就可以实现更好的效果 – 因为所有的仲裁者都会引入一种方法,当主服务器正常工作时,你的服务器将不可用。 当然,另一个select是添加一个辅助节点并转到3个节点 – 那么您实际上可以获得副本集的冗余优势。
这是来自http://docs.mongodb.org/manual/core/replication/
The minimum requirements for a replica set include two members with data, for a primary and a secondary, and an arbiter. In most circumstances, however, you will want to deploy three data members.
您不符合所定义的最低要求。