본문 바로가기
DBMS

몽고DB standalone to replica sets

by developer's warehouse 2023. 12. 18.

우분투 22.04에 몽고DB를 standalone으로 설치했습니다. 몇 가지 간단한 테스트를 하고, 트랜잭션을 테스트해보려 하는데 에러가 나와서 확인해 보니, 몽고DB에서 트랜잭션은 분산트랜잭션만 가능하다고 합니다. 결국 replica sets나 sharded cluster를 설정해야만 합니다. 그래서, 기존에 설치된 standalone 몽고DB를 replica sets로 변경해 보았습니다.

몽고DB standalone to replica sets 썸네일

Replica Set을 배포시에 고려사항

프로덕션 환경에서는 Replica set의 각 구성원을 자체 머신에 배포합니다. MongoDB가 기본 포트인 27017에서 수신 대기하는지 확인해 보는 것이 좋습니다.

IP 주소 변경으로 인한 구성 업데이트를 방지하려면 IP 주소 대신 DNS 호스트명을 사용하세요. 특히 복제 세트 구성원 또는 샤드된 클러스터 구성원을 구성할 때는 IP 주소 대신 DNS 호스트명을 사용하는 것이 중요합니다. 분할된 네트워크 범위에서 클러스터를 구성하려면 IP 주소 대신 호스트명을 사용하세요.
MongoDB 5.0부터는 IP 주소로만 구성된 노드는 시작 유효성 검사에 실패하여 시작되지 않습니다.

 

IP Binding

--bind_ip 옵션을 사용하면 MongoDB가 구성된 주소에서 애플리케이션의 연결을 수신 대기하도록 할 수 있습니다.

 

MongoDB 바이너리인 mongod(basic)와 mongos(shard)는 기본적으로 localhost에 바인딩됩니다. 바이너리에 대해 net.ipv6 구성 파일 설정 또는 --ipv6 명령줄 옵션이 설정되어 있으면 바이너리는 추가로 localhost IPv6 주소에 바인딩됩니다. 기본적으로 localhost에 바인딩된 mongod 및 mongos는 동일한 컴퓨터에서 실행 중인 클라이언트의 연결만 허용합니다. 이 바인딩 동작에는 mongosh 및 Replica set 또는 샤드 클러스터(mongos)의 다른 구성원이 포함됩니다. 원격 클라이언트는 localhost에만 바인딩된 바이너리에 연결할 수 없습니다. 기본 바인딩을 재정의하고 다른 IP 주소에 바인딩하려면 net.bindIp 구성 파일 설정 또는 --bind_ip 명령줄 옵션을 사용하여 호스트 이름 또는 IP 주소 목록을 지정합니다.

 

예를 들어, 다음 mongod 인스턴스는 로컬 호스트와 IP 주소 198.51.100.1과 연결된 호스트 이름 My-Example-Associated-Hostname에 모두 바인딩됩니다:

mongod --bind_ip localhost,My-Example-Associated-Hostname

 

이 인스턴스에 연결하려면 원격 클라이언트가 hostname 또는 관련 IP 주소 198.51.100.1을 지정해야 합니다:

mongosh --host My-Example-Associated-Hostname

mongosh --host 198.51.100.1

Standalone mongod를 Replica Set으로 변경하기

standalone mongod 인스턴스는 테스트 및 개발에 유용합니다. 독립형 인스턴스는 단일 장애 지점이 될 수 있으므로 프로덕션 배포에는 적합하지 않습니다. 클러스터라고도 하는 복제본 세트는 중복성과 가용성을 제공합니다. 프로덕션 환경에서는 항상 replica set을 사용하세요.

프로덕션 환경에서 사용하려는 데이터가 있는 독립 실행형 서버가 있는 경우 먼저 standalone 서버를 replica set로 변환하세요.

 

시작하기 전에

독립 실행형 인스턴스를 변환하기 전에 replica set와 sharded cluster 중 어느 것이 워크로드에 더 적합한지 고려하세요.

sharded cluster는 특별한 종류의 클러스터입니다. sharded cluster는 중복성과 가용성을 제공하며, 샤드 간에 데이터를 분산합니다. 샤드는 일반적으로 여러 서버에서 호스팅되며 수평적 확장이 가능합니다.

 

1. Standalone 인스턴스 종료

mongosh를 사용하여 mongod 인스턴스에 연결하고, admin 데이터베이스로 전환한 후 shutdown을 실행합니다.

mongosh
use admin
db.adminCommand({ shutdown: 1, comment: "Convert to cluster" })

 

test> show dbs
admin   40.00 KiB
config  72.00 KiB
local   40.00 KiB
test> use admin
switched to db admin
admin> show collections
system.version
admin> db.adminCommand({ shutdown: 1, comment: "Convert to cluster" })
MongoNetworkError: connection 5 to 127.0.0.1:27017 closed

 

2. replica set 설정

커맨드라인으로 변경하기

커맨드라인 줄에서 mongod 인스턴스를 구성하는 경우, --replSet 옵션을 사용하여 복제 세트의 이름을 설정합니다. 예를 들어, 다음과 같은 명령을 사용할 수 있습니다.

목적
옵션
Cluster name
Network details
Data path
Authentication details

 

예를 들면, 아래와 같이 변경할 수 있습니다.

mongod --replSet rs0 \
       --port 27017 \
       --dbpath /path/to/your/mongodb/dataDirectory \
       --authenticationDatabase "admin" \
       --username "adminUserName" \
       --password

 

설정파일을 이용하여 변경하기

구성 파일을 사용하여 mongodb를 시작하는 경우 구성 파일에 복제 섹션을 추가합니다. replSetName 값을 편집하여 복제 세트의 이름을 아래와 같이 설정합니다.

replication:
   replSetName: rs0

 

우분투 22.04에서 패키지 관리자(apt-get)로 설치하면 /etc/mongod.conf가 기본 구성 설정 파일입니다.

데이터 디렉토리, 복제본 세트 이름, IP 바인딩을 mongod.conf 구성 파일에 지정하고 다음 명령으로 mongod를 시작할 수 있습니다.

mongod --config /etc/mongod.conf

 

혹은, 기본 설정파일을 수정했으므로 systemctl을 이용하여 재시작할 수 있습니다.

#mongodb 시작 명령
sudo systemctl start mongod

#명령 수행 후 프로세스 상태
mongodb  1668823       1 43 15:10 ?        00:00:01 /usr/bin/mongod --config /etc/mongod.conf

3. Replica set 초기화

복제 세트를 초기화하려면, mongosh를 사용하여 서버 인스턴스에 다시 연결한 후, rs.initiate()를 실행합니다.

rs.initiate()

# 실제 실행 결과
test> rs.initiate()
{
  info2: 'no configuration specified. Using a default configuration for the set',
  me: '127.0.0.1:27017',
  ok: 1
}
rs0 [direct: other]

 

Replica set는 한 번만 초기화하면 됩니다.

Replica set 구성을 보려면 rs.conf()를 사용하세요.

Replica set의 상태를 확인하려면 rs.status()를 사용하세요.

 

4. replica set에 노드 추가

3번까지 실행하면 하나의 Primary 노드가 있습니다. 아래 단계는 Replica set에 새 노드를 추가하는 것입니다.

노드를 추가할 준비가 되면, rs.add()를 사용합니다.

아래의 두 링크를 참고해서 노드를 추가할 수 있습니다.

 

참고자료

Convert a Standalone mongod to a Replica Set — MongoDB Manual

facebook twitter kakaoTalk kakaostory naver band shareLink