java - MongoDB Java 客户端自动故障转移失败

标签 java mongodb mongodb-java

我在本地主机上设置了一个 3 节点副本集:

mongod --port 27017 --dbpath C:/data/repset/rsdb0 --replSet rs0
mongod --port 27018 --dbpath C:/data/repset/rsdb1 --replSet rs0
mongod --port 27019 --dbpath C:/data/repset/rsdb2 --replSet rs0

在我的 Java 客户端中,我正在连接到副本集:

List<ServerAddress> addrs = new ArrayList<>();
addrs.add( new ServerAddress( "HOST" , 27017 ) );
addrs.add( new ServerAddress( "HOST" , 27018 ) );
addrs.add( new ServerAddress( "HOST" , 27019 ) );

MongoClient mongo = new MongoClient( addrs );
System.out.println(mongo.getReplicaSetStatus());

除非我关闭(停止)第三个辅助 mongodb 实例(端口 27019 上的实例),否则一切正常。这是为了模拟服务器故障。

然后,当我运行上面的 java 代码时,我得到:

Feb 17, 2014 10:51:18 PM com.mongodb.ConnectionStatus$UpdatableNode update
WARNING: Server seen down: HOST/192.168.0.5:27019
java.net.ConnectException: Connection refused: connect
   at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)

这似乎意味着副本集没有故障转移。我希望客户端继续读取和写入,直到我恢复“失败”的服务器,然后我希望重新同步。

我想我一定做错了什么,因为自动故障转移是 MongoDB 的基础,但谁能告诉我它是什么?

谢谢!

最佳答案

Which seems to mean that the replica set is not failing over.

应该进行故障转移的不是副本集,而是驱动程序。

什么告诉你事实并非如此?该警告只是通知您其中一个节点位于 DOWN 中。状态。您尚未执行任何操作,因此没有可进行故障转移的内容。

除了连接到设备之外,您是否尝试过读取或写入?我非常确信你可以。

I guess I must be doing something wrong

不,你不需要,除了了解警告的含义

关于java - MongoDB Java 客户端自动故障转移失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841064/

相关文章:

重启kubernetes后mongodb容器的数据变成 "read-only",用glusterfs存储?

java - 将 MongoDb 查询转换为 Java BasicDbObject

java - 在 MongoDB 中打开连接的 SocketTimeout

java - ActiveMQ :'channel inactive for too long' 异常停止代理消息传递

java - 需要了解Hibernate配置的transaction.factory_class

node.js - 如何使用 { $text : { $search: search } } within sails-mongodb?

java - 如何进行从 AggregationOutput 到 POJO 的映射?

java - Gson 将 int 保存为 String

java - 在java中打印垂直直方图时出现格式错误

MongoDB 聚合比较 : group(), $group 和 MapReduce