2021. 4. 19. 17:02ㆍmongodb
금일은 몽고디비 샤드에 대해 알아보겠다.
금일 몽고디비 구성도는 아래와 같다.
2번정도 쭉 따라서 확인차 만들어 보았다.
큰 문제 없이 구성이 된다.
단, 위 그림에서 회색으로 표현된 부분은 레플리카 셋이므로 구성에서 빼겠다.
레플리카 셋을 설정이 쉬우니, 내가 정리한 글을 참고하면 되겠다.
( 해당 링크 : urame.tistory.com/entry/mongodb-%EA%B5%AC%EC%A1%B0 )
그럼 일단 mongodb 설정을 위해, 디렉트리를 만들어 보겠다.
특별히 해줄 작업은 없다.
볼때는 어려운데, 막상 해보면, config 설정이 작업의 전부이다.
그러니!!! 아래 명령어를 그대로 따라온다면 충분히 설정이 가능할 것이다.
본 환경에서는 shard 구성과 replication 설정을 각각 1개씩 해주었다.
0. mongodb 설정을 위한 디렉토리를 구성한다.
0. 몽고디비 디렉토리를 만든다. $ mkdir mongodb_test $ cd mongodb_test 1. config 를 저장할 구조를 만든다 $ mkdir conf 2. log를 저장할 구조를 만든다. $ mkdir log $ cd log $ mkdir mongos $ mkdir sh1 $ mkdir sh2 $ mkdir sh3 $ mkdir conf $ cd .. 3. data를 저장할 구조를 만든다. $ mkdir data $ cd data $ mkdir configdb $ mkdir sh1 $ mkdir sh2 $ mkdir sh3 $ cd .. |
1. conf 구성도
0. conf 디렉토리로 이동 $ cd conf 1. 구성하려는 conf 파일을 생성한다. 1-1. config server를 구성한다. $ touch configsvr.conf 2-2 shard01 config를 생성한다. $ touch shard_1.conf 2-3 shard02 config를 생성한다. $ touch shard_2.conf 2-4 shard03 config를 생성한다. $ touch shard_3.conf 2-5 mongos config를 생성한다. $ touch mongos.conf |
2. 각각의 conf를 작성해준다.
2-1 config server의 config를 작성한다. ( 굵은 부분 신경써서 수정 )
$ vi configsvr.conf storage: dbPath: /home/ubuntu/mongodb_test/data/configdb journal: enabled: true systemLog: destination: file logAppend: true path: /home/ubuntu/mongodb_test/log/conf/mongoconf.log net: port: 30000 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: "configRs" sharding: clusterRole: configsvr |
2-2 shard01의 config를 작성해준다. ( 굵은 부분 신경써서 수정 )
$ vi shard_1.conf storage: dbPath: /home/ubuntu/mongodb_test/data/sh1 journal: enabled: true systemLog: destination: file logAppend: true path: /home/ubuntu/mongodb_test/log/sh1/mongoconf.log net: port: 30001 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: rs1 sharding: clusterRole: shardsvr |
2-3 shard02의 config를 작성해준다. ( 굵은 부분 신경써서 수정 )
$ vi shard_2.conf storage: dbPath: /home/ubuntu/mongodb_test/data/sh2 journal: enabled: true systemLog: destination: file logAppend: true path: /home/ubuntu/mongodb_test/log/sh2/mongoconf.log net: port: 30002 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: rs2 sharding: clusterRole: shardsvr |
2-4 shard03의 config를 작성해준다. ( 굵은 부분 신경써서 수정 )
$ vi shard_3.conf storage: dbPath: /home/ubuntu/mongodb_test/data/sh3 journal: enabled: true systemLog: destination: file logAppend: true path: /home/ubuntu/mongodb_test/log/sh3/mongoconf.log net: port: 30003 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: rs3 sharding: clusterRole: shardsvr |
2-5 mongos의 config를 작성해 준다. ( 굵은 부분 신경써서 수정 )
$ vi mongos.conf systemLog: destination: file logAppend: true path: /home/ubuntu/mongodb_test/log/mongos/mongoconf.log net: port: 20000 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo sharding: configDB: "configRs/localhost:30000" |
3. mongodb 실행 및 초기화 설정
3-1 config server
3-1-1 config server 실행
$ mongod --config ./configsvr.conf & |
3-1-2 config server 레플리카셋 설정
$ mongo localhost:30000 > rs.initiate({ _id : "configRs", members:[ {_id:0, host: "localhost:30000"}]}) |
3-2 shard01 server
3-2-1 shard01 server 실행
$ mongod --config ./shard_1.conf & |
3-1-2 shard01 server 레플리카셋 설정
$ mongo localhost:30001 > rs.initiate({ _id : "rs1", members:[ {_id:0, host: "localhost:30001"}]}) |
3-3 shard02 server
3-3-1 shard02 server 실행
$ mongod --config ./shard_2.conf & |
3-1-2 shard02 server 레플리카셋 설정
$ mongo localhost:30002 > rs.initiate({ _id : "rs2", members:[ {_id:0, host: "localhost:30002"}]}) |
3-4 shard03 server
3-4-1 shard03 server 실행
$ mongod --config ./shard_3.conf & |
3-4-2 shard02 server 레플리카셋 설정
$ mongo localhost:30003 > rs.initiate({ _id : "rs3", members:[ {_id:0, host: "localhost:30003"}]}) |
3-5 mongos server
3-5-1 mongos server 실행
$ mongos --config ./mongos.conf & |
3-4-2 shard02 server 레플리카셋 설정
$ mongo localhost:20000 > sh.addShard("rs1/localhost:30001") > sh.addShard("rs2/localhost:30002") > sh.addShard("rs3/localhost:30003") > sh.status( ) |
샤드 세팅이 끝났다.
그대로 명령어를 수행했다면 에러 없이 잘 작업이 수행 되었을 것이다.
비록 싱글서버에서 구성은 했지만, 멀티 서버도 큰 문제없이 구성이 될것이다.
방화벽 설정은 내 불로그에 설정하는 방법이 있으니, 찾아서 수행하면 된다.
99. 이제 shard 테스를 진행해 보겠다.
$ mongo localhost:20000 # 데이터 베이스 생성 및 colleciotn 인덱스 생성 > use testDB > db.test.createIndex( { "index" : 1 } ) # shard를 할 거라고 배포 > sh.enableSharding("testDB") > sh.shardCollection( "testDB.test", {index : "hashed"} ) # 데이터 생성 > for (var n=1; n<=1000; n++){ db.test.insert({index: n, value: "test"}) } > db.test.count( ) |
99. 결과는 아래와 같다
귀찮아서 shard2, shard3은 캡쳐는 생략하겠다.
캡쳐결과를 요약하자면 아래와 같다.
1000개의 데이터가 분산 되서 저장 된 걸 확인 할 수 있다.
( shard1 ( 310개 ) + shard2 ( 345개 ) + shard3 ( 345개 ) = 총 1000 개 )
끝!!!!
[ 리플리카 셋이 궁금하면 아래 글 참고 ]
https://urame.tistory.com/entry/mongodb-%EA%B5%AC%EC%A1%B0
'mongodb' 카테고리의 다른 글
Mongodb Shard 추가 및 주의사항 (0) | 2021.04.22 |
---|---|
mongodb shard 제거하기 ( remove ) (1) | 2021.04.22 |
MongoDB Replicaset 설정 (0) | 2021.04.14 |
MongoDB SQL Union All ($facet) 하는 방법 (0) | 2021.04.11 |
MongoDB 데이터 삭제 후, 용량 반환 방법 ( compact 명령어 ) (2) | 2021.04.09 |