mongodb java驱动程序在rs.steppdown()后找不到主控程序

mongodb java驱动程序在rs.steppdown()后找不到主控程序,mongodb,grails,Mongodb,Grails,Grails2.2.1 MongoDB GORM插件1.2 当使用副本集运行时,我发现在java驱动程序中,退出主副本会导致以下无限重复的错误 2013-09-09 16:00:19,655 [SimpleAsyncTaskExecutor-1] ERROR grails.app.services.plover.UserStreamAnalyzerService - Exception while handling status update event: org.springframewor

Grails2.2.1 MongoDB GORM插件1.2

当使用副本集运行时,我发现在java驱动程序中,退出主副本会导致以下无限重复的错误

2013-09-09 16:00:19,655 [SimpleAsyncTaskExecutor-1] ERROR grails.app.services.plover.UserStreamAnalyzerService  - Exception while handling status update event: org.springframework.data.mongodb.UncategorizedMongoDbException: not talking to master and retries used up; nested exception is com.mongodb.MongoException: not talking to master and retries used up
。。。 原因:org.springframework.data.mongodb.uncategorizedmongodbeexception:未与主机通话,重试次数已用完;嵌套异常是com.mongodb.MongoException:不与主机对话,重试次数用完

stacktrace在这里:

Caused by: com.mongodb.MongoException: not talking to master and retries used up
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:314)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:316)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
at com.mongodb.DBCursor._check(DBCursor.java:368)
at com.mongodb.DBCursor._hasNext(DBCursor.java:459)
at com.mongodb.DBCursor._fill(DBCursor.java:518)
at com.mongodb.DBCursor.toArray(DBCursor.java:553)
at com.mongodb.DBCursor.toArray(DBCursor.java:542)
at org.grails.datastore.mapping.mongo.query.MongoQuery$MongoResultList.<init>(MongoQuery.java:908)
at org.grails.datastore.mapping.mongo.query.MongoQuery$36.doInDB(MongoQuery.java:536)
at org.grails.datastore.mapping.mongo.query.MongoQuery$36.doInDB(MongoQuery.java:508)
}

副本集配置已根据文档在Datasource.groovy中设置:

grails {
mongo {
    replicaSet = ["macbookpro.local:27017", "macbookpro.local:27018", "macbookpro.local:27019"]
}
}

因此,我不是独立运行,副本集服务器正确同步,所有服务器都正常运行。但是,如果我强制一个新服务器成为主服务器,那么所有访问都会失败,就好像驱动程序没有将查询重定向到新的主服务器一样


我遗漏了什么?

没有人回答这个问题,所以我决定从副本集恢复是不起作用的。相反,我去了sharding,希望在应用服务器和集群之间分层mongos能够提供足够的保护

答案是明确的“某种程度的”。以前,当我按下主按钮(或模拟崩溃)时,应用程序服务器将无限期挂起。现在我只得到了一些关于在给定集群中找不到主集群的错误,然后系统恢复。这不是一个理想的解决方案,但至少比永久性失败要好

grails {
mongo {
    replicaSet = ["macbookpro.local:27017", "macbookpro.local:27018", "macbookpro.local:27019"]
}