0

我正在使用带有副本集的 mongodb 的应用程序中工作。

在我的副本集中,我有 2 个数据库服务器和 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 再次启动并充当辅助服务器(错误消失) 在此处输入图像描述

更新:即使记录了错误消息,数据库也可以工作。是否有减少/抑制错误消息的机制?

4

1 回答 1

1

这是一个日志记录问题。现在是警告,而不是错误。

2.6 驱动程序(将于本周晚些时候发布)对此的日志记录将不那么冗长。这不是错误,而只是当后台线程检查副本集成员的状态时该节点已关闭的警告。如果你想现在测试,你可以在 master 中使用当前版本:http: //github.com/mongodb/mongo-java-driver

http://github.com/mongodb/mongo-java-driver/commit/ee7543a4f7cc26618cf78eab2a18bd33b3e101cc

于 2011-05-17T13:33:57.717 回答