2014-10-07 73 views
1

的问题是 - 当你的副本集被迫下台您的应用程序运行时,所有的主流蒙戈客户将抛出每个连接至少一个例外。发生这种情况是因为它们的数据库连接硬连线到过去是主要的物理服务器,并且不再接受查询。所以,虽然MongoDB的建筑师可能会认为,降压过程中不会产生任何的停机时间,在现实中,如果你按照他们的文档处理连接,每个下台将造成一个完全成熟的崩溃了至少一个用户,甚至可能会造成数据的完整性问题。我希望这可以通过一个简单的包装器来避免,它捕获一些特定的Mongo异常并通过自动重新连接到副本集来处理它们,并重新运行失败的查询。如果你已经有这个解决方案,请分享!我特别感兴趣的是可以与任何主要Mongo驱动程序一起使用Node.JS的解决方案。MongoDB的 - 如何让副本集下台真正的无缝

+0

的驱动程序会自动重新连接到主。应用程序需要处理选举发生的时间段,其中某些操作将作为错误返回,但没有理由导致任何类型的崩溃或数据完整性问题。我认为处理故障转移场景的确切方式往往是特定于应用程序的,因此您没有看到它的一般解决方案。 – wdberkeley 2014-10-08 16:34:00

+0

我相信绝大多数应用程序会受益于这种情况的相同处理。特别是,由于降级过程足够快(几秒钟),因此大多数应用程序宁愿将查询结果延迟几秒钟,而不是获取异常,并找到避免使其看起来像最终用户崩溃的方法。 – 2014-10-08 21:59:27

回答

0

你是正确的 - 这是确切的行为我既主流ODM厂商以及官方本地的MongoDB驱动程序Node.js的经历

即使bufferMaxEntries是附加查询将被缓冲起来之前,副本集降压将导致我未完成的查询失败,并显示“无法在初始种子列表中找到任何有效的服务器”,“套接字关闭”和“ECONNRESET”正确配置。

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

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

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

相关问题