우리는 3 개의 노드가있는 MongoDB 복제 세트를 사용하고 있습니다. 데이터베이스는 2 억개 이상의 매우 큰 레코드이며 디스크 (WiredTiger MongoDB 엔진)에서 700GB를 차지합니다. 주로 문서에 삽입 (하루에 수백만)이 수행되고 그 후에 읽거나 업데이트됩니다.큰 데이터베이스에서 MongoDB 초기 동기화
보조 멤버에서 디스크를 교체 한 후 데이터 폴더가 비어 있고 초기 동기화가 시작되었습니다. 로그를 살펴보면이 인덱스를 구축하는 기록을 복사하려면 약 7 시간 후 30 시간이 걸렸지 만이 방법 oplog 그 동안 업데이트 삽입 된 모든 레코드/포함하기에 너무 많은이었다
2016-11-16T23:32:03.503+0100 E REPL [rsBackgroundSync] too stale to catch up -- entering maintenance mode
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] our last optime : (term: 46, timestamp: Nov 15 10:03:15:8c)
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] oldest available is (term: 46, timestamp: Nov 15 17:37:57:30)
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] See http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember
을
먼저 우리는이 멤버를 다시 시작하고 재 동기화가 시작 :
2016-11-16T23:47:22.974+0100 I REPL [rsSync] initial sync pending
2016-11-16T23:47:22.974+0100 I REPL [ReplicationExecutor] syncing from: x3:27017
2016-11-16T23:47:23.219+0100 I REPL [rsSync] initial sync drop all databases
2016-11-16T23:47:23.219+0100 I STORAGE [rsSync] dropAllDatabasesExceptLocal 5
2016-11-16T23:53:09.014+0100 I REPL [rsSync] initial sync clone all databases
데이터 폴더를 살펴보면, 모든 파일이 삭제되었고, 그들은 성장하기 시작했다. 그러나 약 8 시간이 지나면 데이터베이스의 5 %가 거의 다시 동기화되지 않았습니다.
그런 대용량 동기화에는 어떤 접근 방식을 사용합니까?
oplog 크기를 늘릴 생각 이었지만 전체 복제 세트의 가동 중지 시간이 필요했습니다. 다운 타임없이 어떤 접근법을 사용할 수 있습니까?
Google Compute Engine에서 호스팅되므로 다음 단계로 스냅 샷을 사용할 수 있습니다. 1) 2 개의 중재자가 추가되었습니다 (하나는 작동하지 않음). 2) 하나의 정상적인 보조 및 해제 된 파일 시스템을 종료합니다. 3) 스냅 샷을 생성하고, 건강 상태를 녹여서 다시 온라인 상태로 만듭니다. 4)이 스냅 샷 이미지가있는 새 디스크를 만들어 "건강에 좋지 않은"서버에 마운트했습니다. 5) 데이터 파일을 복사했습니다 (전체 디스크를 교체 할 수는 있지만). 6) MongoDB를 시작하고 중재자를 제거하고 새 디스크를 마운트 해제합니다. 모든 것을 완료하는 데 약 2 시간이 걸렸습니다. – ssasa