2013-10-17 45 views
0

我们的MongoDB设置使用三个副本集碎片。每个Web服务器在本地运行一个mongos实例,并且客户端node.js进程通过使用Mongoose(3.6.20)和node-mongodb-native连接。所以node-mongodb-native只是连接到localhost上的mongos。node-mongodb-native在复制集主网络故障时不能恢复?

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

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

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

我们是否缺少配置给我们的客户或mongos,或者我们是否需要实现自己的ping?

回答

0

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

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