본문으로 건너뛰기

MongoDB Local Replica 설정 ( With Docker )

Introduction​

  • MongoDB Watch 기능을 사용하여 서비스를 개발하려고 하니 로컬 환경에서 Replica 를 구성해야 했음
  • Docker 를 사용하여 로컬 환경에서 Mongo Replica 를 구성하는 방법 정리
  • MongoDB 4.0 버전을 기준으로 설명

Step​

  1. MongoDB 도커 이미지를 다운로드

    $ docker pull mongo:4.0
  2. MongoDB 도커 컨테이너 실행

    $ mkdir -p ~/Documents/docker/mongo/data/db
    $ docker run --name mongo -d -p 27017:27017 -v ~/Documents/docker/mongo/data/db:/data/db mongo:4.0 --replSet localDev
  3. Docker Container 의 MongoDB Shell 접속

    $ docker exec -it mongo /bin/sh
    # mongo
  4. Replica 설정

    ddocdocDev:OTHER> rs.initiate()
    ddocdocDev:OTHER> rsconf = rs.conf();
    ddocdocDev:OTHER> rsconf.members = [{ _id: 0, host: '127.0.0.1:27017' }]
    ddocdocDev:OTHER> rs.reconfig(rsconf, { force: true });
    ddocdocDev:PRIMARY> exit
  5. OTHER 에서 PRIMARY 로 변경되면 설정이 모두 끝난거다

Finish​

  • 좀 더 간단하게 설정할 수 있는 방법을 찾을 경우 문서를 업데이트한다

  • rs.initiate() 를 했을 때 자동으로 설정되어 있다면 rs.reconfig 를 할 필요가 없다

  • Replica 설정 정보

    {
    "_id" : "localDev",
    "version" : 45345,
    "protocolVersion" : NumberLong(1),
    "writeConcernMajorityJournalDefault" : true,
    "members" : [
    {
    "_id" : 0,
    "host" : "127.0.0.1:27017",
    "arbiterOnly" : false,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 1,
    "tags" : {

    },
    "slaveDelay" : NumberLong(0),
    "votes" : 1
    }
    ],
    "settings" : {
    "chainingAllowed" : true,
    "heartbeatIntervalMillis" : 2000,
    "heartbeatTimeoutSecs" : 10,
    "electionTimeoutMillis" : 10000,
    "catchUpTimeoutMillis" : -1,
    "catchUpTakeoverDelayMillis" : 30000,
    "getLastErrorModes" : {

    },
    "getLastErrorDefaults" : {
    "w" : 1,
    "wtimeout" : 0
    },
    "replicaSetId" : ObjectId("5d26dcefa2e3659e1b79e5b6")
    }
    }