2

问题是——当你的 Replica Set 在你的应用程序运行时被迫下线时,所有主流的 Mongo 客户端都会在每个连接中抛出至少一个异常。发生这种情况是因为他们的数据库连接硬连线到曾经是主服务器的物理服务器,并且不再接受查询。因此,虽然 MongoDB 架构师可能认为 StepDown 过程不会造成任何停机,但实际上,如果您根据他们的文档处理连接,每一步都会导致至少一个用户完全崩溃,甚至可能创建数据完整性问题。我希望,可以通过一个简单的包装器来避免这种情况,该包装器捕获一些特定的 Mongo 异常并通过自动重新连接到副本集并重新运行失败的查询来处理它们。如果您已经有解决方案,请分享!

4

1 回答 1

1

你是对的——这是我在主流 ODM 以及 Node.js 的官方原生 MongoDB 驱动程序中所经历的确切行为。

副本集降级将导致我的未完成查询失败,出现“无法在初始种子列表中找到任何有效服务器”、“套接字已关闭”和“ECONNRESET”,即使bufferMaxEntries配置正确,其他查询也会被缓冲。

因此,我开发了Monkster ,为使用流行的Monk ODM的 Node.js 开发人员提供无缝副本集降级和整体高可用性的 MongoDB 集群。

Monkster 是一个 Node.js 包,它为明智的 MongoDB API Monk 提供高可用性。它实现了智能错误处理和重试逻辑,以无缝处理临时网络连接问题和副本集降级。

https://www.npmjs.com/package/monkster

于 2016-06-28T16:19:11.237 回答