node-mongodb-native在副本集主网络故障时无法恢复?

时间:2013-10-17 16:59:33

标签: mongodb mongoose node-mongodb-native

我们的MongoDB设置使用三个副本集分片。每个Web服务器在本地运行一个mongos实例,客户端node.js进程使用Mongoose(3.6.20)和node-mongodb-native连接。所以node-mongodb-native只是连接到localhost上的mongos。

当副本集主服务器发生故障时(我们可以通过在主服务器上执行'ifdown eth0'来模拟这个)mongos正确检测到这一点,并且还检测到新的主服务器已经被选中。到现在为止还挺好。但是node-mongodb-native与mongos实例的连接仍然是开放的但不起作用,并且需要重启节点procs。

我们的假设是,mongos只会杀死任何已建立的与死主要连接的连接,而node-mongodb-native将重新连接,但情况似乎并非如此;服务器和操作系统都认为这些连接是开放的。相比之下,在主要的stepDown上,客户端故障转移正常,连接已关闭并重新打开。

我们正在查看socketTimeoutMS,但这似乎不正确,因为它会导致仅仅空闲的连接断开连接。

我们是否缺少客户端或mongos的配置,还是我们必须实施自己的ping操作?

1 个答案:

答案 0 :(得分:0)

基于实验和以下MongoDB错误,这似乎只是mongos(或者,如果您愿意,还有客户端库)的缺点。现在它看起来像'在你的应用程序中编写自己的ping逻辑并在失败时触发重新连接',这就是我们正在做的事情。

https://jira.mongodb.org/browse/SERVER-9041