Я использую mongoDB для своего приложения, размещенного на 3 экземплярах Amazon. У меня есть первичный узел с наивысшим приоритетом (100) и 2 вторичных узла с приоритетом 99 и 98. Несколько дней назад я начал получать исключения MongoCursorExceptions при доступе к первичному узлу. Я думал, что это как-то связано с тем, что на моем основном сервере заканчиваются ресурсы и он медленно отвечает, поэтому решил переключить один из дополнительных узлов на основной.
Я изменил приоритеты со 100, 99 и 98 на 1, 100, 98, но это не переключило мой вторичный сервер на первичный. При проверке статуса моего набора реплик я обнаружил, что 3 узла не синхронизировались должным образом, так как время работы отставало более чем на 17 часов. Реальная проблема заключается в том, что время работы обоих вторичных узлов постоянно, в то время как для первичного узла оно продолжает увеличиваться. Я также подтвердил, что мои вторичные узлы не имеют обновленных данных, используя запрос slaveOk. Ниже приводится статус, который я получил на своем основном узле:
PRIMARY> rs.status()
{
"set" : "rs_a",
"date" : ISODate("2012-02-28T09:34:50Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "server1.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1330421648000,
"i" : 2
},
"optimeDate" : ISODate("2012-02-28T09:34:08Z"),
"self" : true
},
{
"_id" : 1,
"name" : "server2.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "server3.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
}
],
"ok" : 1
}
В журналах много не нашел. В нескольких случаях журналы на вторичном сервере сообщали о проблемах с подключением к первичному серверу. Но интересно то, что все обратные записи выполняются правильно на вторичных узлах. Я хотел бы, чтобы все серверы всегда были в актуальном состоянии, чтобы я мог читать с любого узла, поскольку именно поэтому я использую mongoDB в первую очередь.
Мне удалось решить эту проблему, перезапустив mongodb на вторичных узлах. Я думаю, что узлы перешли в устаревшее состояние.