【发布时间】:2014-02-18 11:12:18
【问题描述】:
我在 localhost 上有一个 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 的基础,但是谁能告诉我它是什么?
谢谢!
【问题讨论】:
标签: java mongodb mongodb-java