Назад | Перейти на главную страницу

MongoDB не реплицируется должным образом

Я использую 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 на вторичных узлах. Я думаю, что узлы перешли в устаревшее состояние.