왜 Mongo가 STARTUP2에 갇혀 있습니까?


13

나는이 Mongo몇 세컨더리으로 복제 세트를. 보조 인스턴스를 호스팅하는 상자에서 데이터베이스가 충돌하여 손실되었습니다.

보조 Mongo인스턴스를 다시 시작 했는데 이제 STARTUP2에서 12 시간 이상 멈췄습니다. 말이 되나요? 문서 Mongo가 RECOVERING 상태로 들어가기 전에 짧은 시간 동안 STARTUP2에 있어야 한다고 말합니다.

STARTUP2는 정확히 무엇을 의미합니까? 기본 데이터베이스에서 데이터베이스를 복사하고 있습니까? Mongo가 Linux에서 실행되고 있다고 가정하면 어떻게 확인할 수 있습니까?

답변:


12

eoinbrazil의 대답은 부분적으로 잘못되었습니다. 새 노드는 오랫동안 STARTUP2에있을 수 있습니다. 게시 된 링크는 다음과 같습니다.

mongod가 해당 구성원의 구성로드를 완료하자마자 복제본 세트의 각 구성원이 STARTUP2 상태가되고, 이때 복제본 세트의 활성 구성원이됩니다. 그런 다음 멤버는 초기 동기화를 수행할지 여부를 결정합니다. 멤버가 초기 동기화를 시작하면 모든 데이터가 복사되고 모든 인덱스가 작성 될 때까지 멤버가 STARTUP2에 남아 있습니다. 이후 멤버가 RECOVERING으로 전환됩니다.

700GB 모음을 관리하고 있으며 새 노드를 추가해도 STARTUP2 상태는 24 시간 이상 유지됩니다. 그러나 데이터베이스가 커지는 지 확인하여 문제가 있는지 확인할 수 있습니다. 새 노드에서 데이터베이스의 크기를 볼 수 있습니다.

show databases

또는 데이터 디렉토리를 관찰하여 여전히 증가하고 있는지 확인할 수 있습니다. (리눅스에서는 ls, df, du, iotop 등의 명령으로 ....)


1
show databases실패not master and slaveOk=false
JDPeckham

로그를 보면 진행 상황을 볼 수 있습니다. 예를 들면 다음과 같습니다. [rsSync] Index Build : 2538000/22982417 11 %
Daniel Benedykt

4

STARTUP2 상태는 노드가 투표 할 수 없음을 의미합니다. MongoD 프로세스가 구성로드를 완료하면 RS 구성원이이 상태로 전환됩니다. 이 상태에서 구성원은 내부 복제 작업을 처리하기 위해 스레드를 만들었지 만 아직 상태를 복구 중으로 변경 한 후 2 차로 변경하지 않았습니다 ( [상태 및 문서의 세부 정보] 참조) .

노드가 잠시 동안이 상태에 있었던 경우 이상한 동작이 발생합니다. 로그가없는 이유를 판별하기 위해 로그없이 분석하는 것은 거의 불가능합니다. rs.status () 및 db.printSlaveReplicationInfo ()를 실행하면 노드의 로컬 그림에 대한 세부 정보가 제공됩니다.

이 문제를 해결하는 일반적인 방법은 노드를 종료하고 해당 데이터 파일 (dbpath에있는 파일)을 지우고 다시 시작하는 것입니다. 초기 동기화 프로세스가 다시 시작되고 SECONDARY로 이동해야합니다. STARTUP2에 다시 멈춘 경우에는 원인에 대한 자세한 정보를 수집하기 위해 로그를 살펴 봐야합니다. 원인은 다양하지만 비정상적인 네트워크 또는 일부 로컬 리소스 경합입니다.

한 가지 주목할 점은 초기 동기화가 진행되는 동안 노드는 STARTUP2에 유지되므로 동기화되는 데이터의 양에 따라 상당한 시간 (잠재적으로)이 될 수 있습니다.


감사. 데이터를 제거하고 Mongo를 다시 시작했습니다. 아직 STARTUP2에 있습니다. 몽고가 작동하는 것 같습니다. CPU를 소비하고 있으며 db.stats데이터베이스 에서 볼 수 있듯이 증가하고 있습니다. 로그는 일부 개체를 말합니다 cloned. 여전히이 문제의 가능한 원인을 찾고 있습니다.
Michael

1
여전히 문제가되는 경우 다른 노드에서 복사를 수행 할 수 있습니다 ( docs.mongodb.org/manual/tutorial/resync-replica-set-member/… 참조 ). 사용중인 버전에 대한 로그 강조 표시 및 세부 사항을 첨부 할 수있는 경우 원인을 가리킬 수 있지만 이는 비정상적인 동작입니다. 네트워크 대기 시간이 어떤지 확인하기 위해 노드 간 핑을 시도 했습니까?
eoinbrazil

ping호스트 사이의 Mongo 2.4.6 은 Ok입니다.
Michael

간헐적 인 네트워킹 문제 일 수 있으므로 핑 시간은 얼마입니까? 이 경우, 비표준 동작이고 로그가 정확히 무슨 일이 일어나고 있는지 결정할 때 로그가 주요 소스이므로 로그 출력 중 일부를 추가하면 훨씬 쉽습니다.
eoinbrazil

여기에 로그를 표시 할 수 없습니다. 그러나 다른 보조 멤버에 연결하려고 시도했습니다. 문제의 원인이 될 수 있습니까?
Michael

1

가능한 원인 중 하나는 여기에 명시된대로 2 차가 "stale"이되는 입니다.

멤버를 재 동기화 할 때 RS에 과부하가 걸리지 않도록하십시오.


0

디스크 공간이 부족하여 STARTUP2 상태 일 수 있습니다. 동기화 할 위치가 없기 때문에 @ STARTUP2 상태 만 유지할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.