영역을 사용하여 컬렉션 배포하기
이 페이지의 내용
샤딩된 클러스터에서는 샤드 키 를 기반으로 샤딩된 데이터의구역 을 만들 수 있습니다. 각 구역 을 클러스터 에 있는 하나 이상의 샤드와 연결할 수 있습니다. 샤드 는 여러 개의 구역과 연결할 수 있습니다. 균형 잡힌 클러스터 에서 MongoDB 는 구역 에 포함된 청크 를 해당 구역 과 관련된 샤드로만 마이그레이션합니다.
구역 샤딩을 사용하여 샤딩된 클러스터 전체에 컬렉션을 배포하고 각 컬렉션의 데이터를 저장할 샤드를 지정할 수 있습니다. 물리적 리소스 및 사용 가능한 메모리와 같은 샤드 속성을 기반으로 컬렉션을 배포하여 각 컬렉션이 해당 데이터에 대한 최적의 샤드에 저장되도록 할 수 있습니다.
전제 조건
이 튜토리얼을 완료하려면 다음을 수행해야 합니다.
샤딩된 클러스터 를 배포합니다. 이 튜토리얼에서는 세 개의 샤드가 있는 샤드 샤딩된 클러스터 를 사용합니다.
mongos
에 연결합니다. 샤드에 직접 연결하여 구역 또는 구역 범위를 생성할 수 없습니다.admin
데이터베이스에서 최소한clusterManager
역할을 가진 사용자로 인증합니다. 사용자 권한을 보려면db.getUser()
메서드를 사용합니다.
Scenario
두 개의 샤딩된 컬렉션이 포함된 shardDistributionDB
데이터베이스 가 있습니다.
bigData
, 여기에는 많은 양의 데이터가 포함되어 있습니다.manyIndexes
: 여기에는 큰 인덱스가 많이 포함되어 있습니다.
각 컬렉션이 샤드의 서로 다른 물리적 리소스를 사용할 수 있도록 각 컬렉션을 샤드의 하위 집합으로 제한하려고 합니다.
아키텍처
샤딩된 클러스터는 3개의 샤드로 구성됩니다. 각 샤드에는 고유한 물리적 리소스가 있습니다.
샤드 이름 | 물리적 리소스 |
---|---|
shard0 | 높은 메모리 용량 |
shard1 | 빠른 플래시 저장 |
shard2 | 고용량 메모리 및 빠른 플래시 스토리지 |
Zones
물리적 리소스를 기반으로 컬렉션을 배포하려면 샤드 영역을 사용합니다. 샤드 영역은 컬렉션을 특정 샤드 하위 집합과 연결하여 컬렉션의 데이터를 저장하는 샤드를 제한합니다. 이 예시에서는 두 개의 샤드 영역이 필요합니다.
구역 이름 | 설명 | 이 구역의 컬렉션 |
---|---|---|
HI_RAM | 메모리 용량이 큰 서버입니다. | 인덱스가 큰 컬렉션과 같이 더 많은 메모리를 필요로 하는 컬렉션은 HI_RAM 샤드에 있어야 합니다. |
FLASH | 빠른 저장 속도를 위한 플래시 드라이브가 장착된 서버. | 빠른 데이터 검색이 필요한 대규모 collection은 FLASH 샤드에 있어야 합니다. |
샤드 키
이 튜토리얼에서 각 컬렉션 을 샤드 하는 데 사용할 샤드 키 는 { _id: "hashed" }
입니다. 컬렉션을 샤드 하기 전에 샤드 영역을 구성합니다. 결과적으로 각 컬렉션의 데이터는 해당 구역 의 샤드에만 존재합니다.
해시된 샤딩의 경우 영역을 구성하기 전에 컬렉션을 샤딩하면 샤딩이 활성화되면 MongoDB는 모든 샤드 간에 청크를 균등하게 할당합니다. 즉, 청크가 해당 청크의 데이터를 처리하기에 적합하지 않은 샤드에 일시적으로 할당될 수 있습니다.
밸런서
밸런서는 구성된 모든 영역과 관련하여 청크를 적절한 분할 데이터베이스로 마이그레이션합니다. 밸런싱이 완료되면 샤드에는 할당된 영역과 범위가 일치하는 청크만 포함됩니다.
중요
성능
구역 범위를 추가, 제거 또는 변경하면 청크 마이그레이션이 발생할 수 있습니다. 이러한 마이그레이션은 데이터 세트의 크기와 구역 범위가 영향을 미치는 청크의 수에 따라 클러스터 성능에 영향을 미칠 수 있습니다. 특정 예약 기간에 밸런서 실행을 고려해보세요. 자세한 예약 기간 설정 방법은 밸런싱 기간 예약에서 확인하세요.
단계
다음 절차를 사용하여 샤드 구역을 구성하고 샤드 물리적 리소스를 기반으로 컬렉션을 배포합니다.
각 샤드를 적절한 구역에 추가합니다.
각 구역 에서 샤드를 구성하려면 addShardToZone
명령을 사용합니다.
HI_RAM
구역에 shard0
및 shard2
추가:
sh.addShardToZone("shard0", "HI_RAM") sh.addShardToZone("shard2", "HI_RAM")
FLASH
구역에 shard1
및 shard2
추가:
sh.addShardToZone("shard1", "FLASH") sh.addShardToZone("shard2", "FLASH")
관련 collection에 대한 구역 범위를 추가합니다.
샤드 키 범위 를 구역 에 연결하려면 sh.updateZoneKeyRange()
를 사용합니다.
이 시나리오에서는 collection의 모든 문서를 적절한 구역에 연결하려고 합니다. 모든 collection 문서를 구역에 연결하려면 다음 구역 범위를 지정합니다.
의 하한 값
{ "_id" : MinKey }
의 상한 값
{ "_id" : MaxKey }
bigData
컬렉션에 대해 다음을 설정합니다.
shardDistributionDB.bigData
에 대한 네임스페이스,MaxKey
의 상한입니다.다음 구역
FLASH
sh.updateZoneKeyRange( "shardDistributionDB.bigData", { "_id" : MinKey }, { "_id" : MaxKey }, "FLASH" )
manyIndexes
컬렉션에 대해 다음을 설정합니다.
shardDistributionDB.manyIndexes
에 대한 네임스페이스,MaxKey
의 상한입니다.다음 구역
HI_RAM
sh.updateZoneKeyRange( "shardDistributionDB.manyIndexes", { "_id" : MinKey }, { "_id" : MaxKey }, "HI_RAM" )
컬렉션을 샤딩합니다.
두 컬렉션(bigData
및 manyIndexes
)을 모두 샤딩하려면 샤드 샤드 키 를 { _id: "hashed" }
로 지정합니다.
다음 명령을 실행합니다.
sh.shardCollection( "shardDistributionDB.bigData", { _id: "hashed" } ) sh.shardCollection( "shardDistributionDB.manyIndexes", { _id: "hashed" } )
변경 사항을 검토합니다.
청크 분포 및 샤드 영역을 보려면 sh.status()
메서드를 사용하세요.
sh.status()
다음에 밸런서 가 실행되면 필요한 위치에서 청크를 분할하고 구성된 구역을 존중하여 샤드 전체에 청크를 마이그레이션합니다. 밸런서가 완료되는 데 걸리는 시간은 샤드 수, 사용 가능한 메모리, IOPS 등을 포함한 여러 요인에 따라 달라집니다.
밸런싱이 완료되면 다음이 실행됩니다.
manyIndexes
collection에 있는 문서 청크는shard0
및shard2
에 있습니다.bigData
컬렉션의 문서 청크는shard1
및shard2
에 있습니다.
자세히 알아보기
샤딩 및 밸런싱에 대해 자세히 알아보려면 다음 페이지를 참조하세요.