MongoDB는 밸런서 프로세스를 통해 샤드 간의 데이터 마이그레이션을 처리합니다. 밸런서는 샤딩된 클러스터의 샤드 전체에 데이터가 고르게 분산되도록 하는 역할을 담당합니다. 샤드 간 데이터 마이그레이션과 관련된 단계는 다음과 같습니다.
1. 균형 조정
- 자동 밸런싱: MongoDB는 한 샤드에서 다른 샤드로 청크를 마이그레이션하여 자동으로 데이터 밸런싱을 조정합니다. 이렇게 하면 데이터가 샤드 전체에 고르게 분산됩니다.
2. 청크 마이그레이션
- 수동 마이그레이션: MongoDB는 특정 컬렉션에 대해 수동 청크 마이그레이션을 수행할 수 있습니다. 이는 대량 삽입 중에 데이터를 배포하는 데 유용합니다.
3. 범위 마이그레이션
- 자동 범위 마이그레이션: MongoDB는 한 번에 한 범위씩 데이터를 마이그레이션합니다. 밸런서는 다음 범위 마이그레이션을 시작하기 전에 현재 마이그레이션의 삭제 단계가 완료될 때까지 기다리지 않습니다.
4. 리샤딩
- 리샤드-샤드 기술: MongoDB는 리샤딩을 사용하여 클러스터의 샤드 전체에 데이터를 빠르게 분산시킵니다. 여기에는 원하는 분할 키와 다른 임시 분할 키로 의도적으로 분할한 다음 원하는 분할 키로 다시 분할하는 작업이 포함됩니다.
5. 청크 마이그레이션 절차
- 소스 샤드: 소스 샤드가 내부 명령을 받으면 이동을 시작합니다. 마이그레이션 프로세스 중에 청크에 대한 작업이 소스 샤드로 전송됩니다.
- 대상 샤드: 대상 샤드는 대상에 존재하지 않는 소스에 필요한 인덱스를 구축합니다. 대상 샤드는 청크의 문서를 요청하기 시작하고 데이터 복사본을 받기 시작합니다.
- 동기화: 청크의 최종 문서를 수신한 후 대상 샤드는 동기화 프로세스를 시작하여 마이그레이션 중에 발생한 마이그레이션된 문서에 대한 변경 사항이 있는지 확인합니다.
- 메타데이터 업데이트: 소스 샤드는 구성 데이터베이스에 연결하고 청크의 새 위치로 클러스터 메타데이터를 업데이트합니다.
- 삭제 단계: 소스 샤드가 메타데이터 업데이트를 완료하고 청크에 열린 커서가 없으면 소스 샤드가 문서 사본을 삭제합니다[3][5].
6. 점보 청크
- 점보 청크: 청크가 최대 크기를 초과하거나 청크의 문서 수가 허용되는 최대치를 초과하는 경우 MongoDB는 청크를 마이그레이션하지 않습니다. 대신 MongoDB는 청크 분할을 시도합니다. 분할이 실패하면 MongoDB는 청크를 마이그레이션하려는 반복적인 시도를 피하기 위해 청크에 점보 레이블을 지정합니다[3].
7. 모니터링 및 유지 관리
- 모니터링: MongoDB는 밸런서 프로세스를 모니터링하고 데이터가 샤드 전체에 고르게 분산되었는지 확인하는 도구를 제공합니다.
- 유지 관리: MongoDB는 밸런서를 관리하고 데이터 마이그레이션이 효율적이고 확장 가능하도록 보장하는 명령을 제공합니다.
결론
MongoDB는 밸런서 프로세스를 통해 샤드 간의 데이터 마이그레이션을 처리하므로 샤드 클러스터의 샤드 전체에 데이터가 고르게 분산됩니다. 밸런서는 한 번에 한 범위씩 데이터를 마이그레이션하고 MongoDB는 밸런서 프로세스를 모니터링하고 관리하는 도구를 제공합니다.
인용:[1] https://stackoverflow.com/questions/48438644/migration-data-between-shards-with-mongodb
[2] https://hackernoon.com/optimize-data-migration-in-mongodb-resharding-techniques-for-speed-and-scalability
[3] https://www.mongodb.com/docs/v3.0/core/sharding-chunk-migration/
[4] https://www.mongodb.com/community/forums/t/shard-migration-leads-to-service-disruption/247228
[5] https://www.mongodb.com/docs/v6.2/core/sharding-balancer-administration/