node.js - MongoDB - 如何使副本集真正无缝地降级

标签 node.js mongodb connection failover replicaset

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

最佳答案

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

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

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

Monkster is a Node.js package that provides high availability for Monk, the wise MongoDB API. It implements smart error handling and retry logic to handle temporary network connectivity issues and replica set step-downs seamlessly.

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

关于node.js - MongoDB - 如何使副本集真正无缝地降级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26237585/

相关文章:

C# - 通过 HTTP 发送文件

node.js - PM2 - 使用 NodeJS 参数运行 Coffeescript 文件

javascript - Mongoose 中的链静态方法不起作用

ruby-on-rails-3 - 使用 MongoID 在 Rails 中进行标记的良好解决方案

java - Cassandra NoHostAvailableException Java-CQLDriver

Java套接字读取错误异常与返回码

Visual Studio 的 Node.js 工具无法调试

javascript - s3 getdata 在 Alexa-Hosted(Node Js) 上没有返回任何内容

node.js - MongoDB 原子 "findOrCreate": findOne, 如果不存在则插入,但不更新

javascript - 有没有一种方法可以将 MongoDB 中的两个数组合并为一个数组?