MongoDB 복제 세트의 노드 구성과 초기화 확인하기

목차

MongoDB 8.0 계열 복제 세트 구성 기록을 정리했습니다. 원본의 한 서버에 보조 프로세스와 arbiter를 함께 띄운 실습은 물리 장애 이중화가 아니므로, 여기서는 서로 다른 호스트의 데이터 노드 3개를 기준으로 구성 원칙과 확인 절차를 설명합니다.

노드와 이름 준비

db1·db2·db3.example.com이 모든 노드에서 올바르게 해석되어야 합니다. 각 노드는 같은 major 버전과 고유 데이터 경로를 사용하고 서로의 MongoDB 포트로 통신할 수 있어야 합니다. 예시는 포트 57017, 복제 세트 이름 replName입니다.

공통 내부 인증 설정

키 파일은 한 번 생성해 세 노드에 안전하게 전달하고 mongod만 읽을 수 있도록 합니다. 각 노드에서 해당 파일의 소유자와 권한을 확인합니다. 외부 공개 경로에 키를 두지 않습니다.

TERMINAL / CONFIG
openssl rand -base64 756 > /home/lieper/mongo-keyfile
sudo install -o mongod -g mongod -m 400 /home/lieper/mongo-keyfile /etc/mongo-keyfile
TERMINAL / CONFIG
security:
  authorization: enabled
  keyFile: /etc/mongo-keyfile
replication:
  replSetName: replName

각 mongod.conf에는 실제 노드의 bindIp·port·storage 설정도 있어야 합니다. 키 파일을 쓴 내부 인증과 클라이언트 접속용 사용자 인증은 별개입니다. 기존 DB 전환은 사용자·애플리케이션·중지 순서를 포함한 별도 변경 계획이 필요합니다.

새 복제 세트 초기화

새 데이터 디렉터리로 준비된 노드에서만 초기화합니다. 최초 관리자 계정 생성은 localhost 예외와 인증 상태에 맞게 진행하고 노출된 상태로 방치하지 않습니다.

TERMINAL / CONFIG
rs.initiate({
  _id: 'replName',
  members: [
    {_id: 0, host: 'db1.example.com:57017', priority: 2},
    {_id: 1, host: 'db2.example.com:57017', priority: 1},
    {_id: 2, host: 'db3.example.com:57017', priority: 1}
  ]
})
rs.status()

PRIMARY 하나와 SECONDARY 둘이 정상인지 확인합니다. priority는 선출 선호도이며 특정 노드가 항상 PRIMARY라고 보장하지 않습니다. 애플리케이션 연결 문자열에는 여러 seed와 replicaSet 이름을 지정하고 장애 전환을 시험합니다.
참고: https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/

DB › MongoDB
MongoDB 목록