我们的MongoDB设置使用三个副本集碎片。每个and服务器在本地运行一个mongos实例,客户端node.js进程通过使用Mongoose (3.6.20)和节点-mongodb-本机进行连接。所以节点-mongodb-本机只是连接到本地主机上的mongos。
当一个副本集主目录下降很难(我们可以通过在主目录上执行“ifdown eth0”来模拟这个过程),mongos就会正确地检测到这一点,并且还会检测到已经选择了一个新的主服务器。到现在为止还好。但是,节点-mongodb-本机与mongos实例的连接仍然是打开的,但没有功能,需要重新启动节点procs。
我们的假设是,mongos只会扼杀与死机和节点的任何已建立的连接--mongodb本机将重新连接,但情况似乎并非如此;服务器和操作系统都认为这些连接是开放的。相反,在主stepDown上,客户端发生故障,连接被关闭并重新打开。
我们正在研究socketTimeoutMS,但这似乎是不正确的,因为它会导致仅仅空闲的连接断开。
我们是缺少了客户端配置还是mongos配置,还是必须实现自己的pinging操作?
发布于 2013-10-18 05:48:53
根据实验和下面的MongoDB错误,这似乎只是mongos (或者,如果您喜欢的话,客户端库)的一个缺点。现在它看起来像是‘在你的应用程序中写你自己的点击逻辑,当失败的时候触发一个重新连接’,所以这就是我们正在做的。
https://stackoverflow.com/questions/19432871
复制相似问题