문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

샤드 영역 관리

이 페이지의 내용

  • 구역에 샤드 추가
  • 구역 범위 생성
  • 구역 범위 제거
  • 기존 구역 보기

샤딩된 클러스터에서는 샤드 그룹을 나타내는 구역을 생성하고 하나 이상의 샤드 키 값 범위를 해당 구역에 연결할 수 있습니다. 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" })
← 구역