MongoDB 샤드 클러스터: 종합 가이드
MongoDB 샤딩은 여러 서버 또는 "샤드"에 데이터를 수평으로 확장하고 배포하는 강력한 기술입니다. 이 접근 방식을 사용하면 MongoDB는 데이터를 더 작은 청크로 나누고 여러 샤드에 분산시켜 증가하는 로드를 처리하고 성능을 향상시킬 수 있습니다. 데이터베이스 인프라를 효율적으로 관리하고 확장하려면 샤딩된 클러스터의 구성 요소를 이해하는 것이 중요합니다.
샤드 클러스터의 구성 요소
1. 샤드: 샤드는 수평 확장이 가능하므로 데이터가 증가함에 따라 더 많은 샤드를 추가하여 증가하는 로드를 처리할 수 있습니다. 샤딩된 클러스터의 각 샤드는 서로 다른 물리적 시스템이나 서버에 위치하여 여러 노드에 데이터와 작업 부하를 분산할 수 있습니다. 샤드는 샤드 클러스터에 동적으로 추가될 수 있으므로 가동 중지 시간 없이 데이터베이스 인프라를 확장할 수 있습니다.
2. 기본 샤드: 기본 샤드 할당은 생성 당시의 데이터베이스 크기를 기반으로 하지만 필요한 경우 나중에 수동으로 재할당할 수 있습니다. 기본 샤드는 컬렉션 목록 및 해당 위치와 같은 데이터베이스와 관련된 메타데이터를 저장하는 역할을 합니다. 기본 샤드를 사용할 수 없게 되면 MongoDB는 영향을 받는 데이터베이스에 대한 새 기본 샤드를 자동으로 선택하여 지속적인 작업을 보장합니다.
3. 구성 서버: 구성 서버는 샤드, 청크, 클러스터 구성에 대한 정보를 포함하여 샤딩된 클러스터에 대한 메타데이터를 저장합니다. 이는 클러스터의 모든 노드가 동일한 메타데이터 보기를 갖도록 보장하여 관리 작업을 용이하게 하고 클러스터 일관성을 유지하는 데 도움이 됩니다. 구성 서버는 인증 및 권한 부여 설정을 관리하여 승인된 사용자 및 애플리케이션만 클러스터에 액세스할 수 있도록 합니다.
4. Mongos 인스턴스: Mongos 인스턴스는 클라이언트 애플리케이션과 샤딩된 클러스터 간의 인터페이스 역할을 합니다. 쿼리 라우팅, 샤드 관리 및 결과 집계를 처리합니다. Mongos 인스턴스는 데이터 자체를 저장하지 않지만 쿼리를 효율적으로 라우팅하기 위해 구성 서버의 메타데이터 캐싱에 의존합니다.
샤딩 작동 방식
샤딩된 클러스터가 생성되면 MongoDB는 자동으로 데이터를 청크로 나누고 사용 가능한 샤드에 배포합니다. 각 청크에는 각 샤드에 저장된 샤드 키 값의 범위를 정의하는 포괄적 하한 및 배타적 상한이 있습니다. 이를 통해 균일한 데이터 배포와 효율적인 쿼리 라우팅이 보장됩니다.
샤드 클러스터의 쿼리 최적화
샤딩된 클러스터에서 효율적인 데이터 검색 및 쿼리 성능을 위해서는 쿼리 최적화가 중요합니다. MongoDB는 샤드 클러스터의 샤드 상태를 볼 수 있는 `sh.status()` 명령과 같이 기본 샤드를 관리하는 도구와 명령을 제공합니다. 또한 MongoDB는 샤딩된 집계 쿼리를 지원하므로 여러 샤드에서 복잡한 데이터 집계를 수행할 수 있습니다.
청크 분할
청크를 분할하면 MongoDB 샤드 클러스터의 데이터 분포를 미세 조정할 수 있습니다. 청크를 명시적으로 분할하면 각 샤드에 저장된 샤드 키 값의 범위를 제어하고 균일한 데이터 배포를 보장할 수 있습니다. 여기에는 청크를 분할하려는 값을 식별하고 'sh.splitAt()' 명령을 사용하여 원하는 분할 지점에서 청크를 분할하는 작업이 포함됩니다.
샤드 클러스터 모범 사례
1. 구성 서버를 3개 멤버 복제 세트로 배포: 고가용성과 내결함성을 위해 구성 서버가 3개 멤버 복제 세트로 배포되었는지 확인합니다.
2. 각 샤드를 3개 멤버 복제본 세트로 배포: 고가용성과 내결함성을 위해 각 샤드가 3개 멤버 복제본 세트로 배포되었는지 확인하세요.
3. 하나 이상의 Mongos 라우터 배포: 하나 이상의 Mongos 라우터를 배포하여 쿼리 라우팅 및 샤드 관리를 처리합니다.
4. 성능 모니터링: 구성 서버 및 샤드의 성능을 포함하여 샤딩된 클러스터의 성능을 모니터링하여 최적의 성능과 데이터 배포를 보장합니다.
5. 샤딩된 집계 쿼리 사용: 샤딩된 집계 쿼리를 사용하여 여러 샤드에서 복잡한 데이터 집계를 수행하여 효율적인 데이터 처리 및 분석을 보장합니다.
결론
MongoDB 샤딩은 여러 서버 또는 "샤드"에 데이터를 수평으로 확장하고 배포하는 강력한 기술입니다. 데이터베이스 인프라를 효율적으로 관리하고 확장하려면 샤딩된 클러스터의 구성 요소와 샤딩 작동 방식을 이해하는 것이 중요합니다. 모범 사례를 따르고 쿼리를 최적화하면 샤딩된 클러스터에서 최적의 성능과 데이터 배포를 보장할 수 있습니다.
인용:[1] https://www.mongodb.com/docs/manual/core/sharded-cluster-comComponents/
[2] https://www.mongodb.com/docs/v6.2/core/sharded-cluster-comComponents/
[3] https://www.geeksforgeeks.org/sharded-cluster-comComponents-in-mongodb/
[4] https://www.squash.io/tutorial-on-database-sharding-in-mongodb/
[5] https://www.bmc.com/blogs/mongodb-sharding-explained/