ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

샤드 영역 관리

샤딩된 클러스터에서는 샤드 그룹을 나타내는 구역을 생성하고 하나 이상의 샤드 키 값 범위를 해당 구역에 연결할 수 있습니다. MongoDB는 구역 범위에 속하는 읽기 및 쓰기를 구역 내의 샤드에만 라우팅합니다.

샤드 컬렉션 작업은 비어 있거나 존재하지 않는 컬렉션을 샤딩하기 전에 구역 및 구역 범위를 정의하여 정의된 구역 범위에 대한 청크와 샤드 키 값의 전체 범위를 포함하는 추가 청크를 생성하고 그역 범위를 기반으로 초기 청크 분배를 수행합니다. 이러한 청크의 초기 생성 및 배포를 통해 샤딩을 더 빠르게 설정할 수 있습니다. 초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.

예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.

mongos 인스턴스에 연결된 경우 sh.addShardToZone() 메서드를 사용하여 구역을 특정 샤드와 연결합니다. 단일 샤드에 여러 개의 영역이 있을 수 있으며, 여러 개의 샤드에 동일한 영역이 있을 수도 있습니다.

예시

다음 예시에서는 구역 NYC를 두 개의 샤드에 추가하고, 구역 SFONRT를 세 번째 샤드에 추가합니다.

sh.addShardToZone("shard0000", "NYC")
sh.addShardToZone("shard0001", "NYC")
sh.addShardToZone("shard0002", "SFO")
sh.addShardToZone("shard0002", "NRT")

샤드에서 NRT 구역을 제거하는 다음 예시에서처럼, mongos 인스턴스에 연결된 경우 sh.removeShardFromZone() 메서드를 사용하여 특정 샤드에서 구역을 제거할 수 있습니다.

sh.removeShardFromZone("shard0002", "NRT")

구역의 샤드 키 범위를 정의하려면 mongos 인스턴스에 연결된 경우 sh.updateZoneKeyRange() 메서드를 사용합니다. 주어진 샤드 키 범위에는 하나의 구역만 할당될 수 있습니다. 정의된 범위는 겹칠 수 없습니다.

예시

records 데이터베이스에 users라는 이름의 컬렉션이 있고, zipcode 필드에 의해 샤딩되어 있다고 가정할 때, 다음 작업에서 할당하는 것은 다음과 같습니다.

  • 맨해튼과 브루클린의 두 가지 우편번호 범위(NYC 구역)

  • 샌프란시스코의 한 가지 우편 번호 범위(SFO 구역)

sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")

참고

  • 구역 범위는 항상 하한 경계를 포함하고 상한 경계를 제외합니다.

  • 컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.

셸 헬퍼 메서드 sh.removeRangeFromZone()을 사용하여 구역에서 범위를 제거합니다.

예시

다음 예시에서는 맨해튼 내 우편번호 범위에 대한 NYC 구역 할당을 제거합니다.

sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})

참고

컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.

sh.status()를 사용하여 클러스터의 각 샤드에 연결된 구역을 나열합니다. config 데이터베이스에서 shards 컬렉션을 쿼리하여 샤드 구역을 볼 수도 있습니다.

다음 예시에서는 find() 메서드를 사용하여 NYC 구역이 있는 모든 샤드를 반환합니다.

use config
db.shards.find({ tags: "NYC" })

tags 데이터베이스의 config 컬렉션에서 모든 네임스페이스의 구역 범위를 찾을 수 있습니다. sh.status()의 출력에는 모든 구역 범위도 표시됩니다.

다음 예에서는 find() 메서드를 사용하여 NYC 구역에 연결된 모든 범위를 반환합니다.

use config
db.tags.find({ tag: "NYC" })