我们的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?