-
[ mongodb Sharding] 몽고디비 샤딩 적용하기 / config sever + replica set개발일지/mongoDB 2019. 4. 22. 21:00
지난번까지 replica set을 window 환경에서 혹은 ubuntu 환경에서 셋팅하는것까지 알아보았다
혹시 확인이 필요하다면 아래 링크를 클릭하시길 ~!
오늘은 몽고디비의 장점인 sharding을 윈도우 환경에서 셋팅하는것을 알아보도록 하겠다.
우선 장점은 장점이지만 단점으로는 시스템구성이 다소 복잡해지고 서버가 많아지기때문에 비용이 싱글때보다 많이 든다는 점이다.
위의 이미지와 같이 셋팅하는것을 mongodb 에서는 추천하고 있다 (기본으로 3대씩 구성하라고 말한다.)
오늘 테스트는 위와 같이 구성하지 않고
config server 2대와 mongod 서버 3대로 진행할 것이며
config server 2대는 리플리카 셋으로 구성하여 한개의 config server 처럼 사용할것이고
mongod 서버 3대는 각각 개별적인 db 로 진행할것이다
여기서 mongod 서버는 리플리카셋은 설정하지 않할 것이다.
그렇다면 왜 config server도 그냥 한대만 하지 왜 두대를 해서 리플리카 셋을 해야하나?
처음에는 그렇게 셋팅해서 해보려 했으나 mongos 연결시에 반듯이 config server는 replicaset 을 설정하라고 오류를 뱉어내며 설정이 되지 않는것을 확인하였다
아무래도 데이터를 어디에 나눠서 기록할지에대한 설정 값을 관리 하기때문에 config server 가 죽어버리는것을 방지 하기 위함인것 같다
아무튼 테스트를 진행해보겠다
우선 mongod 서버 3대를 실행해보도록 하자
명령어는 기존과 똑같지만 한가지 다른것이 있다면 --shardsvr 플레그가 추가 된다
해당하는 서버는 샤드 서버로 사용될것이라는 옵션이다
> mongod --shardsvr --dbpath <DB경로 1> --port 30001
> mongod --shardsvr --dbpath <DB경로 2> --port 30002
> mongod --shardsvr --dbpath <DB경로 3> --port 30003
ex) mongod --shardsvr --dbpath C:\Users\Documents\mongtest\db1 --port 30001
ex) mongod --shardsvr --dbpath C:\Users\Documents\mongtest\db2 --port 30002
ex) mongod --shardsvr --dbpath C:\Users\Documents\mongtest\db3 --port 30003
서버가 각각 돌고 있음을 확인 하였다면
config 서버2대를 띄워보자
여기에도 mongod 명령어로 서버를 띄우며 옵션값으로 --configsvr 플레그가 추가 된다
> mongod --configsvr --replSet <리플리카셋 이름> --dbpath <Config Server DB경로 1> --port 50001
> mongod --configsvr --replSet <리플리카셋 이름> --dbpath <Config Server DB경로 2> --port 50002
ex) mongod --configsvr --replSet replica --dbpath C:\Users\Documents\mongtest\cnf1 --port 50001
ex) mongod --configsvr --replSet replica --dbpath C:\Users\Documents\mongtest\cnf2 --port 50002
아까도 설명했듯 config server는 리플리카셋을 해야하기때문에 --replSet 옵션값을 추가하였다
config server 역시 둘다 켜놨다면 커멘드창이 5개가 켜져있으며 전부 돌아가고 있는중일것이다
여기까지 따라왔다면 이제 설정만 해주면 된다
우선 config server 2대를 replica set 하는 작업 먼저 진행하면 된다
여기서는 리플리가 셋팅에 대한 설명은 생략하겠다 모르시는분은 아래 링크를 클릭하여 리플리카셋 하는 방법먼저 학습하고 진행하시길 ...
자 이제 mongos 서버를 띄울차례이다
mongo 나 mongod 명령어처럼 mongos 명령어역시 존재하며
mongos --help 를 처보면 여러가지 옵션이 있음을 확인할수 있다 .
그중 sharding options 만 보면 되겠다
configdb 서버를 연결할수 있는 옵션이 있다 이것을 활용하여 서버를 켜주면 된다
사용법은 옆에 나와있지만
<리플리카셋 이름>/<호스트:포트>,<호스트:포트>,[...]
호스트 개수만큼 셋팅할수 있음을 알수 있다
> mongos --configdb <리플리카셋 이름>/<호스트:포트>,<호스트:포트> --port 27077
ex) mongos --configdb replica/localhost:50001,localhost:50002 --port 50001
서버가 돌아가고 있음을 확인하고 이제 또하나의 커멘드창을 띄워서
사용자로써 접속을 시도해보자 접속은 mongos 로 접속하는것이다.
> mongo --port 27077
차의는 mongos> 로 변경된것을 보실수 있다
여기까지 되었다면 이제 마지막 샤딩을 어떻게 구성할지를 설정하는 과정이 남아있다
샤딩 구성은 Hashed Sharding 으로 구성하여 3테라데이터를 입력할시 각shard 서버당 1테라씩 골고루 균등하게 저장시키는 방식을 테스트 할 것이다.
가장먼저 sharding 서버를 연결해주는 작업이 필요하다
sharding method 관련 문서는 아래에서 볼수 있다
mongos> sh.addShard("replicaset name/host:port");
ex) sh.addShard("localhost:30001");
ex) sh.addShard("localhost:30002");
ex) sh.addShard("localhost:30003");
참고로 sharding 서버는 리플리카 셋으로 켜지 않았기때문에 relicaset name 을 생략했다
여기까지 진행하였다면 샤딩 셋팅에 상태를 sh.status() 명령으로 확인할수 있다.
이제 마지막으로 샤딩구성할 데이터베이스와 collection 을 설정하면 끝이 난다
mongos> sh.enableSharding("sharding")
mongos> sh.shardCollection("sharding.account", {_id: "hashed"})위와 같이 두 명령어로 셋팅이 완료 된다.
마지막으로 데이터를 넣어보고 결과를 각 서버에 균등하게 저장되어있는지 확인하면 되겠다
테스트를 위해 for 문을 활용하여 데이터를 넣어보겠다
mongo> for(var i=0;i<100000;i++){db.account.insert({name:"sudar"+i})}
*다소 시간이 걸릴수 있으니 잠시 기다려준다
이제 sharding 서버로 각각 접속하여 데이터를 확인해보면 된다.
'개발일지 > mongoDB' 카테고리의 다른 글
MongoDB - Atlas 가입 부터 접속방법(Node server , Robo 3T) 까지 알아보기 (1) 2019.11.04 [ MongoDB + ElasticSearch + Monstache ] 도커 기본 셋팅을 해보자 (4) 2019.10.02 MongoDB 기본 이론 정리 (관계형 데이터 베이스와 몽고디비 차이??) (0) 2019.04.19 mongoDB replicaSet 환경을 실 서비스에 적용해보자 with mongoose (1) 2019.04.17 docker + mongodb replSet 우분투 몽고디비 리플리카셋업 하기 with Docker (3) 2019.04.16