안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
Replica Set
→ DB의 데이터들을 여러 서버에 동기화하는 것을 의미
장점
- 하나의 서버가 다운되어도 데이터 유지 가능 (다른 서버에 동기화 되어 있으므로)
- 데이터 복구/백업 설정 가능
- 데이터 안전하게 보존 가능
- 서비스 운영 시 다운타임이 없음
사용 배경
mongoose를 이용하여 DB 작업을 처리하던 중, transaction 처리가 필요했는데 반드시 Replica Set 설정이 필요하다.
Replica Set 설정을 하지 않고 트랜잭션 처리를 할 경우, 아래와 같은 오류 발생"message": "Transaction numbers are only allowed on a replica set member or mongos"
⭐️ stanlone 모드에서는 트랜잭션 처리가 불가하여 사용 ⭐️
Docker로 MongoDB 개발 환경이 구성되어 있었기 때문에, 아래와 같이 docker-compose.yml 파일을 구성한다.
docker-compose.yml
version: "3.0"
services:
mongo1:
container_name: mongo1
image: mongo
command: mongod --replSet replset --port 27017
ports:
- "27017:27017"
environment:
MONGO_HOST: "127.0.0.1"
MONGO_PORT: 27017
MONGO_DATABASE: dev
mongo2:
container_name: mongo2
image: mongo
command: mongod --replSet replset --port 27018
ports:
- "27018:27018"
environment:
MONGO_HOST: "127.0.0.1"
MONGO_PORT: 27017
MONGO_DATABASE: dev
mongo3:
container_name: mongo3
image: mongo
command: mongod --replSet replset --port 27019
ports:
- "27019:27019"
environment:
MONGO_HOST: "127.0.0.1"
MONGO_PORT: 27017
MONGO_DATABASE: dev
위와 같이 docker-compose.yml 파일을 생성했다면, 생성한 container에 접속해서 Replica Set 설정을 해줘야 한다.
mongo1 Container 접속
$ docker exec -it mongo1 mongosh --port 27017
Replica Set에 대한 config 지정
> config = {
"_id" : "replset", // docker-compose에 있는 replSet과 동일하게
"members" : [
{
"_id" : 0,
"host" : "mongo1:27017"
},
{
"_id" : 1,
"host" : "mongo2:27018"
},
{
"_id" : 2,
"host" : "mongo3:27019"
}
]
}
> rs.initiate(config);
Replica Set 설정이 된 MongoDB 접속 url을 업데이트 해주고 DB 작업을 하면, 정상적으로 트랜잭션 처리가 되는 것을 확인할 수 있다.
mongodb://${host}:${port}/${database}?replicaSet=${replicaName}
Local 접속 시 getaddrinfo ENOTFOUND chat-mongo1
오류가 발생하는 경우
host 설정하기
$ sudo vi /etc/hosts
# 아래 내용 추가
# MongoDB Replica Set
127.0.0.1 chat-mongo1
127.0.0.1 chat-mongo2
127.0.0.1 chat-mongo3
✅ 참고 사이트
MongoDB Transaction 트랜잭션 개념부터 실습까지 (2) - 로컬에서 Replica Set 구성하기
docker-compose로 MongoDB ReplicaSet 환경 구축하기 | by Key Kim | Medium
Local Client에서 접속가능한 Replica Set 구성하기 (with Docker)
'DataBase > mongoDB' 카테고리의 다른 글
mongoose) 결과값에 spread 연산자 사용 시 (0) | 2024.01.15 |
---|---|
mongoose) 몽구스 사용하기 - 스키마 사용, 실전 프로젝트 (0) | 2023.07.04 |
mongoDB) CRUD 작업하기 (0) | 2023.06.28 |
mongoDB) 데이터베이스와 컬렉션 생성하기 (0) | 2023.06.27 |
mongoDB) Mac M2 설치 중 connect ECONNREFUSED 127.0.0.1:27017 오류 (0) | 2023.06.23 |