ํ๋ก์ ํธ์์ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์ ์๋ MongoDB ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ AWS DMS ๋ฅผ ์ฌ์ฉํ์ฌ S3๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๊ฒ ๋์๋ค..!! DMS CDC ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ณด๊ธฐ ์ํด์ mongoDB ๋ ํ๋ฆฌ์นด ์ ์ ๊ตฌ์ถํด๋ณด๊ฒ ๋์๋ค.
MongoDB ReplicaSet ์ด๋ ?
Replica Set์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋ฑ์ฅํ๋๋ฐ, Mongo DB์์๋ ๊ด์ ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋์ผํ ๋ฐ์ดํฐ ์ ์ ์ ์ฅํ๊ณ ์ด์ํ๊ธฐ ์ํ ํด๋ฌ์คํฐ์ด๋ค. Replica Set์ ๊ตฌ์ฑํด์, ํ๋์ ์๋ฒ์ ์ฅ์ ๊ฐ ์ผ์ด๋๋๋ผ๋ ๋ค๋ฅธ ์๋ฒ๊ฐ ๋์ผํ ๋ฐ์ดํฐ ์ ์ ์ด์ํ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
Replica Set ์ ํจํด
MongoDB์์ ๋ ํ๋ฆฌ์นด์ ์ ๊ตฌ์ฑํ๋ ํจํด์ ํฌ๊ฒ ๋๊ฐ์ง์ด๋ค.
1. PSS (Primary - Secondary - Secondary) ๊ตฌ์ฑ
๋ง๊ทธ๋๋ก primary node 1๊ฐ, secondary node 2๊ฐ๋ก ์ด๋ฃจ์ด์ง ๊ตฌ์ฑ์ด๋ค. Primary Node ์์ ์ด๋ ํ ์์ ์ด ์ํ๋๋ฉด oplog์ ์์ ๋ก๊ทธ๊ฐ ์ ์ฅ๋๋ค. Secondary Node ๋ oplog ๋ฅผ ๋ณด๊ณ ์์ ์ ๋์ผํ๊ฒ ์ํํ๋ค.
2. PSA (Primary - Secondary - Arbiter) ๊ตฌ์ฑ
Arbiter Node
Arbiter Node ๋ Primary Node ๋ Secondary Node์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ผ๋ก ์ ์ฅํ์ง๋ ์๋๋ค. ๋ฐ๋ผ์ Primary , Secondary์ ๋นํด ์ฌ์์ด ๋ฎ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ฑํ ์ ์๋ค. Arbiter ๋ Primary Node์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ์ด์ฉํ ์ ์๋ ์ํ๊ฐ ๋์์ ๋ ๋จ์์๋ Secondary Node๋ค ์ค์์ Primary Node ์ญํ ์ ๋๊ฐ ์ํํ ์ง ์ ํ๋ 'Election'์ ์ํํ๋ค.
Docker Compose ๋ก MongoDB ReplicaSet ๊ตฌ์ฑํ๊ธฐ
์ฌ์ ์ค๋น๋ฌผ : docker, docker compose ์ค์น
MongoDB ๋ ํ๋ฆฌ์นด ์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์ ์ง์ ์ธ์คํด์ค ์ฌ๋ฌ๊ฐ๋ฅผ ๋์์ ๊ตฌ์ฑํ ์ ๋ ์๋ค. ํ์ง๋ง docker copmose๋ก ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๊บผ๋ฒ์ ๊ตฌ์ฑ, ์ค์น, ๊ด๋ฆฌํ๋ฉด ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ด์ ์ ํํ๊ฒ ๋์๋ค. Docker Compose ๋ yaml ํ์ผ (docker-copmose.yml)๋ก ๋์ปค ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ์ฌ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๋ ๋๊ตฌ์ด๋ค.
docker ์ docker compose ๋ฅผ ์ค์นํ๊ณ , docker ๋ฅผ ํตํด ์ปจํ ์ด๋๋ค์ด ํต์ ํ ์ ์๋๋ก bridge type์ ๋คํธ์ํฌ๋ฅผ ํ๋ ๊ตฌ์ฑํ๋ค !!
$ sudo docker network create mongoCluster
๋คํธ์ํฌ๊ฐ ์ ์์ฑ๋์๋์ง ๋ค์์ ๋ช ๋ น์ด๋ก ํ์ธํ๋ค.
$ sudo docker network ls
mongoDB ๋ ํ๋ฆฌ์นด์ ์ ์ฐธ์ฌํ node๋ค ๋ผ๋ฆฌ ํต์ ํ๊ธฐ ์ํด์๋, key ํ์ผ์ด ํ์ํ๋ค. key ํ์ผ์ ์์ฑํ๊ณ , ๊ถํ์ chmod 400์ผ๋ก ๋ณ๊ฒฝํ๋ค.
$ openssl rand -base64 756 > mongodb.key
$ chmod 400 mongodb.key
$ ls -ld mongodb.key
-r-------- 1 ubuntu ubuntu 1024 Jun 16 05:21 mongodb.key
docker-compose.yml ํ์ผ ๊ตฌ์ฑํ๊ธฐ
version: '3.5'
services:
mongo1:
image: mongo:latest
hostname: mongo1
container_name: mongo1 # primary node
restart: always
environment: # MongoDB root ๊ณ์ & ๋น๋ฐ๋ฒํธ ์ค์
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 1234
ports:
- 27017:27017
volumes:
- ./data/db/replica/mongo1:/data/db
- ./mongodb.key:/etc/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /etc/mongodb.key
chown 999:999 /etc/mongodb.key
exec docker-entrypoint.sh $$@
command: "mongod --bind_ip_all --replSet myReplicaSet --keyFile /etc/mongodb.key"
mongo2:
image: mongo:latest
hostname: mongo2
container_name: mongo2 # secondary node (1)
restart: always # ์ปจํ
์ด๋ ์ ์ฑ
์ค์ - ๋ฌธ์ ๋ฐ์์ restart ํ๊ธฐ
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 1234
depends_on:
- mongo1
ports: # ์ธ๋ถ์์ 27018 ํฌํธ๋ก ์ ์ํ๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์ 27017 ํฌํธ๋ก ํฌํธํฌ์๋ฉ
- 27018:27017
volumes:
- ./data/db/replica/mongo2:/data/db
- ./mongodb.key:/etc/mongodb.key
entrypoint:
- bash
- -c
- |
chmod 400 /etc/mongodb.key
chown 999:999 /etc/mongodb.key
exec docker-entrypoint.sh $$@
command: "mongod --bind_ip_all --replSet myReplicaSet --keyFile /etc/mongodb.key"
mongo3:
image: mongo:latest
hostname: mongo3
container_name: mongo3 # secondary node (2)
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 1234
depends_on:
- mongo2
ports:
- 27019:27017 # ์ธ๋ถ์์ 27018 ํฌํธ๋ก ์ ์ํ๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์ 27017 ํฌํธ๋ก ํฌํธํฌ์๋ฉ
volumes: # key ํ์ผ ๋ง์ดํธ ํ๊ธฐ && mongoDB ์ ์ฅ ๊ณต๊ฐ ๋ง์ดํธ ํ๊ธฐ
- ./data/db/replica/mongo3:/data/db
- ./mongodb.key:/etc/mongodb.key
entrypoint: # key ํ์ผ ๊ถํ ์ค์
- bash
- -c
- |
chmod 400 /etc/mongodb.key
chown 999:999 /etc/mongodb.key
exec docker-entrypoint.sh $$@
command: "mongod --bind_ip_all --replSet myReplicaSet --keyFile /etc/mongodb.key"
networks:
default:
name: mongoCluster
docker-compose.yml ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ์ํจ๋ค.
$ sudo docker-compose up -d
Docker-Compose.yml ํ์ผ ์ค๋ช
IP Binding
--bind_ip ์ต์ ์ MongoDB ๋ ํ๋ฆฌ์นด์ ์ ์ฐธ์ฌํ๋ ๋ ธ๋๋ค ์ฐ๊ฒฐ์ ์ํด ๋ชจ๋ ip ์์ listen ์ํ๋ก ๋๊ธฐ์ํค๋ ์ค์ ์ด๋ค.
mongodb.key Permission
entrypoint:
- bash
- -c
- |
chmod 400 /etc/mongodb.key
chown 999:999 /etc/mongodb.key
exec docker-entrypoint.sh $$@
๋ ํ๋ฆฌ์นด ์ ์ ๊ตฌ์ฑํ๋ ๋ช ๋ น์ด๋ฅผ ๋ ๋ฆฌ๊ธฐ ์ ์ key ํ์ผ ํผ๋ฏธ์ ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผ mongoDB๊ฐ key ํ์ผ์ ์ด์ฉํด์ ๋ ํ๋ฆฌ์นด ์ ์ ๊ตฌ์ฑํ ์ ์๋ค.
primary node ๋ก ์ด๊ธฐํํ๊ธฐ
mongo1 ์ปจํ ์ด๋์ ์ ์ํ ํ , ๋ ํ๋ฆฌ์นด ์ ์ primary node ๋ก ์ด๊ธฐํ ์งํํ๋ค.
$ sudo docker exec mongo1 -it /bin/bash
$ rs.initiate()
'Cloud Engineering > Docker ๐ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Django ์ฑ Docker ์ด๋ฏธ์ง๋ก ๋ฐฐํฌํ๊ธฐ (0) | 2024.01.04 |
---|---|
[Docker] Harbor HTTP ๊ตฌ์ฑ์ผ๋ก ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Docker Registry ๋ฅผ ์ด์ฉํ Private Registry ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Harbor HTTPS ๊ตฌ์ฑ์ผ๋ก ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Docker ์ ์ฅ์์ ์ด๋ฏธ์ง ์ ๋ก๋ํ๊ธฐ (0) | 2023.02.03 |