STARTUP 상태를 통과하지 못하는 보조 데이터베이스가 포함된 MongoDB 복제본 세트가 있습니다. 데이터베이스는 크지만 지금쯤이면 STARTUP2로 이동되었을 것입니다. 기본 포트에서 보조 포트에 연결할 수 있고 그 반대로도 연결할 수 있으므로 올바른 포트가 열려 있습니다.
답변1
다음 단계에서는 비슷한 문제를 해결했습니다.
PRIMARY 멤버에서:
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
}
PRIMARY 멤버의 이름을 확인하세요. (보통 "_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로 확인해야 합니다.
제 경우에는 기본 호스트 이름을 확인하기 위해 보조 호스트 파일을 추가하는 것을 잊었습니다. 보조 데이터베이스의 호스트 파일을 업데이트하면 보조 데이터베이스의 상태가 STARTUP2로 전환된 다음 SECONDARY로 전환되었습니다.
답변3
이 문제는 Mongo 호스트 간에 연결 문제가 있을 때 발생합니다.
예를 들어 기본이 보조에 연결할 수 있지만 보조가 기본에 연결할 수 없는 경우입니다.
이 경우 기본은 보조에 연결할 수 있으므로 복제본 세트 구성을 허용하지만 보조에서 기본으로의 연결이 없기 때문에 보조는 기본과 동기화할 수 없습니다.