MongoDB 샤드 클러스터는 여러 서버 또는 파편에 데이터를 배포하여 대형 데이터 세트를 수평으로 확장하는 강력한 방법을 제공하므로 데이터베이스가 높은 처리량과 많은 양의 데이터를 효율적으로 처리 할 수 있습니다.
MongoDB 샤드 클러스터는 주로 세 가지 주요 구성 요소, 즉 파편, 구성 서버 및 몽고스 라우터로 구성됩니다. 각 샤드는 클러스터 데이터의 하위 집합을 포함하는 복제 세트입니다. 복제 세트는 각 샤드의 데이터에 대한 데이터 중복성 및 고 가용성을 보장합니다. 구성 서버는 데이터 청크를 파편으로 매핑하는 것을 포함하여 클러스터에 대한 메타 데이터 및 구성 세부 사항을 저장합니다. Mongos는 클라이언트 응용 프로그램과 인터페이스하고 샤드 키를 기반으로 적절한 파편으로 쿼리를 지시하는 라우팅 서비스 역할을합니다.
MongoDB의 샤드는 선택한 샤드 키를 통해 파편을 가로 질러 데이터를 분할하여 수평 스케일링을 가능하게하도록 설계되었습니다. 이 파티션은 파편들 사이에 고르게 분포 된 데이터 청크를 생성하여 MongoDB가 읽기 및 쓰기로드를 전파 할 수있게합니다. Compound Shard 키의 샤드 키 또는 접두사를 포함하는 쿼리는 Mongos에 의해 특정 파편으로 효율적으로 라우팅하여 쿼리 오버 헤드를 줄이고 성능을 향상시킬 수 있습니다. 쿼리에 샤드 키가 포함되어 있지 않으면 Mongos는 모든 파편에 쿼리를 방송 할 수 있으며 이는 덜 효율적입니다.
클러스터의 파편은 확장 가능합니다. 가동 중지 시간없이 데이터 볼륨 또는 쿼리로드의 성장을 수용하기 위해 추가 파편을 동적으로 추가 할 수 있습니다. 각 샤드는 결함 공차를 보장하기위한 복제 세트이며 전체 클러스터 설계는 고 가용성을 지원합니다. MongoDB는 파편 간의 데이터 균형을 자동으로 균형을 잡고 파편들 사이에서 짝수 워크로드를 유지하기 위해 필요에 따라 데이터 청크를 분산시킵니다.
구성 서버는 클러스터의 메타 데이터를 관리하고 클러스터의 구조 및 데이터 배포에 대한 정보를 저장하는 데 중요한 역할을합니다. 구성 서버는 고 가용성을 위해 복제 세트로 배포되어야합니다. 몽고스 라우터와 동기화되는데,이 메타 데이터는 로컬로 쿼리를 효율적으로 라우팅합니다. 구성 서버에서 일관된 메타 데이터 상태는 샤드 클러스터의 올바른 작동에 필수적입니다.
Mongos 인스턴스는 클라이언트 응용 프로그램과 샤드 클러스터간에 인터페이스 계층을 제공하는 쿼리 라우터 역할을합니다. 구성 서버의 메타 데이터를 기반으로 작업을 올바른 파편으로 라우팅하여 샤드 환경의 복잡성을 추상화합니다. 로드 밸런싱 및 고 가용성을 위해 여러 Mongos 인스턴스를 배포 할 수 있으며 네트워크 대기 시간을 줄이기 위해 응용 프로그램 서버에 가깝게 배치해야합니다.
샤드 클러스터의 중요한 측면은 샤드 키를 선택하는 것입니다. SHARD 키는 데이터가 분할되는 방식을 관리하여 클러스터 성능 및 데이터 배포에 직접 영향을 미칩니다. 적절한 샤드 키를 선택하려면 작업 부하를 분석하려면 파편 전체에 걸쳐 읽기 및 쓰기 작업을 균일하게 배포 할 수 있습니다. 특정 샤드 키로 샤드 컬렉션이 생성되면 Shard 키를 변경하는 것은 복잡하며 일반적으로 시간이 많이 걸리는 데이터 마이그레이션 프로세스가 포함됩니다. 따라서 신중한 샤드 키 선택 선불이 중요합니다.
생산 환경에서 샤드 클러스터의 모범 사례에는 결함 공차 및 고 가용성을 보장하기 위해 여러 데이터 센터의 복제 세트로 구성 서버와 파편을 배포하는 것이 포함됩니다. 각 샤드는 3 노드 복제 세트를 권장합니다. 샤딩이 향후 계획된 경우 단일 샤드 샤드 클러스터를 사용할 수 있지만 클러스터는 최소 2 개의 파편이 필요합니다.
Sharding은 분산 된 데이터 저장소를 통해 스토리지 제한을 늘려 데이터베이스 용량을 향상시킵니다. 또한 읽기 및 쓰기를 배포하여 성능을 향상시켜 더 높은 처리량 워크로드를 처리 할 수 있습니다. 또한, 샤드 클러스터는 샤드 정전 동안 부분 가용성을 유지할 수 있습니다. 영향을받는 샤드의 데이터는 액세스 할 수 없을 수 있지만, 클러스터는 사용 가능한 파편에 대한 요청을 계속합니다.
샤드 클러스터에서 데이터는 샤드 키로 정의 된 범위 내에서 청크로 나뉩니다. MongoDB는 데이터 분할 및 파편 전체에 균형을 이루는 방법에 영향을 미치는 청크 크기를 구성합니다. 청크 마이그레이션 및 재조정 프로세스는 클러스터에 의해 자동으로 처리되어 데이터 배포 및 최적의 성능을 유지합니다. 이 자동 밸런싱은 단일 샤드가 성능 병목 현상 또는 스토리지 핫스팟이되지 않도록합니다.
샤드 클러스터는 또한 영역 (TAG-AWARE SHARDING)을 지원하여 구역 협회에 따라 데이터를 그룹화하고 특정 파편으로 제한 할 수 있습니다. 이 기능을 사용하면보다 제어 된 데이터 지역을 허용하며 규정 준수 또는 지리적 배포 요구 사항에 유용합니다. 구역에는 샤드 키 값의 범위가 할당되며 데이터 배치를보다 세분화하기위한 파편과 관련이 있습니다.
제한 및 운영 고려 사항에는 여러 파편 관리의 복잡성과 운영 오버 헤드 증가가 포함됩니다. 구성 요소와 구성 서버 메타 데이터 및 라우팅을 유지 관리하는 오버 헤드 간 네트워크 대기 시간은 제대로 관리되지 않으면 성능에 영향을 줄 수 있습니다. 성능 저하를 피하려면 여러 몽고스 라우터 및 구성 서버를 배포하고 건강을 모니터링하는 것이 필수적입니다. 과도한 몽고스 인스턴스는 구성 서버와의 커뮤니케이션과 클러스터 성능에 영향을 줄 수 있으므로 몽고스 인스턴스의 수는 균형을 이루어야합니다.
일부 제한은 샤드 수, 저장 및 샤드 또는 클러스터 당 자원 제한을 포함하여 MongoDB API 용 Azure Cosmos DB와 같은 MongoDB 샤드 클러스터의 호스팅 또는 관리 버전에 적용됩니다. 이러한 플랫폼 별 한도는 다양하며 프리미엄 계층에서 더 높을 수 있습니다.
전반적으로 MongoDB 샤드 클러스터는 여러 노드에 투명하게 데이터 및 작업을 분배하여 지능형 데이터 파티셔닝 및 복제 세트 배포를 통해 성능, 결함 허용 및 확장 성을 보장하여 대규모로 성장하는 데이터 세트로 현대 애플리케이션을 확장하기위한 강력한 기반을 제공합니다.