У меня есть реплика MongoDB с вторичными репликами, которые не пройдут через состояние STARTUP. База данных большая, но к настоящему времени они должны были переместиться в STARTUP2. Правильные порты открыты, поскольку я могу подключиться к вторичным линиям от первичного и наоборот.
Следующие шаги решили аналогичную проблему:
О ПЕРВИЧНОМ члене:
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)
После этого набор реплик пришел в нормальное состояние.
P.S. host.example.com был преобразован в IP-адрес на всех хостах.