Сбой соединения Mongo в производстве

Я столкнулся с производственной ошибкой, надеюсь, кто-нибудь сможет меня просветить. Я запускаю экземпляр MongoDB AMI (1000 IOPS) в AWS в кластере (2 базы данных + арбитр). Мой сервер приложений, подключающийся к базе данных, находится в отдельных экземплярах.

После нескольких недель нормальной работы я получил приведенное ниже исключение, которое фактически отключило мой доступ к базе данных, пока я не перезагрузил узлы сервера приложений. Система довольно малотрафикная, т.е. серверы никоим образом не кажутся загруженными (загрузка ЦП однозначная цифра).

Ниже приведены мои настройки параметров конфигурации mongo:

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

person Greg    schedule 14.10.2013    source источник
comment
У вас есть журналы с сервера mongo? Есть ли причина, по которой это auto_connect_retry ложно?   -  person datasage    schedule 14.10.2013
comment
Нет ошибок в журналах сервера БД - чистые на обоих узлах. Должен ли auto_connect_retry быть истинным в производственной среде?   -  person Greg    schedule 14.10.2013
comment
Я не знаком со всеми драйверами монго, кажется, что в этом случае соединение с монго постоянно. По какой-то причине соединение было разорвано, но восстановить его не удалось.   -  person datasage    schedule 14.10.2013
comment
Повторная попытка автоматического подключения должна быть ложной — это значение по умолчанию, и лучше всего изменить это, только если вам нужно   -  person Trisha    schedule 21.10.2013


Ответы (1)


У меня была такая же проблема, и я исправил ее, изменив конфигурацию mongod.

В файле конфигурации по умолчанию /etc/mongod.conf, входящем в состав пакетов серии 3.0, по умолчанию для bind_ip задано значение 127.0.0.1. Измените этот параметр по мере необходимости для вашей среды или прокомментируйте всю эту строку, чтобы иметь доступ к вашей базе данных из любого места.

Надеюсь, это поможет вам.

person Andrej Lavrinovic    schedule 26.01.2017