У меня есть набор реплик MongoDB с вторичными, которые не проходят состояние STARTUP. База данных большая, но они должны были перейти в STARTUP2 к настоящему моменту. Правильные порты открыты, так что я могу подключиться к вторичным с первичного и наоборот.
решение1
Следующие шаги решили аналогичную проблему:
О ПЕРВИЧНОМ члене:
rs.status() { "set" : "ShardD", "date" : ISODate("2015-08-28T17:01:40.647Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "host.example.com:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1167, "optime" : Timestamp(1440780623, 1), "optimeDate" : ISODate("2015-08-28T16:50:23Z"), "electionTime" : Timestamp(1440780252, 2), "electionDate" : ISODate("2015-08-28T16:44:12Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "192.0.2.222:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 584, "optime" : Timestamp(0, 0), "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2015-08-28T17:01:40.601Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 }, { "_id" : 2, "name" : "192.0.2.223:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 676, "lastHeartbeat" : ISODate("2015-08-28T17:01:40.643Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 } ], "ok" : 1
}
Проверьте имя ПЕРВИЧНОГО участника (обычно оно равно "_id" : 0)
Если имя имеет форму доменного имени, попробуйте переписать имя в IP-адрес.Изменение имен хостов в наборе реплик:
cfg = rs.conf() cfg.members[0].host = "192.0.2.221" rs.reconfig(cfg)
После этого набор реплик пришел в нормальное состояние.
PS host.example.com был преобразован в IP-адрес на всех хостах.
решение2
Для этого требуется, чтобы как первичный сервер преобразовывал имя хоста в IP-адрес вторичного сервера, так и вторичный сервер преобразовывал имя хоста первичного сервера в IP-адрес.
В моем случае я забыл добавить файл hosts для вторичного сервера, чтобы разрешить имя хоста первичного сервера. После того, как я обновил файл hosts во вторичном сервере, состояние вторичного сервера перешло в STARTUP2, а затем в SECONDARY.
решение3
Эта проблема возникает, когда возникают проблемы с подключением между хостами Mongo.
Например, если первичный узел может подключаться к вторичным, но вторичные узлы не могут подключаться к первичному.
В этом случае первичный сервер примет конфигурацию набора реплик, поскольку он может подключаться к вторичным серверам, однако вторичные серверы не смогут синхронизироваться с первичным сервером, поскольку отсутствует связь между вторичным сервером и первичным сервером.