我的服务器设置是这样的:
2 台服务器。 mongoDB 在两台服务器之间都有副本集。每个都是一个 Node 。
然后我将我的 Node.js 服务器连接到 MongoDB。
发生的事情是..当我杀死辅助服务器时。 (关闭服务器)。主要的 MongoDB 仍在运行,但 Node.js 服务器当时与 MongoDB 存在连接问题。即使我重新添加了服务器,它也不起作用。我使用 mongoose 和 connect-mongo 。
那么,发生了什么?如何正确关闭Mongo Node ?
最佳答案
如果您有一个包含 2 个 Node 的副本集,当一个 Node 出现故障时,另一个 Node 会将自身降级为辅助 Node 。如果您没有使用 slaveOk
true 进行连接,那么您将无法读取(并且在任何一种情况下您都将无法写入)。
这是 MongoDB 实现的一项安全措施,它要求副本集的大多数(即一半加一)能够互相看到,以确保可以安全地选举主副本。如果看不到多数,少数的 Node 就无法知道“另一半”是否选举了主 Node 。同时进行两个初选会非常糟糕 (TM),因为这可能会导致更新冲突。
在您只想运行两个 Node 的情况下,您还可以运行仲裁器来打破平局,以防一个 Node 出现故障或对副本集不可见。仲裁器是一个普通的 mongod 进程,但不存储任何数据——本质上它只参与选举,否则闲置。在具有 2 个“正常” Node 和 1 个仲裁器的副本集中,两个数据保存 Node 中的任何一个都可以在不失去多数 Node 的情况下关闭。
有关更多信息,请参阅the MongoDB documentation on replica sets和 the documentation on artibers .
关于mongodb - 如何在不关闭数据库的情况下正确关闭Mongo(在副本集中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523404/