mongodb - MongoDb中的偶发(身份验证?)失败和到期

标签 mongodb scala docker reactivemongo akka-http

我在连接到MongoDB副本集时遇到一些问题。
我已经创建了一个mongodb admin用户用于读写。我可以成功登录到终端上的mongo shell,并且 session 从未过期。

在我的Scala应用程序中,我运行带有reactmongo 0.11.9和MongoDB 3.2.1的akka​​-http,并将mongo复制设置在3个独立服务器上的Docker容器内,并向其各自的主机提供永久存储。服务器启动时,我正在验证mongo连接。

它大约有60%的时间可以暂时工作(40%的启动时无法通过身份验证),并且5-20分钟后,我的连接不再通过身份验证,或者连接已终止并且无法重新连接。我没有找到任何有关保持身份验证打开更长的时间,或者为什么连接会断开而无法恢复的任何信息,并且看到身份验证在连接级别如何,只要连接存在就应该保持身份验证。

这是我的mongo连接对象:

class MongodbDataStore(implicit exec: ExecutionContext) {

 var driver1 = new reactivemongo.api.MongoDriver
 var mongoOptions = new MongoConnectionOptions(nbChannelsPerNode = 5,
                                               connectTimeoutMS = 300000, 
                                               authMode = ScramSha1Authentication)
 var counter = 0
 val dbName = "admin"
 val userName = "name"
 val password = "password"
 val credentials = List(Authenticate(dbName, userName, password))
 var connection3 = Array(driver1.connection(List("X.X.X.X","X.X.X.X","X.X.X.X"), mongoOptions, authentications = credentials))

 def getdb: BSONCollection = {
   counter = counter + 1
   val database: reactivemongo.api.DB = connection3(0).db("database")
   database.collection[BSONCollection]("collection")
 }

}

验证过期后,我会收到以下错误消息:
reactivemongo.core.errors.GenericDriverException: MongoError['socket disconnected']
18:23:58.655 [reactivemongo-akka.actor.default-dispatcher-3] ERROR reactivemongo.core.actors.MongoDBSystem - The primary is unavailable, is there a network problem?
18:23:58.655 [reactivemongo-akka.actor.default-dispatcher-3] ERROR reactivemongo.core.actors.MongoDBSystem - The primary is unavailable, is there a network problem?
18:23:59.092 [ReactiveKafka-akka.actor.default-dispatcher-9] ERROR reactivemongo.api.Failover2 - Got an error, no more attempts to do. Completing with a failure...
reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$: MongoError['No primary node is available!']
    at reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$.<clinit>(actors.scala) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.api.Failover2.reactivemongo$api$Failover2$$isRetryable(api.scala:139) ~[reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.api.Failover2$$anonfun$reactivemongo$api$Failover2$$send$2.apply(api.scala:117) [reactivemongo_2.11-0.11.9.jar:0.11.9]
    at reactivemongo.api.Failover2$$anonfun$reactivemongo$api$Failover2$$send$2.apply(api.scala:116) [reactivemongo_2.11-0.11.9.jar:0.11.9]
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.11.7.jar:?]
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) [akka-actor_2.11-2.4.1.jar:?]
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.1.jar:?]
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.1.jar:?]
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.1.jar:?]
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) [scala-library-2.11.7.jar:?]
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) [akka-actor_2.11-2.4.1.jar:?]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) [akka-actor_2.11-2.4.1.jar:?]
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:399) [akka-actor_2.11-2.4.1.jar:?]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.7.jar:?]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.7.jar:?]
[ERROR] [02/17/2016 18:23:59.093] [ReactiveKafka-akka.actor.default-dispatcher-9] [akka.actor.ActorSystemImpl(ReactiveKafka)] Error during processing of request HttpRequest(HttpMethod(POST),http://127.0.0.1:9001/user_login,List(Host: 127.0.0.1:9001, Connection: keep-alive, Cache-Control: no-cache, Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36, Postman-Token:..., Accept: */*, Accept-Encoding: gzip, deflate, Accept-Language: en-US, en;q=0.8),HttpEntity.Strict(application/json,ByteString(32, 32, 32, 32, 32, 32, 32, 123, 34, 107, 101, 121, 34, 58, 34, 117, 83, 101, 68, 84, 111, 67, 97, 76, 108, 77, 69, 111, 78, 109, 89, 67, 69, 108, 108, 80, 104, 79, 110, 51, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 34, 112, 104, 111, 110, 101, 78, 117, 109, 98, 101, 114, 34, 58, 34, 49, 55, 55, 50, 49, 50, 52, 56, 51, 52, 49, 34, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 34, 112, 97, 115, 115, 119, 111, 114, 100, 34, 58, 34)... and [16] more),HttpProtocol(HTTP/1.1))
reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$: MongoError['No primary node is available!']
    at reactivemongo.core.actors.Exceptions$PrimaryUnavailableException$.<clinit>(actors.scala)
    at reactivemongo.api.Failover2.reactivemongo$api$Failover2$$isRetryable(api.scala:139)
    at reactivemongo.api.Failover2$$anonfun$reactivemongo$api$Failover2$$send$2.apply(api.scala:117)
    at reactivemongo.api.Failover2$$anonfun$reactivemongo$api$Failover2$$send$2.apply(api.scala:116)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91)
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)
    at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:399)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

身份验证到期时我缺少某处的设置吗? mongo连接是否有可能由于其他原因失败,如果连接由于其他原因而失败,为什么它无法恢复并找到要写入的主对象?是否有其他人看到或有此问题或类似问题?

最佳答案

事实证明,该错误是由于ReactiveMongo不支持最新的MongoDB引起的。 ReactiveMongo发布更新后,一切正常。

0.11.9不适用于MongoDb 3.2.1

0.11.10可以与MongoDb 3.2.1一起使用

关于mongodb - MongoDb中的偶发(身份验证?)失败和到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454799/

相关文章:

MongoDB 查询 - 返回切片数组

json - Mongodb:根据另一个元素重命名数组中的json元素

scala - Value withFilter不是Cats IO的成员以进行理解

scala - 如何解决 "Can' t分配请求的地址: Service 'sparkDriver' failed after 16 retries"when running spark code?

scala - 为什么在两种情况下在特征中使用抽象修饰符时编译器会提示?

docker - 在内联 docker exec 命令中使用时, yarn 不在 Laradock 工作空间的路径中

mongodb - 在嵌套文档上使用 mongo 进行 MapReduce

mongodb - NoSQL(MongoDB) 中的提交和磁盘持久化

python - Docker找不到配置文件

python - Neo4j Docker 连接失败