본문 바로가기

Database/Nosql

mongodb Replica Set


replica set(이하 리플리카셋)은 여러 대의 서버에 원본을 복사해 두고,

장애가 발생시  자동으로 장애 이외의 디비 중 하나를 선택하여 원본 디비처럼 사용할 수 있도록 있습니다. 이로 인해 서비스를 끊기지 않고 지속적으로 유지할 수 있습니다. 

리플리카셋에서 첫번째 입력을 담당하는 서버를 primary 서버라 부르며 그밖의 서버를 secondary 서버라 부릅니다. 프라이머리 서버는 세컨더리 서버를 2초 마다 상태 체크하여 데이터 동기화를 하기 위해 HeartBeat(일종의 ping 확인)를 확인합니다. 이때 세컨더리서버가 사용할수 없더라도 프라이머리 서버는 살아있으므로 서비스는 유지 됩니다. 

만일 프라이머리 서버에 이상이 생길 경우 세컨더리서버 끼리의 선거를 통해 프라이머리서버를 선출하여 작동하게 됩니다. 이때 세컨더리->프라이머리 서버로 변환시 디비에 대한 입출력데이터는 손실될수 있습니다. 

리플리카셋 또한 샤딩과 마찬가지로 저장할 공간을 만들고 서버 셋팅만 해주면 됩니다.

 $ mkdir repl1 repl2 repl3

먼저 리플리카셋에 저장할 디렉토리를 생성합니다. 

$ sudo mongod --replSet replicasetTest -dbpath /data/repl1 -port 10000

$ sudo mongod --replSet replicasetTest -dbpath /data/repl2 -port 10001

$ sudo mongod --replSet replicasetTest -dbpath /data/repl3 -port 10002


서버를 실행하였으니 이제 접속하여 리플리카셋을 설정해 줍니다. 먼저 첫번째 서버에 접속합니다. 

$ sudo mongo localhost:10000

> var config={_id:'replicasetTest', members:[{_id:0, host:'localhost:10000'}, {_id:1, host:'localhost:10001'}, {_id:2, host:'localhost:10002'}] };

리플리카셋으로 지정할 서버들의 목록을 만들어준 후 

> rs.initiate(config);

리플리카셋으로 등록합니다. 


등록후 위와 같이 현재 첫번째 서버가 프라이머리서버가 되었음을 확인할수 있습니다. 

> exit


두번째 서버로 접속하여 확인해 보면 

$ sudo mongo localhost:10001


위와 같이 세컨더리 서버가 되었음을 확인할수 있습니다. 

>exit

$ sudo mongo localhost:10000

다시 첫번째 프라이머리 서버로 들어가서 서버를 종료시켜 보겠습니다. 

> use admin;

> db.shutdownServer();

프라이머리 서버 셧다운 후 두번째 혹은 세번째 서버로 접속해 보면 (어떤 서버가 프라이머리 서버가 됐는지는 접속해야 알수 있습니다. 서버 셋팅시 서버에 대한 우선순위를 지정하여 어떤 서버가 다음 프라이머리 서버가 될수 있도록 할수 있으나 실제 서비스 상에서는 어떤 서버가 프라이머리 서버가 되든 서비스가 죽지 않기 때문에 알 필요가 없습니다. )

$ sudo mongo localhost:10001 

혹은 

$ sudo mongo localhost:10002


저의 경우엔 세번째 서버가 프라이머리 서버가 되어 동작함을 확인 할수 있습니다. 

이렇듯 끊임없는 서비스 제공을 위해서 레플리카셋은 꼭 필요한 기능입니다. 

'Database > Nosql' 카테고리의 다른 글

mongodb sharding  (0) 2016.05.11
mongodb 기본 CRUD  (0) 2016.05.10
mongodb 기초 쿼리  (0) 2013.03.03
초간단 ubuntu 에 mongodb 설치하기  (0) 2013.03.01