-
window 로컬 환경에 mongoDB replSet 셋업하기.개발일지/mongoDB 2019. 4. 16. 11:00
시스템 구축하는것은 할때마다 항상 까먹기도 하고 새롭기도 하기때문에 그때마다 구글링 youtube 를 뒤지곤한다
오늘은 윈도우 로컬 환경에 mongoDB replication 셋업을 기록하여 도움이 필요한 사람들 혹은 나 자신에게 기억을 돋게 하기 위해 작성하겠다.
기본환경
- mongoDB Server 가 설치 되어있는 상태라고 생각하고 진행하겠다
(혹 필요하신 분들 아래 링크로 설치 하시면 되겠습니다.)
- 환경변수 path 설정 된 상태라고 생각하고 진행하겠다.
(구글링으로 mongoDB 환경변수 라고 검색하면 자세히 잘 나와있다.)
https://www.mongodb.com/download-center/community
리플리카셋 간단 설명
mongoDB는 기존 RDBMS 처럼 데이터를 안전하게 보관하는 시스템이 되어있지않고 빠른 저장을 지원하기때문에 속도를 빠르지만 데이터 손실/안정성을 위해 별도의 작업이 필요한데 그중에 리플리카셋이 있다고 생각하면 된다.
Primary : 마스터라고 생각하면 될것같다
Secondary : 슬레이브라고 생각하면 될것같다
Arbiter : 결정자 ( 마스터가 죽었을때 여러 슬레이브중에 어떤 슬레이브가 마스터가 될지 경정해주는 녀석이다 )
Arbiter 는 따로 설정하지 않아도 슬레이브들이 알아서 투표하여 결정된다 (arbiter 는 사실 잘 모르겟다 ㅎㅎ)
우선 셋팅을 위해 mongod 3개를 띄우도록 하겠다.
1. window 버튼 > cmd 입력 > 명령 프롬프트 관리자 권한으로 실행 X3 (명령 프롬프트 3개 실행)
2. 각 명령 프롬프트에 mongod 실행
> mongod --replSet <리플리카셋 이름> --dbpath <디비 경로1> --port 27017
> mongod --replSet <리플리카셋 이름> --dbpath <디비 경로2> --port 27018
> mongod --replSet <리플리카셋 이름> --dbpath <디비 경로3> --port 27019
* 리플리카셋 이름은 같게 / 디비 경로를 각각 다르게 해줘야한다. 포트는 사용하고 싶은 포트 를 각각 부여 하면된다.
위와 같이 각각 포트로 실행된다
아직은 이들이 서로 하드비트를 체크하여 마스터 슬레이브 나눠지지 않은 상태이다
한개의 명형 프롬프트를 켜서 mongo 접속하여 설정 해주는 작업이 필요하다
위에 1번 처럼 한번더 cmd 를 켜준다
3. 3대의 mongodb중 원하는 포트로 연결시켜준다
> mongo --port 27017
4. replSet 설정 셋팅
config = { _id : "res02" , members : [
{_id : 0 , host : "localhost:27017"},
{_id : 1 , host : "localhost:27018"},
{_id : 2 , host : "localhost:27019"},
]}mongodb 는 js 기반이기때문에 js 문법으로 작업해주는데 config 변수에 아까 실행한 --replSet 이름을 _id 에 넣어주고 members 에 실행시킨 갯수만큼 그 정보를 넣어주면된다.
다음 명령어를 실행하여 초기값을 셋팅해준다.
rs.initiate(config );
그렇게 된순간 셋팅이 완료 되는것이다 .
셋팅 상태를 보려면
rs.status() 를 입력해서 결과 화면을 보면 알수 있다.
27017 포트의 mongodb 를 강제적으로 down 시키면 각자가 서로 하트비트를 체크하여 마스터를 알아서 셋팅한다
27017포트의 db 는 연결이 안된다는 상태를 표기하고 27018 db 가 프리머리(마스터가 된것을 볼수 있다)
이후 27017포트가 다시 살아난다 할지라도 27018 db 는 여전히 프리머리 이며 27017db 는 슬레이브가 된다
이런식으로 서로가 서로를 계속 체크 / 동기화 작업을 계속적으로 해주면서 디비를 보다 안정적으로 가져갈수 있게 되는것이다.
이번에는 로컬 window 환경에서 셋팅하는 방법을 알아봤지만 실 서비스에서는 이와 같이 로컬window 환경에 셋팅하기 보다 리눅스 기반에 서버 3대를 연결해서 사용하곤 할테니 다음번에는 docker 를 활용하여 셋팅하는 방법을 알아보록 하겠다.
PS ) 혹 테스트 하다가 rs.initiate(config ); 실행시 오류가 아래와 같이 발생할때가 있다
{ "ok" : 0, "errmsg" : "This node was not started with the replSet option", "code" : 76, "codeName" : "NoReplicationEnabled" }
이 오류는 구글링 해보니 예전 셋팅된 replSet 를 참고하고 있는 경우라고한다
아래와 같은 명령어로 처리 할수 있다
db.adminCommand( { shutdown : 1} )
'개발일지 > mongoDB' 카테고리의 다른 글
[ MongoDB + ElasticSearch + Monstache ] 도커 기본 셋팅을 해보자 (4) 2019.10.02 [ mongodb Sharding] 몽고디비 샤딩 적용하기 / config sever + replica set (0) 2019.04.22 MongoDB 기본 이론 정리 (관계형 데이터 베이스와 몽고디비 차이??) (0) 2019.04.19 mongoDB replicaSet 환경을 실 서비스에 적용해보자 with mongoose (1) 2019.04.17 docker + mongodb replSet 우분투 몽고디비 리플리카셋업 하기 with Docker (3) 2019.04.16