시작하기전에 기존에 폴더가 있으면 안에 내용 다 삭제하고 시작
1. 폴더 생성
mongolab/shard1
mongolab/shard2
mongolab/shard3
mongolab/config1
mongolab/config2
mongolab/config3
2. CMD 창 3개 열어서 CS 서버 3개 실행
mongod --configsvr --replSet configSet --dbpath "C:\mongolab\config1" --port 50001 --bind_ip_all
mongod --configsvr --replSet configSet --dbpath "C:\mongolab\config2" --port 50002 --bind_ip_all
mongod --configsvr --replSet configSet --dbpath "C:\mongolab\config3" --port 50003 --bind_ip_all
포트 확인 / 상태 확인
netstat -ano | findstr 5000*
rs.status();
3. CS서버중 50001로 접속해서 리플리카셋 설정하기
mongo --port 50001
let con = {_id:"configSet",
members:[
{_id:1, host:"127.0.0.1:50001"},
{_id:2, host:"127.0.0.1:50002"},
{_id:3, host:"127.0.0.1:50003"}
]
};
rs.initiate(con);
4. CMD 창 3개 열어서 SHARD 서버 3개 실행 (리플리카 구성을 하진 않음 - 하지만 리플리카 세트 박스는 만들어줘야 함)
mongod --shardsvr --dbpath "C:\mongolab\shard1" --port 30001 --bind_ip_all --replSet shardSet1
mongod --shardsvr --dbpath "C:\mongolab\shard2" --port 30002 --bind_ip_all --replSet shardSet2
mongod --shardsvr --dbpath "C:\mongolab\shard3" --port 30003 --bind_ip_all --replSet shardSet3
netstat -ano | findstr 300*
5. 30001로 들어가서 리플리카셋 설정
mongo --port 30001
let con = {_id:"shardSet1", members:[{_id:1, host:"127.0.0.1:30001"}]};
rs.initiate(con);
6. 30002로 들어가서 리플리카셋 설정
mongo --port 30002
let con = {_id:"shardSet2", members:[{_id:1, host:"127.0.0.1:30002"}]};
rs.initiate(con);
7. 30003로 들어가서 리플리카셋 설정
mongo --port 30003
let con = {_id:"shardSet3", members:[{_id:1, host:"127.0.0.1:30003"}]};
rs.initiate(con);
8. 몽고S 서버 실행(라우팅 서버)
- 이 서버는 CS에서 메타정보를 가져와서 샤드 서버에 save하거나 find할때 참고하는 서버
- CMD 창 1개 열어서 실행
mongos --configdb configSet/127.0.0.1:50001,127.0.0.1:50002,127.0.0.1:50003 --port 20000 --bind_ip_all
9. CMD 창 1개 열어서 몽고S 서버 접속 (현재 몽고S서버)
mongo --port 20000
10. admin 디비로 접속해서 샤드 추가 (현재 몽고S서버)
use admin;
sh.addShard("shardSet1/127.0.0.1:30001");
sh.addShard("shardSet2/127.0.0.1:30002");
sh.addShard("shardSet3/127.0.0.1:30003");
11. emp 디비로 접속해서 인덱스 생성 (현재 몽고S서버)
- 사실 _id 는 인덱스 생성안해도 자동으로 잡히는데 개념을 익히기 위해 직접 잡아줌.
- 왜냐하면 인덱스가 없으면 샤드키로 설정할 수 없음(중요)
use emp;
db.programmer.createIndex({_id:1});
12. emp 디비에 먼저 샤드 설정하고 그다음에 programmer 컬렉션에 샤드 설정하기 (현재 몽고S서버)
sh.enableSharding("emp");
sh.shardCollection("emp.programmer", { _id : "hashed" });
13. 샤드 상태 확인 (현재 몽고S서버)
sh.status()
- 더 좋은 방법!
use emp;
db.programmer.getShardDistribution()
14. emp 디비 접속해서 10000건 값 추가 (현재 몽고S서버)
use emp;
for (let i=0; i<10000; i++){db.programmer.save({name:"name"+i})}
15. 30001, 30002, 30003 들어가서 use emp 하고, db.programmer.count() 로 대략 3000개씩 잘 분배되었는지 확인하기
mongo --port 30001
mongo --port 30002
mongo --port 30003
use emp;
db.programmer.count()
db.programmer.find().limit(3).pretty();
'DataBase > Mongo DB' 카테고리의 다른 글
Mongo DB 9강 - 샤딩 시스템 구성 (Git Bash) (0) | 2021.10.06 |
---|---|
Mongo DB 8강 - 샤딩 (0) | 2021.10.06 |
Mongo DB 7강 - 주기마다 데이터 수집 및 DB 저장 (0) | 2021.10.01 |
Mongo DB 6강 - 배열 연산자 (고급) (0) | 2021.09.27 |
Mongo DB 5강 - Update, Remove (0) | 2021.09.24 |