繁体   English   中英

崩溃后,Mongodb java驱动程序无法重新连接到主驱动程序

[英]Mongodb java driver cannot reconnect to primary after a crash

使用java驱动程序尝试使用mongodb的故障转移容量时遇到问题。

我有一个主要/辅助mongodb集群,即server1和server2。

当我杀死主服务器1以模拟故障时,server2在几秒钟内变为主服务器,而我的应用程序(使用java驱动程序访问mongo)开始使用新的主服务器2。

当我重新启动server1时,它会在几秒钟内恢复它的主要角色但是我的应用程序,而不是连接到server1仍然尝试连接到server2,因为它现在处于辅助状态失败! 所有请求都对此错误感到满意:

com.mongodb.MongoServerSelectionException: Unable to connect to any server that matches {serverSelectors=[ReadPreferenceServerSelector{readPreference=primary}, LatencyMinimizingServerSelector{acceptableLatencyDifference=15 ms}]}

我使用的是mongodb 2.6和java驱动程序2.12。 我没有将任何参数传递给使用我的集群的所有节点创建的MongoClient。

欢迎任何帮助。

问候,

卢瓦克

由于问题超过一年,我将使用MongoDB 3.0Java驱动程序3.0.4作为我的解决方案。

假设在端口27017,27018和27019上的副本集(建议的副本集中最小节点数)中有3个节点(1个主节点和2个辅助节点)。 所以我可以用上面的配置创建一个连接,如下所示:

MongoClient mongo = new MongoClient(asList(new ServerAddress("localhost",27017),
            new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019),
            new MongoClientOptions.builder().requiredReplicaSetName("replset_name").build()));

请注意,使用MongoClientOptions ,驱动程序保证上述服务器确实是所述副本集的成员。 如果您没有副本集,可以跳过此步骤。

在故障转移期间,驱动程序将自动切换到新的主服务器并开始向其发送请求,但您必须处理CRUD操作期间抛出的异常

因为还有一些人到达这个问题并试图回答我自己回答。

问题不再发生,我不知道为什么。 我现在将我的驱动程序更新到2.12.3版本。 mongodb方面没有更新。

感谢那些试图提供帮助的人。

我们遇到了同样的问题。 将Mongo java驱动程序升级到2.13.3版似乎解决了这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM