我正在使用mongodb和replicaset的应用程序。
在我的replicaset中,我有2个db服务器和1个仲裁器。我正在创建我的mongo对象,如下所示
List<ServerAddress> servers = new ArrayList<ServerAddress>();
servers.add( new ServerAddress( "192.168.1.42", 27017 ) );
servers.add( new ServerAddress( "192.168.1.187", 27017 ) );
servers.add( new ServerAddress( "192.168.1.189", 27017 ) ); //Arbiter
MongoOptions mongoOptions = new MongoOptions();
mongoOptions.autoConnectRetry = true;
mongo = new Mongo(servers, mongoOptions);
mongo.slaveOk();
当所有服务器都启动时,没有任何问题,但当任何一台服务器出现故障时,系统会开始通过无休止的错误消息,如下所示
May 17, 2011 11:24:19 AM com.mongodb.ReplicaSetStatus$Node update
SEVERE: can't update node: 192.168.1.42:27017
java.io.IOException: couldn't connect to [/192.168.1.42:27017] bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:206)
at com.mongodb.DBPort.go(DBPort.java:94)
at com.mongodb.DBPort.go(DBPort.java:75)
at com.mongodb.DBPort.findOne(DBPort.java:129)
at com.mongodb.DBPort.runCommand(DBPort.java:138)
at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:149)
at com.mongodb.ReplicaSetStatus.updateAll(ReplicaSetStatus.java:314)
at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:263)
你能帮我解决这个问题吗?
由于我使用的是副本集,如果一台服务器出现故障,请不要使用新的主服务器并忽略较旧的主服务器?
请查看以下图片以检查副本设置状态
所有服务器和192.168.1.42是主服务器
192.168.1.42已关闭(手动终止),而192.168.1.187是新的主要(现在发生错误)
192.168.1.42再次启动并作为辅助服务器执行(错误消失)
更新: 即使记录了错误消息,数据库也能正常工作。是否有减少/抑制错误消息的机制?
答案 0 :(得分:1)
这是一个记录问题。它现在是一个警告,而不是错误。
2.6驱动程序(本周晚些时候发布)对于此操作的记录将不那么冗长。这不是错误,而是在后台线程检查复制集成员状态时警告该节点已关闭。如果要立即测试,可以在master中使用当前版本:http://github.com/mongodb/mongo-java-driver
http://github.com/mongodb/mongo-java-driver/commit/ee7543a4f7cc26618cf78eab2a18bd33b3e101cc