2016-11-17 8 views
1

우리는 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 크기를 늘릴 생각 이었지만 전체 복제 세트의 가동 중지 시간이 필요했습니다. 다운 타임없이 어떤 접근법을 사용할 수 있습니까?

답변

1

가능한 경우 파일 시스템 스냅 샷을 사용하는 것이 가장 좋은 해결책입니다.

oplog 파일이 나머지 데이터 파일과 동일한 디스크 공간에있는 한 mongod 노드를 직접 스냅 샷 할 수 있습니다. 사전 대처책을 "종료"하거나 다른 작업을 수행 할 필요가 없습니다.

how to make restore with snapshot

그런 다음 당신은 새로운 노드의 데이터 디렉토리에 해당 파일을 복사 mongod를 시작합니다.

파일 시스템 스냅 샷을 사용할 수없는 경우 작동중인 mongod 데이터 디렉토리의 복사본을 가져 오는 다른 방법으로 다운 타임이 발생할 경우 쉽게 무엇이 가능합니까? 정지 시간을 가질 수 없다면 복제 자 세트가 기본적으로 "하나의 노드 RS"인 동안 물론 몇 개의 중재자를 추가하고 다른 보조를 잠시 중지 할 수 있습니다 (데이터 디렉토리의 복사본 가져 오기).

+0

Google Compute Engine에서 호스팅되므로 다음 단계로 스냅 샷을 사용할 수 있습니다. 1) 2 개의 중재자가 추가되었습니다 (하나는 작동하지 않음). 2) 하나의 정상적인 보조 및 해제 된 파일 시스템을 종료합니다. 3) 스냅 샷을 생성하고, 건강 상태를 녹여서 다시 온라인 상태로 만듭니다. 4)이 스냅 샷 이미지가있는 새 디스크를 만들어 "건강에 좋지 않은"서버에 마운트했습니다. 5) 데이터 파일을 복사했습니다 (전체 디스크를 교체 할 수는 있지만). 6) MongoDB를 시작하고 중재자를 제거하고 새 디스크를 마운트 해제합니다. 모든 것을 완료하는 데 약 2 시간이 걸렸습니다. – ssasa