몽고디비(mongodb) 샤드(shard) 설정

2021. 4. 19. 17:02mongodb

반응형

금일은 몽고디비 샤드에 대해 알아보겠다.

 

금일 몽고디비 구성도는 아래와 같다.

 

2번정도 쭉 따라서 확인차 만들어 보았다.

큰 문제 없이 구성이 된다.

 

 

 

 

몽고디비 구성도

 

 

단, 위 그림에서 회색으로 표현된 부분은 레플리카 셋이므로 구성에서 빼겠다. 

 

레플리카 셋을 설정이 쉬우니, 내가 정리한 글을 참고하면 되겠다. 

( 해당 링크 : urame.tistory.com/entry/mongodb-%EA%B5%AC%EC%A1%B0 )

 

그럼 일단 mongodb 설정을 위해, 디렉트리를 만들어 보겠다. 

 

특별히 해줄 작업은 없다. 

 

볼때는 어려운데, 막상 해보면, config 설정이 작업의 전부이다. 

 

그러니!!! 아래 명령어를 그대로 따라온다면 충분히 설정이 가능할 것이다. 

 

본 환경에서는 shard 구성과 replication 설정을 각각 1개씩 해주었다.

 

 

728x90

 

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 구성도

 

몽고디비 config 구성도

 

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( )

 

몽고디비 shard 결과

 

 

샤드 세팅이 끝났다. 

 

그대로 명령어를 수행했다면 에러 없이 잘 작업이 수행 되었을 것이다. 

 

비록 싱글서버에서 구성은 했지만, 멀티 서버도 큰 문제없이 구성이 될것이다.

 

방화벽 설정은 내 불로그에 설정하는 방법이 있으니, 찾아서 수행하면 된다.  

 

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 Replicaset 설정

몽고디비 레플리카셋 설정을 알아보겠다. 1. mongodb 구조를 만든다. $ mkdir mongodb $ cd mongodb $ mkdir conf $ mkdir data $ mkdir log $ mkdir pid 2. conf를 설정해준다. 2-1 mongodb_replicaset 1번 설정을 해준다 $ cd conf $ v

urame.tistory.com

 

 

 

 

반응형