새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.
Mongo Sharding 3 - 서버 확장
configsvr 권장 3세트와 shardsvr를 더 추가해서 수평확장(scale-out)이 잘 이루어지는지 확인
구성
shardsvr add
아래 링크와 같이 호스트명 dbs2 shardsvr를 추가한다.
shard add : https://fkkmemi.github.io/mongo-sharding/
기본적으로는 primary에서만 추가를 할 수 있기 때문에 기존 두 서버중 아무 shardsvr나 들어가서 rs.status() 를 확인하여 primary를 찾아내고 작업하면 된다.
물론 rs.reconfig(v,{force:true}) 하면 secondary에서도 가능하지만 권장사항을 지키는 것이 좋다
mongo dbc:27018 //or mongo dbs1:27018
rs.status()
rs.add("dbs2:27018")
rs.status()
확인해보면 rs0 라는 replSet은 3개가 되었다.
configsvr add
아래 링크와 같이 dbs2에서 configsvr를 구성,저장하고 실행한다.
configsvr add : https://fkkmemi.github.io/mongo-sharding-2/
mongod --configsvr -f configsvr.conf
지난번엔 멤버를 한번에 등록했지만 이번엔 한 대만 추가한다.
rs.add("dbs2:27019")
rs.status()
mongos modify
dbc, dbs1의 mongos.conf 파일을 열어서 configDB에 dbs2:27019를 추가한다.
vi /data/mongo/mongos.conf
# mongos.conf
systemLog:
destination: file
logAppend: true
path: /data/mongo/log/mongos.log
processManagement:
fork: true
pidFilePath: /data/mongo/pid/mongos.pid
net:
port: 27017
# bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
sharding:
configDB: configReplSet/dbc:27019,dbs1:27019,dbs2:27019
설정파일을 바꾼 후 재시작한다.
mongo
>use admin
>db.shutdownServer()
>exit
mongos -f /data/mongo/mongos.conf
dbs2의 mongos는 안해도 되지만 추후 로드밸런싱 대비 라우터를 추가한다.
이제 3곳의 서버에 모두 연결 가능하다.
[daemon 확인]
ps -ef|grep mongo
mongo 2445 1 0 09:06 ? 00:01:12 mongod --shardsvr -f shardsvr.conf
mongo 3734 1 0 09:37 ? 00:01:07 mongod --configsvr -f configsvr.conf
mongo 14243 1 0 13:56 ? 00:00:00 mongos -f mongos.conf
매번 커맨드를 쳐서 데몬을 실행시키기는 힘들기 때문에 sh 파일을 만들어 놓는게 좋다
[mongo.sh]
vi /data/mongo/mongo.sh
#!/bin/bash
mongod --shardsvr -f /data/mongo/shardsvr.conf
mongod --configsvr -f /data/mongo/configsvr.conf
mongos -f /data/mongo/mongos.conf
[권한상승]
chmod 777 /data/mongo/mongo.sh
[run]
su - mongo //if mongo 계정이 아니라면.. 꼭 mongo계정으로 실행해야한
sh /data/mongo/mongo.sh
[boot and run]
root계정으로 로그인한 후
vi /etc/rc.d/rc.local
아래 한줄을 추가한다
su - mongo -c '/data/mongo/mongo.sh'
3서버에 read/write와 장애 상황을 만들어서 Self QA Test를 진행해보면 된다
성능시험
기존 서버에 있는 약 1억개의 실제 운영되는 데이터를 가져왔다.
한 컬렉션에서 하루치를 2880개를 찾아내는데 0.02초.
15필드의 데이터를 프로젝션(불필요한 필드 제거) 없이 반나절 맵에 뿌리는데 0.8초
과정은
- map init
- xhr(ajax) get request
- node router(api/data/id)
- mongo query(findById{id})
- response(json)
- map data push
- map poly+marker
집(giga)에서 하면 대부분 0.3초 이내에서 끝난 것 같다.
요약
cloud server 활용
- 기존 3서버(vm)중 하나를 configsvr, mongos 관련 내용을 제거하고 이미지로 만든다
- 호스트 dbs(n) 으로 이미지를 이용해 vm을 생성
- primary shard에 연결해서 dbs(n) 추가
결론
복잡했던 3configsvr만 구성해 놓으면 추가는 쉬움
noSQL답데 너무 빅데이터 엔터 시장만 고려한 것 같은 많은 수의 서버 권장사항 …
마이너버전 업데이트인데도 deprecated된 항목이나 바뀐 것이 너무 많다..
항상 새로운 것에 도전하는 것이 좋지만 이번엔 새버전이 두렵다..
점수 8점
의견
사실 끝이 아니다…
DBA라면 이제 시작일 수 있는 아주 기초적인 것만 한 상태이다.
arbiter 설정도 해야하고, 백업 플랜도 짜야하지만…
여기까지 하고 이제 화려한 front-end로 넘어가야할 시기인 것 같다..
더 파면 가성비가 안나온다..
댓글남기기