AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

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

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

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

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

  • 샤딩된 클러스터 를 배포합니다. 이 튜토리얼에서는 세 개의 샤드가 있는 샤드 샤딩된 클러스터 를 사용합니다.

  • mongos 에 연결합니다. 샤드에 직접 연결하여 구역 또는 구역 범위를 생성할 수 없습니다.

  • admin 데이터베이스에서 최소한 clusterManager 역할을 가진 사용자로 인증합니다. 사용자 권한을 보려면 db.getUser() 메서드를 사용합니다.

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

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

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

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

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

샤드 이름
물리적 리소스

shard0

높은 메모리 용량

shard1

빠른 플래시 저장

shard2

고용량 메모리 및 빠른 플래시 스토리지

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

구역 이름
설명
이 구역의 컬렉션

HI_RAM

메모리 용량이 큰 서버입니다.

인덱스가 큰 컬렉션과 같이 더 많은 메모리를 필요로 하는 컬렉션은 HI_RAM 샤드에 있어야 합니다.

FLASH

빠른 저장 속도를 위한 플래시 드라이브가 장착된 서버.

빠른 데이터 검색이 필요한 대규모 collection은 FLASH 샤드에 있어야 합니다.

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

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

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

중요

성능

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

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

1

각 구역 에서 샤드를 구성하려면 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")
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

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

다음 명령을 실행합니다.

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

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

sh.status()

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

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

  • manyIndexes collection에 있는 문서 청크는 shard0 및 shard2에 있습니다.

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

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