본 실습은 Mac을 기준이다.
이제 진짜로 mongodb Replica Set을 만들어보자. 먼저 mongodb를 설치해야한다.
- brew install mongodb
다음으로 Replica Set member(Primary1, Secondary2, Arbiter1)와 log를 위한 디렉토리를 생성한다.
- sudo mkdir /data/db/replSet1
- sudo mkdir /data/db/replSet2
- sudo mkdir /data/db/replSet3
- sudo mkdir /data/db/replSet_Arbiter
- sudo mkdir /data/db/replSet_Log
아래의 4개 명령어를 수행하여 Replica Set 4개를 실행한다.
- sudo mongod --port 20000 --dbpath /data/db/replSet1 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet1.log
- sudo mongod --port 30000 --dbpath /data/db/replSet2 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet2.log
- sudo mongod --port 40000 --dbpath /data/db/replSet3 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet3.log
- sudo mongod --port 20017 --dbpath /data/db/replSet_Arbiter --replSet Mongo_study --smallfiles --noprealloc --nojournal --logpath /data/db/replSet_Log/mongo-replSet_Arbiter.log
아래의 명령어를 수행하면 port가 20000인 mongod에 접속이 된다.
- mongo localhost:20000
정상적으로 접속이 되면 아래와 같이 ‘>’ 프롬프트를 만나게 될 것이다.
> rsconf = { _id: “Mongo_study”, members: [ { _id: 0, host: “localhost:20000” }] } > rs.initiate(rsconf) |
위의 단계를 이상 없이 잘 따라왔다면 다음과 같은 prompt를 만나게 된다.
모두 정상적으로 따라왔다면 현 prompt에서 다음과 같이 명령어를 수행시켜 준다.
- rs.add(“localhost:40000”)
- rs.addArb(“localhost:20017”)
- rs.add(“localhost:30000”)
이제 rs member 4개가 정상적으로 동작을 하게된다.
다음으로 rs 설정을 변경하는 법을 알아보겠습니다. 아래 그림처럼 config 변수에 rs의 config 내용을 받아온다.
실행을 정상적으로 시켰다면 대강 이런 화면이 나올 것이다.
[그림1 rs config 내용 받아오기]
제대로 받아왔는지 확인해보려면 아래의 명령어를 통해 rs 멤버들의 설정을 확인해 보면 된다.
실행시키면 이런 화면이 출력이된다. 아래에 조금 더 내용이 있지만 좀 길어서 대강 저렇게 나온다만 이야기 하겠다.
[그림2 rs config 확인하기]
아래 그림처럼 원하는 rs 멤버만 콕 집어서 확인할 수도 있다.
[그림3 특정 rs member의 config 확인하기]
“localhost:20000” host를 가지는 멤버의 “votes”와 “priority”를 수정해보자.
[그림4 특정 rs member의 config 변경하기]
“rs.conf()” 명령어를 통해 한 번 확인해 보면 설정이 잘 변경됐음을 확인할 수 있다. 여기서 한가지 주의해야 할 점은 “localhost:30000” host를 가지는 rs 멤버의 설정을 변경해 본다. 단, priority를 가장 높은 값을 갖도록 설정해야 한다.
실행을 하면 아래와 같은 그림이 펼쳐진다.
[그림5 priority 변경 후 발생하는 상황]
갑자기 Secondary로 변경이 되었다. “exit”를 통해 해당 mongod에서 벗어난다. 그리고 “mongo localhost:30000” 명령어를 통해 접속을 해보면 Primary인 것을 확인할 수 있다. 이렇게 된 이유는 다음과 같습니다. 살아있는 투표권이 기존의 Primary에게 행사한 개수가 과반수 이상이 되지 않았기 때문이다. Primary는 살아있는 투표권이 과반수 이상이 되지 않으면 스스로 Primary의 지위를 일정시간이 지난 이후에 포기한다. Priority 값이 가장 높은 “localhost:30000” host를 가지는 rs 멤버가 투표를 더 많이 받게 되었고 이로 인해 기존의 Primary였던 멤버는 자신의 지위를 포기하게 된 것이다. 갑자기 Primary가 변경된 이유가 바로 이 때문이다.
<출저: https://unagi44.wordpress.com/Developer Lee>
경로설정때문에도 고생이 참 많은 실습이었지만 리눅스에서는 과연 Replica Set이 어떻게 실행되는지에 대해서 자세히 알 수 있었다. 이 포스팅으로 인해 몽고DB를 조금 더 깊게 학습할 수 있는 계기가 되었으면 한다.
'mongoDB' 카테고리의 다른 글
Sharding의 기능 (0) | 2016.09.03 |
---|---|
왜 Arbiter인가? (0) | 2016.09.03 |
mongodb Replica Set Election (0) | 2016.09.03 |
mongodb Replica Set 알아보기 (0) | 2016.09.03 |
mongodb Replica Set의 필요성 (0) | 2016.09.02 |