[Windows]몽고디비 샤딩과 리플리카셋 구성하는 방법
샤딩과 리플리카셋 이해하기이러한 샤딩의 문제점을 해결하는 방법이 바로 리플리카 세트이다. 리플리카(=RAID)셋이란 각각의 서버를 복제하여 사용하는 것으로 최소 3개씩 복제한다. 만약 메인 서버인 프라이머리 서버에서 문제가 생기면 복제해둔 세컨더리 서버에서 데이터를 가져 올 수 있다....
1. 폴더 생성
시작하기전에 기존에 폴더가 있으면 안에 내용 다 삭제하고 시작
mongolab/shard1
mongolab/shard2
mongolab/shard3
mongolab/config1
mongolab/config2
mongolab/config3
2. Config-Server 설정
1. Config-Server 실행
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
50000번대 포트 확인
netstat -ano | findstr 5000*
2. 리플리카셋 설정
Config-Server 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);
리플리카 셋 구성 확인
rs.status();
3. Shard-Server 설정
1. Shard-Serve 실행
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
ssl(=rsa)설정하는 것이 좋지만 몽고에서 다루는 데이터는 그렇게 중요한 데이터가 아니기 때문에 설정하지 않아도 된다.
30000번대 포트 확인
netstat -ano | findstr 3000*
2. 30001 포트 리플리카셋 설정
30001번대 포트에 접속
mongo --port 30001
변수 생성
let con = {_id:"shardSet1", members:[{_id:1, host:"127.0.0.1:30001"}]};
리플리카셋 초기화
rs.initiate(con);
3. 30002 포트 리플리카셋 설정
30001번대 포트에 접속
mongo --port 30002
변수 생성
let con = {_id:"shardSet2", members:[{_id:1, host:"127.0.0.1:30002"}]};
리플리카셋 초기화
rs.initiate(con);
4. 30003 포트 리플리카셋 설정
30001번대 포트에 접속
mongo --port 30003
변수 생성
let con = {_id:"shardSet3", members:[{_id:1, host:"127.0.0.1:30003"}]};
리플리카셋 초기화
rs.initiate(con);
여기까지 config-server1~3과 OPlog1~3, shard1~3을 만들었다.
4. Mongos-Server 설정
1. Mongos 서버 실행(라우팅 서버)
새로운 CMD 창을 열어서 Mongos 서버 실행
mongos --configdb configSet/127.0.0.1:50001,127.0.0.1:50002,127.0.0.1:50003 --port 20000 --bind_ip_all
이 서버는 CS에서 메타정보를 가져와서 샤드 서버에 save하거나 find 할 때 참고하는 서버다.
2. Mongos 서버 접속
CMD 창 1개 열어서 mongos 서버 접속
mongo --port 20000
3. Mongos 서버에서 Shard 추가
admin DB에 접속한다.
use admin;
Shard 추가
sh.addShard("shardSet1/127.0.0.1:30001");
sh.addShard("shardSet2/127.0.0.1:30002");
sh.addShard("shardSet3/127.0.0.1:30003");
여기서 깜빡임이 있으면 서버가 제대로 안만들어진거니 서버를 다시 만들자. 그리고 ‘shardSet1’ 적지않으면 오류가 난다.
4. emp DB에서 인덱스 생성
- _id 는 인덱스 생성안해도 자동으로 잡히는데 개념을 익히기 위해 직접 잡아줌.
- 왜냐하면 인덱스가 없으면 샤드키로 설정할 수 없음(중요)
emp 데이터베이스를 생성/사용
use emp;
programmer 컬렉션에 id를 index로 생성
db.programmer.createIndex({_id:1});
인덱스 블로그 링크 추가 예정
5. Shard 설정
emp DB에 Sard 설정
sh.enableSharding("emp");
데이터베이스의 programmer 컬렉션에 Shard 설정
sh.shardCollection("emp.programmer", { _id : "hashed" });
6. Shard 상태 확인
방법1.
sh.status()
방법2.
use admin
db.programmer.getShardDistribution();
방법2는 샤드 상태를 더 자세히 볼 수 있다.
7. 데이터 추가하기
emp DB에 접속
use emp;
10000건의 데이터 추가
for (let i=0; i<10000; i++){db.programmer.save({name:"name"+i})}
데이터를 넣는데 시간이 걸린다.
데이터가 대략 3000개씩 잘 분배되었는지 확인
db.programmer.getShardDistribution();
docs(도큐먼트)에 골고루 들어간다. 샤드를 해쉬로 넣으면 균등하게 데이터 배분된다.
[Mac]몽고디비 샤딩과 리플리카셋 구성하는 방법1. 폴더 생성
2. Config-Server 설정
3. Shard-Server 설정
4. Mongos-Server 설정...