![为什么 mongodb 在一段时间后挂起?](https://linux22.com/image/719740/%E4%B8%BA%E4%BB%80%E4%B9%88%20mongodb%20%E5%9C%A8%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E5%90%8E%E6%8C%82%E8%B5%B7%EF%BC%9F.png)
我们的 Mongodb (3.6.3) PRIMARY 服务器存在问题。一段时间后,它进入了仍为 PRIMARY 但不接受连接的状态。问题是它保留了 PRIMARY 角色,因此我们的应用程序崩溃了。在 PRIMARY 服务器上重新启动 Mongodb 会有所帮助,一切都会恢复正常。
我们在亚马逊上的 3 个 Ubuntu m5.4xlarge 实例上托管 mongodb,具有 3000 IOPS EBS 卷。
在崩溃期间,我们与 MongoDB 的连接数比平时多约 30%,但仍远低于限制,也远低于设置为 6430188 的 fs.file-max 设置。其他指标看起来都没有什么可疑之处。RAM、CPU、磁盘和网络使用率与崩溃前和 PRIMARY 重新启动后处于同一水平。我们已经将 MongoDB 从 3.4.14 迁移到 3.6.3,但问题仍然每隔 1-2 天就会出现一次。我们还更改了 PRIMARY 服务器的优先级,并将此角色迁移到另一台主机,使其不连接到任何特定机器。
日志上没有什么有趣的东西。
以下是我们在服务器处于无响应状态时运行的一些命令的输出:
$ mongo -u root -p pass --authenticationDatabase admin --eval 'rs.status()'
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
2018-03-29T02:21:48.272+0000 E QUERY [thread1] Error: network error while attempting to run command 'saslStart' on host '127.0.0.1:27017' :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20
@(auth):6:1
@(auth):1:2
$ mongo -u root -p pass --authenticationDatabase admin --eval 'db.runCommand( { "connPoolStats" : 1 } )'
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
2018-03-29T02:21:48.272+0000 E QUERY [thread1] Error: network error while attempting to run command 'saslStart' on host '127.0.0.1:27017' :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20
@(auth):6:1
@(auth):1:2
$ mongo -u root -p pass --authenticationDatabase admin --eval 'db.runCommand( { serverStatus: 1 } )'
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
2018-03-29T02:21:48.382+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2018-03-29T02:21:48.382+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
知道我们还应该检查什么来调试它吗?
答案1
我遇到了 c5 实例挂起的问题。它运行的 Web 工作负载非常轻(没有 mongoDB),我过去常常通过 SSH 对其进行维护,它过去常常在 1-2 天内挂起,因为它不接受 443 或 SSH 连接。我不得不从 AWS 控制台重新启动它,可以在日志中看到一些磁盘问题,也可以在 AWS 论坛上发布,但没有回复。另请参见下文
https://www.reddit.com/r/aws/comments/7whfhn/new_nitro_based_m5c5_instances_seem_unstable/
建议您尝试 m4 实例。
答案2
事实证明,这是 MongoDB 的一个错误,已在最新的 MongoDB 版本中修复。您可以在此处找到完整故事票。