문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

영역을 사용하여 컬렉션 배포하기

이 페이지의 내용

  • 전제 조건
  • 시나리오
  • 아키텍처
  • 영역
  • 샤드 키
  • 밸런서
  • 단계
  • 각 샤드를 적절한 구역에 추가합니다.
  • 관련 collection에 대한 구역 범위를 추가합니다.
  • 컬렉션을 샤딩합니다.
  • 변경 사항을 검토합니다.
  • 자세히 알아보기

샤드 클러스터에서는 샤드 키 를 기반으로 샤드 데이터의구역 을 만들 수 있습니다. 각 구역을 클러스터에 있는 하나 이상의 샤드와 연결할 수 있습니다. 샤드는 여러 개의 구역과 연결할 수 있습니다. 균형 잡힌 클러스터에서 MongoDB는 구역에 포함된 청크 를 해당 구역과 연결된 샤드로만 마이그레이션합니다.

구역 샤딩을 사용하여 샤딩된 클러스터 전체에 컬렉션을 배포하고 각 컬렉션의 데이터를 저장할 샤드를 지정할 수 있습니다. 물리적 리소스 및 사용 가능한 메모리와 같은 샤드 속성을 기반으로 컬렉션을 배포하여 각 컬렉션이 해당 데이터에 대한 최적의 샤드에 저장되도록 할 수 있습니다.

이 튜토리얼을 완료하려면 다음을 수행해야 합니다.

두 개의 샤드 컬렉션이 포함된 shardDistributionDB 데이터베이스가 있습니다.

  • bigData, 여기에는 많은 양의 데이터가 포함되어 있습니다.

  • manyIndexes: 여기에는 큰 인덱스가 많이 포함되어 있습니다.

각 컬렉션이 샤드의 서로 다른 물리적 리소스를 사용할 수 있도록 각 컬렉션을 샤드의 하위 집합으로 제한하려고 합니다.

샤딩된 클러스터는 3개의 샤드로 구성됩니다. 각 샤드에는 고유한 물리적 리소스가 있습니다.

샤드 이름
물리적 리소스
shard0
높은 메모리 용량
shard1
빠른 플래시 스토리지
shard2
고용량 메모리 빠른 플래시 스토리지

물리적 리소스를 기반으로 컬렉션을 배포하려면 샤드 영역을 사용합니다. 샤드 영역은 컬렉션을 특정 샤드 하위 집합과 연결하여 컬렉션의 데이터를 저장하는 샤드를 제한합니다. 이 예시에서는 두 개의 샤드 영역이 필요합니다.

구역 이름
설명
이 구역의 컬렉션
HI_RAM
메모리 용량이 큰 서버입니다.
인덱스가 큰 컬렉션과 같이 더 많은 메모리를 필요로 하는 컬렉션은 HI_RAM 샤드에 있어야 합니다.
FLASH
빠른 저장 속도를 위한 플래시 드라이브가 장착된 서버.
빠른 데이터 검색이 필요한 대규모 collection은 FLASH 샤드에 있어야 합니다.

이 튜토리얼에서 각 컬렉션을 샤딩하는 데 사용할 샤드 키{ _id: "hashed" } 입니다. 컬렉션을 샤딩 하기 전에 샤드 영역을 구성합니다. 결과적으로 각 컬렉션의 데이터는 해당 구역의 샤드에만 존재합니다.

해시된 샤딩의 경우 영역을 구성하기 전에 컬렉션을 샤딩하면 샤딩이 활성화되면 MongoDB는 모든 샤드 간에 청크를 균등하게 할당합니다. 즉, 청크가 해당 청크의 데이터를 처리하기에 적합하지 않은 샤드에 일시적으로 할당될 수 있습니다.

밸런서는 구성된 모든 영역과 관련하여 청크를 적절한 분할 데이터베이스로 마이그레이션합니다. 밸런싱이 완료되면 샤드에는 할당된 영역과 범위가 일치하는 청크만 포함됩니다.

중요

성능

구역 범위를 추가, 제거 또는 변경하면 청크 마이그레이션이 발생할 수 있습니다. 이러한 마이그레이션은 데이터 세트의 크기와 구역 범위가 영향을 미치는 청크의 수에 따라 클러스터 성능에 영향을 미칠 수 있습니다. 특정 예약 기간에 밸런서 실행을 고려해보세요. 자세한 예약 기간 설정 방법은 밸런싱 기간 예약에서 확인하세요.

다음 절차를 사용하여 샤드 구역을 구성하고 샤드 물리적 리소스를 기반으로 컬렉션을 배포합니다.

1

각 구역에서 샤드를 구성하려면 addShardToZone 명령을 사용합니다.

HI_RAM 구역에 shard0shard2 추가:

sh.addShardToZone("shard0", "HI_RAM")
sh.addShardToZone("shard2", "HI_RAM")

FLASH 구역에 shard1shard2 추가:

sh.addShardToZone("shard1", "FLASH")
sh.addShardToZone("shard2", "FLASH")
2

샤드 키 범위를 구역에 연결하려면 sh.updateZoneKeyRange() 를 사용합니다.

이 시나리오에서는 collection의 모든 문서를 적절한 구역에 연결하려고 합니다. 모든 collection 문서를 구역에 연결하려면 다음 구역 범위를 지정합니다.

  • 의 하한 값 { "_id" : MinKey }

  • 의 상한 값 { "_id" : MaxKey }

bigData 컬렉션에 대해 다음을 설정합니다.

sh.updateZoneKeyRange(
"shardDistributionDB.bigData",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"FLASH"
)

manyIndexes 컬렉션에 대해 다음을 설정합니다.

sh.updateZoneKeyRange(
"shardDistributionDB.manyIndexes",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"HI_RAM"
)
3

두 컬렉션(bigDatamanyIndexes)을 모두 샤딩하려면 샤드 { _id: "hashed" } 로 지정합니다.

다음 명령을 실행합니다.

sh.shardCollection(
"shardDistributionDB.bigData", { _id: "hashed" }
)
sh.shardCollection(
"shardDistributionDB.manyIndexes", { _id: "hashed" }
)
4

청크 분포 및 샤드 영역을 보려면 sh.status() 메서드를 사용하세요.

sh.status()

다음에 밸런서 가 실행되면 필요한 위치에서 청크를 분할하고 구성된 구역을 존중하여 샤드 전체에 청크를 마이그레이션합니다. 밸런서가 완료되는 데 걸리는 시간은 샤드 수, 사용 가능한 메모리, IOPS 등을 포함한 여러 요인에 따라 달라집니다.

밸런싱이 완료되면 다음이 실행됩니다.

  • manyIndexes collection에 있는 문서 청크는 shard0shard2에 있습니다.

  • bigData 컬렉션의 문서 청크는 shard1shard2 에 있습니다.

샤딩 및 밸런싱에 대해 자세히 알아보려면 다음 페이지를 참조하세요.

← 삽입 전용 워크로드를 위한 분산 로컬 쓰기