샤드 영역 관리
샤딩된 클러스터에서는 샤드 그룹 을 나타내는 구역을 생성하고 하나 이상의 샤드 키 값 범위를 해당 구역 에 연결할 수 있습니다. MongoDB 는 구역 범위 에 속하는 읽기 및 쓰기를 구역 내의 샤드에만 라우팅합니다.
팁
샤드 컬렉션 작업은 비어 있거나 존재하지 않는 컬렉션을 샤딩하기 전에 구역 및 구역 범위를 정의하여 정의된 구역 범위에 대한 청크와 샤드 키 값의 전체 범위를 포함하는 추가 청크를 생성하고 그역 범위를 기반으로 초기 청크 분배를 수행합니다. 이러한 청크의 초기 생성 및 배포를 통해 샤딩을 더 빠르게 설정할 수 있습니다. 초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.
구역에 샤드 추가
mongos
인스턴스에 연결된 경우, sh.addShardToZone()
메서드를 사용하여 구역을 특정 샤드와 연결합니다. 단일 샤드에 여러 개의 구역이 있을 수 있으며, 여러 개의 샤드에 동일한 구역이 있을 수도 있습니다.
예시
다음 예시에서는 구역 NYC
를 두 개의 샤드에 추가하고, 구역 SFO
및 NRT
를 세 번째 샤드에 추가합니다.
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")
참고
구역 범위는 항상 하한 경계를 포함하고 상한 경계를 제외합니다.
컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.
구역 범위 제거
버전 3.4에 추가: 셸 헬퍼 메서드 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" })