我正在尝试将一个副本数据库部署到一个不同端口的服务器上,并与其连接。如果我只使用单个ServerAddress并像这样直接连接到主数据库,那么一切都是可以的:
mongoClient =new MongoClient(new ServerAddress("104.236.106.53", 27000));
morphia = new Morphia();
ds = morphia.createDatastore(mongoClient, "morphiaDB");一切都很正常。但是当我尝试像这样使用List<ServerAddress>时:
List<ServerAddress> lstServer = new ArrayList<ServerAddress>();
lstServer.add(new ServerAddress("104.236.106.53", 27000));
lstServer.add(new ServerAddress("104.236.106.53", 27002));
lstServer.add(new ServerAddress("104.236.106.53", 27001));
mongoClient = new MongoClient(lstServer);
morphia = new Morphia();
ds = morphia.createDatastore(mongoClient, "morphiaDB");它将以这个错误结束:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches {serverSelectors=[ReadPreferenceServerSelector{readPreference=primary}, LatencyMinimizingServerSelector{acceptableLatencyDifference=15 ms}]}. Client view of cluster state is {type=ReplicaSet, servers=[{address=G-Server-1:27000, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.UnknownHostException: G-Server-1}}, {address=G-Server-1:27001, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.UnknownHostException: G-Server-1}}, {address=G-Server-1:27002, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.UnknownHostException: G-Server-1}}]
at com.mongodb.BaseCluster.getServer(BaseCluster.java:82)
at com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:654)
at com.mongodb.DBTCPConnector.access$300(DBTCPConnector.java:39)
at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:503)
at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:451)
at com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:409)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:182)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
at com.mongodb.DBCollection.insert(DBCollection.java:161)
at com.mongodb.DBCollection.insert(DBCollection.java:107)
at com.mongodb.DBCollection.save(DBCollection.java:965)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:949)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1013)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1000)
at com.learn.DAO.AuthorBookDAO.main(AuthorBookDAO.java:18)谁能告诉我这个错误是什么,或者给我一些如何解决它的提示?
发布于 2014-12-23 02:56:52
在谷歌上搜索之后。我发现java不能识别哪个是主数据库
GWReplication:PRIMARY> cfg=rs.conf();
{
"_id" : "GWReplication",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "G-Server-1:27000"
},
{
"_id" : 1,
"host" : "G-Server-1:27001"
},
{
"_id" : 2,
"host" : "G-Server-1:27002"
}
]
}这是我的mongodb的默认配置。java不能理解G-Server-1,所以我把它改成了上面的ip
GWReplication:PRIMARY> rs.config();
{
"_id" : "GWReplication",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "104.236.106.53:27000"
},
{
"_id" : 1,
"host" : "104.236.106.53:27001"
},
{
"_id" : 2,
"host" : "104.236.106.53:27002"
}
]
}现在它工作得很好。我知道这是一个相当愚蠢的修复方法,但老实说,我不知道如何让java识别我的域名,也不知道如何在ubuntu服务器上配置它(我在digitalocean主机上部署mongodb,这是我第一次使用ubuntu并自行配置服务器) -_-
发布于 2015-12-27 02:49:37
将副本集更改为ip地址实际上是错误的做法。
试试这个:
lstServer =新建ArrayList();lstServer.add(新建服务器(“G-ServerAddress-1”,27000));lstServer.add(新建ServerAddress(“G-ServerAddress-1”,27002));lstServer.add(新建ServerAddress(“G-服务器-1”,27001));mongoClient =新建List
这应该可以解决这个问题。Spring Mongo实际上使用主机名和端口号来确定副本集中配置的主副本。
https://stackoverflow.com/questions/27607773
复制相似问题