Описание проблемыUncaught исключение «MongoCursorException» с сообщением «Не удалось получить соединение: ни один из кандидатов сервер не найден»
У меня есть реплика набор три члена, и PHP Web передний конец, что а) записывает рекорд , а затем b) делает .find() в коллекции и возвращает все документы в базе данных.
Чтобы лучше понять, как работают наборы реплик, я сделал следующее:
- остановил службу Монго на первичном сервере (mongohost1). веб-страница продолжала работать.
- остановил службу mongo на сервере, который получил повышение до первичного (mongohost2). На данный момент, хотя у меня есть другой хост mongo (mongohost3) с той же базой данных, веб-приложение PHP выходит из строя с вышеупомянутым сообщением об ошибке.
Я ожидал, что система позволит мне хотя бы прочитать записи из базы данных, даже если запись не удалась.
Что я проверил/пытался до сих пор:
Все хосты достижимы. Я пытаюсь pinging по имени хоста из каждой коробки, и он работает alll.
Вот как набор реплик был настроен в соответствии с mongohost3:
jlrs0:SECONDARY> cfg=rs.config()
{
"_id" : "jlrs0",
"version" : 5,
"members" : [
{
"_id" : 0,
"host" : "monghost1.test.mm.org:27017",
"priority" : 3
},
{
"_id" : 1,
"host" : "mongohost2.test.mm.org:27017",
"priority" : 2
},
{
"_id" : 2,
"host" : "mongohost3.test.mm.org:27017",
"priority" : 2
}
]
}
jlrs0:SECONDARY>
и статус каждого члена в набор репликации на mongohost3:
jlrs0:SECONDARY> rs.status()
{
"set" : "jlrs0",
"date" : ISODate("2014-11-19T15:16:21Z"),
"myState" : 2,
"members" : [
{
"_id" : 0,
"name" : "mongohost1.test.mm.org:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : Timestamp(1416419914, 1),
"optimeDate" : ISODate("2014-11-19T17:58:34Z"),
"lastHeartbeat" : ISODate("2014-11-19T15:16:20Z"),
"lastHeartbeatRecv" : ISODate("2014-11-19T14:06:49Z"),
"pingMs" : 0
},
{
"_id" : 1,
"name" : "mongohost2.test.mm.org:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : Timestamp(1416419914, 5),
"optimeDate" : ISODate("2014-11-19T17:58:34Z"),
"lastHeartbeat" : ISODate("2014-11-19T15:16:17Z"),
"lastHeartbeatRecv" : ISODate("2014-11-19T14:10:58Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "mongohost3.test.mm.org:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 451417,
"optime" : Timestamp(1416419914, 5),
"optimeDate" : ISODate("2014-11-19T17:58:34Z"),
"self" : true
}
],
"ok" : 1
}
Вот PHP-код для подключения:
$m = new MongoClient("mongodb://mongohost1.test.mm.org:27017,mongohost2.test.mm.org:27017,mongohost3.test.mm.org:27017/?replicaSet=jlrs0");
Я все еще читаю на наборах реплик и т. Д., Поэтому я уверен, что это нечто hing, что я пропустил/пренебрег настройкой. Например, я не настроил arbitor ... Не уверен, что это связано или нет, но на всякий случай, я думал, что упомянул об этом. Я не уверен, что еще проверить.
Спасибо.