2013-10-14 65 views
0

我遇到了生產錯誤,希望有人能教育我。我在集羣中運行AWS中的MongoDB AMI實例(1000 IOPS)(2 dbs +仲裁器)。我的應用程序服務器連接到數據庫駐留在不同的實例上。Mongo連接在生產中失敗

經過好幾周的運行,我得到了下面的異常,這有效地關閉了我的數據庫訪問,直到我重新啓動應用服務器節點。該系統流量相當低,即服務器絕不會出現砰的一聲(CPU使用率爲一位數)。

下面是我蒙戈配置選項設置:

auto_connect_retry = false 
connections_per_host = 100 
threads_multiplier = 50 
max_wait_time = 120000 
connect_timeout = 10000 
socket_timeout = 60000 

我需要了解發生了什麼,如果我可以做任何事情,以防止它下一次。

18:14:15.482 AWECluster-akka.actor.default-dispatcher-3 ERROR akka.actor.OneForOneStrategy - Write operation to server /10.0.8.10:27017 failed on database awe_prod_preview 
com.mongodb.MongoException$Network: Write operation to server /10.0.8.10:27017 failed on database awe_prod_preview 
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:153) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:327) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBCollection.update(DBCollection.java:178) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBCollection.save(DBCollection.java:818) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.casbah.MongoCollectionBase$class.save(MongoCollection.scala:573) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.casbah.MongoCollection.save(MongoCollection.scala:866) ~[deps.jar:0.1-SNAPSHOT] 
    at com.novus.salat.dao.SalatDAO.save(SalatDAO.scala:404) ~[deps.jar:0.1-SNAPSHOT] 
    at com.novus.salat.dao.ModelCompanion$class.save(ModelCompanion.scala:272) ~[deps.jar:0.1-SNAPSHOT] 
    at awe.etl._ETL$$anonfun$5$$anon$2.save(ETL.scala:75) ~[shock-etl.jar:0.3.22] 
    at com.novus.salat.dao.BaseDAOMethods$class.save(DAO.scala:127) ~[deps.jar:0.1-SNAPSHOT] 
    at awe.etl._ETL$$anonfun$5$$anon$2.save(ETL.scala:75) ~[shock-etl.jar:0.3.22] 
    at awe.etl.step.Publisher.publishNow(Publish.scala:24) ~[shock-etl.jar:0.3.22] 
    at awe.etl.ETLActor$$anonfun$receive$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(ETLActor.scala:116) ~[shock-etl.jar:0.3.22] 
    at awe.etl.ETLActor$$anonfun$receive$1$$anonfun$applyOrElse$4$$anonfun$apply$4.apply(ETLActor.scala:114) ~[shock-etl.jar:0.3.22] 
    at scala.Option.fold(Option.scala:157) ~[deps.jar:0.1-SNAPSHOT] 
    at awe.etl.ETLActor$$anonfun$receive$1$$anonfun$applyOrElse$4.apply(ETLActor.scala:114) ~[shock-etl.jar:0.3.22] 
    at awe.etl.ETLActor$$anonfun$receive$1$$anonfun$applyOrElse$4.apply(ETLActor.scala:113) ~[shock-etl.jar:0.3.22] 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) ~[deps.jar:0.1-SNAPSHOT] 
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) ~[deps.jar:0.1-SNAPSHOT] 
    at awe.etl.ETLActor$$anonfun$receive$1.applyOrElse(ETLActor.scala:113) ~[shock-etl.jar:0.3.22] 
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498) [deps.jar:0.1-SNAPSHOT] 
    at akka.actor.ActorCell.invoke(ActorCell.scala:456) [deps.jar:0.1-SNAPSHOT] 
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237) [deps.jar:0.1-SNAPSHOT] 
    at akka.dispatch.Mailbox.run(Mailbox.scala:219) [deps.jar:0.1-SNAPSHOT] 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) [deps.jar:0.1-SNAPSHOT] 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [deps.jar:0.1-SNAPSHOT] 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [deps.jar:0.1-SNAPSHOT] 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [deps.jar:0.1-SNAPSHOT] 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [deps.jar:0.1-SNAPSHOT] 
Caused by: java.net.SocketException: Connection timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.6.0_24] 
    at java.net.SocketInputStream.read(SocketInputStream.java:146) ~[na:1.6.0_24] 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) ~[na:1.6.0_24] 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) ~[na:1.6.0_24] 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) ~[na:1.6.0_24] 
    at org.bson.io.Bits.readFully(Bits.java:46) ~[deps.jar:0.1-SNAPSHOT] 
    at org.bson.io.Bits.readFully(Bits.java:33) ~[deps.jar:0.1-SNAPSHOT] 
    at org.bson.io.Bits.readFully(Bits.java:28) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.Response.<init>(Response.java:40) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBPort.go(DBPort.java:142) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBPort.go(DBPort.java:106) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBPort.findOne(DBPort.java:162) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBPort.runCommand(DBPort.java:170) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:100) ~[deps.jar:0.1-SNAPSHOT] 
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142) ~[deps.jar:0.1-SNAPSHOT] 
    ... 29 common frames omitted 
+0

你有來自mongo服務器的日誌嗎?是否有這個'auto_connect_retry'爲false的原因? – datasage

+0

數據庫服務器日誌中沒有錯誤 - 在兩個節點上都清理乾淨。 auto_connect_retry在生產環境中是否應該爲true? – Greg

+0

我不熟悉所有的mongo驅動程序,看起來在這種情況下,與mongo的連接是持久的。無論出於何種原因,連接被終止,但無法重新建立。 – datasage

回答

0

我有同樣的問題,並通過更改mongod配置來修復它。

默認情況下,3.0系列軟件包提供的默認/etc/mongod.conf配置文件的bind_ip設置爲127.0.0.1。根據您的環境需要修改此設置,或者對整行進行註釋以從任何位置訪問您的數據庫。

希望它能幫助你。