gpt4 book ai didi

mongodb - 如何在不关闭数据库的情况下正确关闭Mongo(在副本集中)?

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:47 25 4
gpt4 key购买 nike

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

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 setsthe documentation on artibers .

关于mongodb - 如何在不关闭数据库的情况下正确关闭Mongo(在副本集中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com