mongosync
행동
이 페이지의 내용
mongosync
바이너리는 Cluster-to-Cluster Sync에 사용되는 프라이머리 프로세스입니다. mongosync
는 한 클러스터에서 다른 클러스터로 데이터를 마이그레이션하고 클러스터를 지속적으로 동기화합니다.
mongosync
프로세스 에 대한 개요는 mongosync
정보를 참조하세요.
mongosync
사용을 시작하려면 퀵 스타트 가이드를 참조하세요.
자세한 내용은 상황에 가장 적합한 설치 또는 mongosync
연결 페이지를 참조하세요.
설정
클러스터 독립성
mongosync
소스 클러스터 와 대상 클러스터 간에 컬렉션 데이터를 동기화합니다. mongosync
이(가) 사용자 또는 역할을 동기화하지 않습니다. 따라서 각 클러스터 에서 서로 다른 액세스 권한을 가진 사용자를 만들 수 있습니다.
구성 파일
mongosync
에 대한 옵션은 YAML 구성 파일 에서 설정하다 수 있습니다. --config
옵션을 사용합니다. 예를 예시 다음과 같습니다.
$ mongosync --config /etc/mongosync.conf
사용 가능한 설정에 대한 자세한 내용은 구성을 참조하세요.
클러스터 및 컬렉션 유형
샤딩된 클러스터
클러스터 간 동기화는 샤딩된 클러스터 간의 복제를 지원합니다. 개별 샤드는 소스 클러스터에서 대상 클러스터로 병렬로 복제되지만, 청크 마이그레이션 또는 유사한 소스 업데이트로 인해 복제 중에 문서가 새 소스 샤드로 이동할 수 있습니다.
복제 중에 문서가 소스 샤드 간에 이동하더라도 Cluster-to-Cluster Sync 는 대상 클러스터 에서 궁극적 일관성 을 보장합니다. 자세한 내용은 샤드 클러스터 동기화를 참조하세요.
다중 클러스터
소스 클러스터를 여러 대상 클러스터에 동기화하려면 각 대상 클러스터에 mongosync
인스턴스를 하나를 사용합니다. 자세한 내용은 다중 클러스터 제한 사항을 참조하세요.
고정 사이즈 컬렉션
1.3.0부터 Cluster-to-Cluster Sync는 고정 사이즈 컬렉션을 지원하지만 일부 제한이 있습니다 .
convertToCapped
는 지원되지 않습니다.convertToCapped
를 실행하면mongosync
가 오류와 함께 종료됩니다.cloneCollectionAsCapped
은(는) 지원되지 않습니다.
원본 클러스터의 제한된 컬렉션은 동기화 중에 정상적으로 작동합니다.
대상 클러스터의 제한된 컬렉션에는 동기화 중에 일시적인 변경 사항이 있습니다.
최대 문서 수에는 제한이 없습니다.
최대 컬렉션 크기는 1PB입니다.
mongosync
커밋 중 최대 문서 수 및 최대 문서 크기에 대한 원래 값을 복원합니다.
읽기 및 쓰기
쓰기 차단
mongosync
기본적으로 쓰기 차단을 활성화하지 않습니다. 쓰기 차단을 활성화하면mongosync
가 다음과 같이 쓰기를 차단합니다.
동기화 중 대상 클러스터에서.
commit
이 수신되었을 때 소스 클러스터에서.
쓰기 차단을 활성화하려면 start API를 사용하여 enableUserWriteBlocking
을 true
로 설정합니다. 동기화가 시작된 후에는 쓰기 차단을 활성화할 수 없습니다.
역동기화를 이후에 사용하려면 mongosync
을(를) 시작할 때 쓰기 차단을 활성화해야 합니다.
사용자 권한
enableUserWriteBlocking
을 설정하기 위해서는 mongosync
사용자에게 setUserWriteBlockMode
및 bypassWriteBlockingMode
ActionType을 포함하는 역할이 있어야 합니다.
참고
enableUserWriteBlocking
을 사용하는 경우, bypassWriteBlockingMode
작업 유형이 없는 사용자에 대해서만 쓰기가 차단됩니다. 이 작업 유형이 있는 사용자는 쓰기를 수행할 수 있습니다.
허용되는 읽기
소스 클러스터에 대한 읽기 작업은 항상 허용됩니다.
/progress 엔드포인트가 canWrite
를 true
로 보고하면 소스 및 대상 클러스터의 데이터가 일치합니다.
허용되는 쓰기
mongosync
상태를 확인하려면 /progress API 엔드포인트를 호출합니다. /progress
출력에는 불리언 값인 canWrite
가(이) 포함됩니다.
canWrite
가true
인 경우 대상 클러스터에 쓰는 것이 안전합니다.canWrite
가false
인 경우 대상 클러스터에 쓰지 않습니다.
mongosync
가 동기화되는 동안에는 소스 클러스터에 안전하게 쓸 수 있습니다. canWrite
가 true
가 아닌 경우 대상 클러스터에 쓰지 않도록 합니다.
읽기 및 쓰기 고려
기본적으로 mongosync
는 소스 클러스터의 읽기에 대해 읽기 고려 수준을 "majority"
로 설정합니다. 대상 클러스터에 대한 쓰기의 경우 mongosync
는 쓰기 문제 수준을 "majority"
로 설정하고 j: true 옵션을 사용합니다.
읽기 설정
mongosync
에는 소스 및 대상 클러스터에 연결할 때 primary
읽기 설정(read preference)이 필요합니다. 자세한 내용은 읽기 설정 옵션을 참조하세요.
연속 동기화에 대한 고려 사항
mongosync
을 사용하는 지속적인 동기화 사용 사례의 경우 소스에서 대상으로 전환하기 전에 mongosync
커밋을 확인합니다.
재해 시나리오와 같이 mongosync
가 커밋 되기 전에 소스 클러스터 가 종료되는 경우 대상 클러스터 에 소스 데이터의 일관적인 스냅샷 이 없을 수 있습니다. 학습 내용은 일관성을 참조하세요.
참고
샤딩된 클러스터
샤딩된 클러스터와 지속적으로 동기화 를 실행 때는 커밋 할 때까지 동기화 가 진행되는 동안 소스와 대상 모두에서 밸런서 를 중지해야 합니다.
컬렉션 특성에 대한 일시적인 변경 사항
mongosync
동기화 중에 다음 컬렉션 특성을 일시적으로 변경합니다. 커밋 프로세스 중에 원래 값이 복원됩니다.
변경 | 설명 |
---|---|
Unique Indexes | 소스 클러스터 의 고유 인덱스는 대상 클러스터 의 비고유 인덱스로 동기화됩니다. |
TTL Indexes | 동기화하면 대상 클러스터에서 expireAfterSeconds 가 MAX_INT 의 값으로 설정됩니다. |
Hidden Indexes | 동기화에서는 숨겨진 인덱스가 숨겨지지 않은 인덱스로 복제됩니다. |
쓰기 차단 | 쓰기 차단을 활성화하면
학습 내용은 쓰기 차단을 참조하세요. |
고정 사이즈 컬렉션 | 동기화 하면 고정 사이즈 컬렉션이 허용되는 최대 크기로 설정됩니다. |
더미 인덱스 | 경우에 따라 동기화는 샤딩된 된 컬렉션 또는 데이터 정렬된 컬렉션에 대한 쓰기를 지원 하기 위해 대상에 더미 인덱스를 생성할 수 있습니다. |
롤링 인덱스 빌드
mongosync
마이그레이션 중에는 롤링 인덱스 빌드 를 지원 하지 않습니다. 마이그레이션 중에 인덱스가 롤링 방식으로 빌드되지 않도록 하려면 다음 방법 중 하나를 사용하여 대상 인덱스가 소스 인덱스와 일치하는지 확인합니다.
마이그레이션 하기 전에 소스에 인덱스 를 빌드합니다.
마이그레이션 중에 기본값 인덱스 빌드를 사용하여 소스에 인덱스 를 빌드합니다.
마이그레이션 후 대상에 인덱스 를 빌드합니다.
대상 클러스터
일관성
mongosync
대상 클러스터 에서 궁극적 일관성 을 지원합니다. 커밋 할 때까지 대상 클러스터 에서 읽기 일관성 이 보장되지 않습니다. 커밋하기 전에는 특정 점 에 소스 클러스터와 대상 클러스터가 다를 수 있습니다. 학습 내용 은 연속 동기화 시 고려 사항을 참조하세요.
가 mongosync
mongosync
동기화되는 동안 는 소스에서 대상으로 쓰기를 릴레이할 때 쓰기를 재정렬하거나 결합할 수 있습니다. 특정 문서 의 경우 총 쓰기 횟수는 소스와 대상에 따라 다를 수 있습니다.
트랜잭션은 대상 클러스터 에 원자적으로 표시되지 않을 수 있습니다. 재시도 가능한 쓰기는 대상 클러스터 에서 재시도할 수 없을 수 있습니다.
프로파일링
소스 데이터베이스에서 프로파일링이 활성화된 경우, MongoDB는 <db>.system.profile
이라는 이름의 특수 컬렉션을 만듭니다. 동기화가 완료된 후 Cluster-to-Cluster Sync는 나중에 소스 데이터베이스가 제거되더라도 <db>.system.profile
컬렉션을 대상에서 제거하지 않습니다. <db>.system.profile
컬렉션은 대상에 있는 사용자 데이터의 정확성을 변경하지 않습니다.
조회수
뷰가 있는 데이터베이스가 소스에서 제거되면 대상이 해당 데이터베이스에 빈 system.views
컬렉션을 표시할 수 있습니다. 빈 system.views
컬렉션은 대상에 있는 사용자 데이터의 정확성을 변경하지 않습니다.
시스템 컬렉션
Cluster-to-Cluster Sync는 system collections 대상 클러스터에 복제하지 않습니다.
소스 클러스터에서 dropDatabase
명령을 실행하는 경우 이 변경 사항은 대상 클러스터에 직접 적용되지 않습니다. 대신 Cluster-to-Cluster Sync는 대상 클러스터의 데이터베이스에서 사용자 컬렉션 및 뷰를 삭제하지만 해당 데이터베이스의 시스템 컬렉션은 삭제하지 않습니다.
예를 들어, 대상 클러스터에서:
제거 작업은 사용자가 만든
system.js
컬렉션에 영향을 주지 않습니다.프로파일링을 활성화하면
system.profile
컬렉션은 그대로 유지됩니다.소스 클러스터에서 뷰를 만든 후 데이터베이스를 제거하는 경우, 제거를 복제하면 뷰는 제거되지만 빈
system.views
컬렉션이 남습니다.
이 경우 을(를) 복제하면 dropDatabase
사용자가 생성한 컬렉션이 데이터베이스에서 전부 제거되지만, 시스템 컬렉션은 대상 클러스터에 남습니다.
UUID
mongosync
대상 클러스터에 새 UUID가 있는 컬렉션을 만듭니다. 소스 클러스터와 대상 클러스터의 UUID 간에는 관계가 없습니다. 애플리케이션에 하드 코딩된 UUID (MongoDB에서 권장하지 않음)가 포함되어 있는 경우 마이그레이션된 클러스터에서 제대로 작동하려면 먼저 해당 애플리케이션을 업데이트해야 할 수 있습니다.
정렬
mongosync
소스 클러스터의 자연 정렬 순서를 유지하지 않는 미지정 순서로 대상 cluster에 문서를 삽입합니다. 애플리케이션이 문서 순서에 따라 달라지면서도 이 애플리케이션에 대한 정렬 방법이 지정되지 않은 경우, 해당 애플리케이션을 업데이트해서 예상 정렬 순서를 지정해야 애플리케이션이 마이그레이션된 클러스터에서 제대로 작동하게 됩니다.
성능
회복 탄력성
mongosync
은(는) 복원력이 뛰어나고 치명적이지 않은 오류를 처리할 수 있습니다. "오류" 또는 "실패"라는 단어가 포함된 로그는 mongosync
에 오류가 발생했거나 데이터가 손상되었음을 의미하지 않습니다. 예를 들어, 네트워크에 오류가 발생하면 mongosync
로그에 "오류"라는 단어가 포함될 수 있지만 mongosync
은(는) 여전히 동기화를 완료할 수 있습니다. 동기화가 완료되지 않으면 mongosync
은(는) 치명적인 로그 항목을 기록합니다.
데이터 정의 언어(DDL) 작업
동기화 중에 DDL 작업(db.createCollection()
및 db.dropDatabase()
와 같은 컬렉션 또는 데이터베이스에 작용하는 작업)을 사용하면 마이그레이션 실패 위험이 증가하고 mongosync
성능에 부정적인 영향을 미칠 수 있습니다. 최상의 성능을 위해 동기화가 진행되는 동안에는 소스 클러스터에서 DDL 작업을 수행하지 마세요.
DDL 작업에 대한 자세한 내용은 보류 중인 DDL 작업 및 트랜잭션을 참조하세요.