MongoDB 샤딩
샤딩
MongoDB에는 또 다른 유형의 클러스터가 있는데, 이는 MongoDB의 엄청난 데이터 볼륨 증가 요구를 충족할 수 있는 샤딩 기술입니다.
MongoDB가 막대한 양의 데이터를 저장하는 경우 한 대의 머신으로는 데이터를 저장하거나 허용 가능한 읽기 및 쓰기 처리량을 제공하기에 충분하지 않을 수 있습니다. 이때 데이터베이스 시스템이 더 많은 데이터를 저장하고 처리할 수 있도록 데이터를 여러 시스템에 분할할 수 있습니다.
샤딩을 사용하는 이유
모든 쓰기 작업을 기본 노드에 복사
지연된 민감한 데이터에 대한 쿼리 마스터 노드
단일 복제본 세트는 12개 노드로 제한됩니다
요청량이 많으면 메모리가 부족해집니다.
로컬 디스크 부족
수직 확장은 비용이 많이 듭니다
MongoDB 샤딩
다음 그림은 MongoDB의 샤딩 클러스터 구조 분포를 보여줍니다.
위 그림에는 세 가지 주요 구성 요소가 있습니다.
샤드:
는 실제 데이터 블록을 저장하는 데 사용됩니다. 실제 생산 환경에서는 여러 머신과 하나의 유물 세트가 샤드 서버 역할을 수행할 수 있습니다. 호스트 실패
Config Server:
청크 정보를 포함하여 전체 ClusterMetadata를 저장하는 mongod 인스턴스입니다.
쿼리 라우터:
프런트 엔드 라우팅, 클라이언트가 여기에서 액세스하고 전체 클러스터를 단일 데이터베이스처럼 보이게 하며, 프런트엔드 애플리케이션은 투명하게 사용할 수 있습니다.
샤드 인스턴스
샤딩 구조 포트 분포는 다음과 같습니다.
Shard Server 1:27020 Shard Server 2:27021 Shard Server 3:27022 Shard Server 4:27023 Config Server :27100 Route Process:40000
1단계: 샤드 서버 시작
[root@100 /]# mkdir -p /www/mongoDB/shard/s0 [root@100 /]# mkdir -p /www/mongoDB/shard/s1 [root@100 /]# mkdir -p /www/mongoDB/shard/s2 [root@100 /]# mkdir -p /www/mongoDB/shard/s3 [root@100 /]# mkdir -p /www/mongoDB/shard/log [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork .... [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork
2단계: 구성 서버 시작
[root@100 /]# mkdir -p /www/mongoDB/shard/config [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork
참고: 여기서 --shardsvr 및 configsvr 매개변수를 추가하지 않고도 일반 mongodb 서비스를 시작하는 것과 똑같이 시작할 수 있습니다. 이 두 매개변수의 기능은 시작 포트를 변경하는 것이므로 포트를 직접 지정할 수 있습니다.
3단계: 경로 프로세스 시작
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
mongos 시작 매개변수에서 ChunkSize 항목은 청크의 크기를 지정하는 데 사용됩니다. 단위는 MB입니다.
4단계: 샤딩 구성
다음으로 MongoDB Shell을 사용하여 mongos에 로그인하고 샤드 노드를 추가합니다
[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000 MongoDB shell version: 2.0.7 connecting to: 127.0.0.1:40000/admin mongos> db.runCommand({ addshard:"localhost:27020" }) { "shardAdded" : "shard0000", "ok" : 1 } ...... mongos> db.runCommand({ addshard:"localhost:27029" }) { "shardAdded" : "shard0009", "ok" : 1 } mongos> db.runCommand({ enablesharding:"test" }) #设置分片存储的数据库 { "ok" : 1 } mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}}) { "collectionsharded" : "test.log", "ok" : 1 }
5단계: 프로그램 코드를 크게 변경할 필요는 없습니다. 일반 mongo 데이터베이스에 연결하는 것처럼 데이터베이스를 인터페이스 40000