1. MongoDB 레인지샤딩
데이터와 서버의 부하를 분산하기 위해 MongoDB 는 샤딩을 제공하고 있다.
샤딩 기법은 해시 / 레인지가 있고 이 포스팅에서는 레인지 샤딩을 구성해본다.
2. MongoDB 테스트 버전
유형 | 버전 | 구성 |
mongosh | 2.2.10 | |
mongodb | 7.0.12 | Config : 1개, 포트 20000 Route : 1개, 포트 20001 Shard1 : 1개, 포트 30001 Shard2 : 1개, 포트 40001 |
3. 전제조건
mongodb 는 2개의 샤드서버가 구성되어 있는 상태이다.
[direct: mongos] test> sh.status();
shardingVersion
{ _id: 1, clusterId: ObjectId('66838519ea100ebaf5ee3cc8') }
---
shards
[
{
_id: 'rs1',
host: 'rs1/127.0.0.1:30001',
state: 1,
topologyTime: Timestamp({ t: 1719896113, i: 1 })
},
{
_id: 'rs2',
host: 'rs2/127.0.0.1:40001',
state: 1,
topologyTime: Timestamp({ t: 1719896932, i: 2 })
}
]
---
active mongoses
[ { '7.0.12': 1 } ]
4. 레인지샤딩 만들기
4-1. 데이터베이스 샤드 활성화
데이터베이스를 생성 후 샤드를 활성화 해준다.
샤딩 활성화는 enableSharding 명령어를 사용한다.
[direct: mongos] admin> use rangeShardDB
switched to db rangeShardDB
[direct: mongos] rangeShardDB> sh.enableSharding("rangeShardDB")
{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1722242804, i: 6 }),
signature: {
hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
keyId: Long('0')
}
},
operationTime: Timestamp({ t: 1722242804, i: 2 })
}
4-2. 컬렉션에 샤드 키 설정
컬렉션을 사딩하려면 shardCollection 명령어를 사용한다.
샤드 키에 1 혹은 -1 를 입력하면 입력한 키로 샤딩된다.
rangeShardDB 의 collection1 의 index 필드를 오름차순으로 정렬하며 샤딩하는 의미이다.
[direct: mongos] rangeShardDB> sh.shardCollection("rangeShardDB.collection1", {"index": 1})
{
collectionsharded: 'rangeShardDB.collection1',
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1722242863, i: 33 }),
signature: {
hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
keyId: Long('0')
}
},
operationTime: Timestamp({ t: 1722242863, i: 33 })
}
여기까지 하면 레인지샤딩 컬렉션이 생성된다.
5. 레인지샤딩 메타정보 보기
레인지샤딩 메타정보는 라우터에서 sh.status 로 확인할 수 있다.
collections 를 보면 index 필드가 1 로 샤드키로 되어있으며
chunkMetadata 와 chunks 에서 각 청크별 값의 범위 위치한 샤드서버를 알 수 있다.
지금은 레인지범위가 분할되어있지 않기 때문에 1개의 범위만 나온다.
[direct: mongos] test> sh.status()
{
database: {
_id: 'rangeShardDB',
primary: 'rs1',
partitioned: false,
version: {
uuid: UUID('d6db39d1-0b81-40a7-a539-327cf5158922'),
timestamp: Timestamp({ t: 1722242803, i: 1 }),
lastMod: 1
}
},
collections: {
'rangeShardDB.collection1': {
shardKey: { index: 1 },
unique: false,
balancing: true,
chunkMetadata: [ { shard: 'rs1', nChunks: 1 } ],
chunks: [
{ min: { index: MinKey() }, max: { index: MaxKey() }, 'on shard': 'rs1', 'last modified': Timestamp({ t: 1, i: 0 }) }
],
tags: []
}
}
}
'Database > MongoDB 실습' 카테고리의 다른 글
[MongoDB] 레인지샤딩 범위나누는 방법 (0) | 2024.07.31 |
---|---|
[MongoDB] 복합인덱스 서브필드 구성 조회 테스트 (0) | 2024.07.30 |
[MongoDB] 쿼리 실행계획 확인하는 방법 explain (1) | 2024.07.30 |
[MongoDB] 컬렉션에 인덱스 생성, 삭제, 조회 방법 (0) | 2024.07.30 |
[MongoDB] 해시샤딩 만들기와 메타 조회방법 (0) | 2024.07.29 |