ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • window 로컬 환경에 mongoDB replSet 셋업하기.
    개발일지/mongoDB 2019. 4. 16. 11:00

    시스템 구축하는것은 할때마다 항상 까먹기도 하고 새롭기도 하기때문에 그때마다 구글링 youtube 를 뒤지곤한다

     

    오늘은 윈도우 로컬 환경에 mongoDB replication 셋업을 기록하여 도움이 필요한 사람들 혹은 나 자신에게 기억을 돋게 하기 위해 작성하겠다.

     

    기본환경 

     - mongoDB Server 가 설치 되어있는 상태라고 생각하고 진행하겠다

       (혹 필요하신 분들 아래 링크로 설치 하시면 되겠습니다.)

     - 환경변수 path 설정 된 상태라고 생각하고 진행하겠다.

       (구글링으로 mongoDB 환경변수 라고 검색하면 자세히 잘 나와있다.)

     

    https://www.mongodb.com/download-center/community

     

    MongoDB Download Center

    MongoDB AtlasGlobal Cloud Database Deploy, operate, and scale a MongoDB database in the cloud with just a few clicks. Fully elastic and highly available by default, MongoDB Atlas is the easiest way to try out the latest version of the database, MongoDB 4.0

    www.mongodb.com

    리플리카셋 간단 설명

    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} )

     

     

     

     

    • Add to Phrasebook
       
      • No word lists for Korean -> Korean...
         
      • Create a new word list...
    • Copy

    댓글

Designed by Tistory.