본문으로 바로가기

안녕하세요. 나타입니다.


몽고디비로 설치시 테스트서버에서는 상관없지만


운영서버에서 관리시 서버 이슈로 데이터가 유실되면 큰문제인데요.


이러한 부분을 보완하기위해 몽고디비에서 replicatSet이라는 마스터, 슬레이브 개념의 오토 리커버리 정책이 있는데요.


이번 포스팅에서는 이와 관련된 몽고디비 서버 설정 방법에 대해서 알아보겠습니다.


일단 몽고디비서버가 필요하겠죠?


서버 설치방법은 예전 포스팅에서 다루었기때문에 생략하겠습니다.


서버 설치 관련 포스팅이 궁금하시다면 --> 바로가기


서버 설치 이후 부터가 시작입니다.


여기서 다음과 같이 설정합니다.


mongod --fork --logpath 로그경로 --replSet 레플리카셋아이디명 --dbpath 저장경로 -port 27017

fork로 설정해야지 접속이 끊어도 몽고디비가 유지됩니다. fork를 쓰게되면 필수적으로 로그 경로를 지정해줘야합니다.


포트는 사용자가 편하신대로 설정합니다. 저는 편의상 기본포트로 설정했습니다.


그리고 클러스터를 맺을 다른 서버에도 위처럼 서버 설치후 몽고디비를 실행합니다.


이후 한 서버에 들어가서


설치 이후 커맨드에서 mongo 를 치게되면 쉘로 접근이 가능한데요.


몽고디비 쉘에서 


var config={ 

    _id : '레플리카셋아이디명', 
    members : [
        {_id : 0, host : "서버1호스트(ip):27017"}, 
        {_id : 1, host : "서버2호스트(ip):27017"}, 
        {_id : 2, host : "서버3호스트(ip):27017"}
    ]
}

rs.initiate(config)

이렇게 치게되면 레플리카셋이 맺어지는데요.

이후

db.isMaster()라고 치게되면 3개의 클러스터 서버중 마스터 유무를 알 수 있습니다.


 rs.conf()를 치면 현재 관계가 맺어진 서버들 리스트가 json형식으로 출력됩니다.


이후 자바애플리케이션에서는 일반적으로 new Mongo(서버아이피) 형식이 아니라


 List<ServerAddress> seeds = new ArrayList<ServerAddress>();
 seeds.add(new ServerAddress(host, port));

 new Mongo(seeds);


레플리카셋 서버 정보 리스트를 같이 넘기면 됩니다.


그렇다면 어플리케이션에서 자동으로 primary 서버에 붙어서 


기본적으로 사용하던 db connection을 맺게 됩니다.