Miguel Lee

mongodb - replica set 구성 실패시 재구성

21 Oct 2022

MongoDB 이전 설치 중 replica set 이슈로 인해 다시 replica set을 설정해야 하는 상황이 되었다. MongoDB는 레플리카 셋으로 설정시 구성 서버 중 하나의 서버가 priority를 기반으로 자체적으로 Primary를 설정한다. 이 때, 세 개의 서버가 모두 스스로를 Secondary로 인식하는 이슈가 발생하였다.

많은 삽질을 거쳐 찾아낸 replica set initiation의 rollback 방법을 정리해 둔다.

초기 설정의 경우, 존경하는 K의 블로그를 참고하였다. MongoDB 설치

• 1. /etc/mongod.conf 또는 mongod 실행 시 사용할 .conf 파일에 replication 옵션을 주석처리한다.

  // mongod.conf 예시
  systemLog:
    destination: file
    path: "/applications/mongodb/log/mongod.log"
    logAppend: true
    logRotate: rename
  storage:
    engine: wiredTiger
    directoryPerDB: true
    wiredTiger:
        engineConfig:
          journalCompressor: snappy
        collectionConfig:
          blockCompressor: snappy
        indexConfig:
          prefixCompression: true
    dbPath: "/applications/mongodb/data"
    journal:
        enabled: true
        commitIntervalMs: 300
  processManagement:
    fork: true
    pidFilePath: "/tmp/mongod.pid"
  net:
    port: 27019
    bindIpAll: true
    maxIncomingConnections: 20000
    unixDomainSocket:
        enabled: false
  replication: // 이 부분을 주석처리한다
      oplogSizeMB: 10240
      replSetName: "scrumBy51"
  security:
      authorization: disabled
      keyFile: /applications/mongodb/51-mongodb.key

• 2. service로 띄운 mongod을 재시작한다.

  service mongod restart

service 명령어가 아닌

  mongod -f /applications/mongodb/config/mongod.conf

등의 명령어로 실행시킨 경우

  ps -ef | grep mongo

명령어를 통해 mongod이 실행중인 포트를 찾아

  kill -9 포트번호

를 사용하여 포트를 죽이고, 재실행한다.

• 3. Primary로 설정할 서버에서, rs.init()을 통해 다시 설정한다.

// 예시
rs.initiate({
  _id: "scrumBy51", // .conf 파일에서 설정한 replica set 이름
  version: 1,
  members: [
    { _id: 0, host: "10.70.152.40:27019" },
    { _id: 1, host: "10.70.152.77:27019" },
    { _id: 2, host: "10.70.152.59:27019" },
  ],
});

• 4. 실행이 완료되었으면, .conf 파일의 replication 옵션을 다시 활성화시킨다.

• 5. 2번의 과정을 반복하여 재실행한다.