일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- .dotnet Core 3.1 Install
- DockerDesktop
- 윈도우10 WOL
- DockerWindows
- IOCP
- ubuntu .net Core
- 도커마운트
- Wake On Lan
- IOCP 서버
- mongodb pss
- docker desktop
- docker
- .netCore3.1
- wol
- dotnet Core
- Volume Mount
- MySQL
- mongo docker
- DockerVolume
- mongodb readonly
- Ubuntu VirtualBox
- Docker오류
- 윈도우10 Wake On Lan
- .netCore Install
- IOCP 클라이언트
- 우분투서버가상머신
- Ubuntu Server VirtualBox
- VirtualBox Ubuntu
- Winsock
- 닷넷코어
- Today
- Total
;
[Docker] Docker MongoDB Replica Set 구축하기 본문
"AuthenticationFailed: SCRAM authentication failed, storedKey mismatch" 이런 오류가 날시 해결 방법 및 keyfile 만들기
- 아래 명령어를 사용해도 됩니다. 참조 문서
Deploy New Replica Set With Keyfile Access Control — MongoDB Manual
Navigation This version of the documentation is archived and no longer supported. Deploy New Replica Set With Keyfile Access Control Overview Enforcing access control on a replica set requires configuring: For this tutorial, each member of the replica set
www.mongodb.com
openssl rand -base64 756 > /home/docker/mongo/keyfile
chmod 400 /home/docker/mongo/keyfile
- "/home/ubuntu/mongo/keyfile"을 만들어 주시면 됩니다.
준비 사항
- 머신 Primary(A), Secondary(B), Secondary(C) 총 3개의 머신을 준비합니다.
- 위에 keyfile을 각 머신 Primary(A), Secondary(B), Secondary(C)에 동일하게 복사해줍니다.
1. Primary(A) 아래와 같이 폴더 및 docker-compse.yml을 만들어 줍니다.
- 명령어
mkdir -p /home/docker/mongo
- File : docker-compose.yml
version: '3'
services:
mongo-primary:
container_name: mongo
image: mongo:7.0.9
restart: always
volumes:
- /home/docker/mongo/data:/data/db
- /home/docker/mongo/config:/data/configdb
- /home/docker/mongo/keyfile:/data/keyfile
environment:
MONGO_INITDB_ROOT_USERNAME: "admin"
MONGO_INITDB_ROOT_PASSWORD: "password"
command: >
/bin/sh -c "
chmod 400 /data/keyfile &&
chown 0:0 /data/keyfile &&
mongod --replSet rs0 --auth --keyFile /data/keyfile --bind_ip_all"
user: "0:0"
network_mode: host
2. Secondary(B) 아래와 같이 폴더 및 docker-compse.yml을 만들어 줍니다.
- 명령어
mkdir -p /home/docker/mongo
- File : docker-compose.yml
version: '3'
services:
mongo-secondary-read:
container_name: mongo
image: mongo:7.0.9
restart: always
volumes:
- /home/docker/mongo/data:/data/db
- /home/docker/mongo/config:/data/configdb
- /home/docker/mongo/keyfile:/data/keyfile
environment:
MONGO_INITDB_ROOT_USERNAME: "admin"
MONGO_INITDB_ROOT_PASSWORD: "password"
USER_ID: 0
GROUP_ID: 0
command: >
/bin/sh -c "
chmod 400 /data/keyfile &&
chown 0:0 /data/keyfile &&
mongod --auth --keyFile /data/keyfile --replSet rs0 --bind_ip_all"
user: "0:0"
network_mode: host
3. Secondary(C) 아래와 같이 폴더 및 docker-compse.yml을 만들어 줍니다.
- 명령어
mkdir -p /home/docker/mongo
- File : docker-compose.yml
version: '3'
services:
mongo-secondary-rw:
container_name: mongo
image: mongo:7.0.9
restart: always
volumes:
- /home/docker/mongo/data:/data/db
- /home/docker/mongo/config:/data/configdb
- /home/docker/mongo/keyfile:/data/keyfile
environment:
MONGO_INITDB_ROOT_USERNAME: "admin"
MONGO_INITDB_ROOT_PASSWORD: "password"
USER_ID: 0
GROUP_ID: 0
command: >
/bin/sh -c "
chmod 400 /data/keyfile &&
chown 0:0 /data/keyfile &&
mongod --auth --keyFile /data/keyfile --replSet rs0 --bind_ip_all"
user: "0:0"
network_mode: host
4. Primary(A)에서 Replica Setting을 진행합니다.
- Docker에서 Mongo 컨테이너에 접근합니다.
docker exec -it mongo /bin/bash
mongosh
- root 계정을 생성해 주고 mongosh를 나와 줍니다.
use admin
db.createUser({user: "admin", pwd: "password", roles: ["root"]})
exit
- 다시 한번 mongosh를 root 계정을 사용해 연결을 해줍니다.
- Replica Set을 진행해 줍니다.
mongosh -u admin -p password
rs.initiate()
rs.add("10.138.6.16:27017")
rs.add("10.138.6.17:27017")
- Replica 정상적으로 되었는지 확인해 봅니다.
rs.status()

5. Secondary(B)를 읽기모드로 변경 하는 방법
- 명령어
# 읽기모드 적용방법
db.getMongo().setReadPref("secondary", [{host: "10.138.6.16", port: 27017}])
# 읽기모드 해제방법
db.getMongo().setReadPref("primary")
6. MongoDB 에서 연결하는 방법
- 명령어
mongodb://admin:password@A:27017,B:27017,C:27017/?replicaSet=rs0&authMechanism=DEFAULT&authSource=admin
7. MongoDB 연결시 "getaddrinfo ENOTFOUND mongodb-01"와 같은 메시지가 나올 경우
- 명령어
docker exec -it mongo /bin/bash
mongosh -u admin -p password
cfg = rs.conf()
members = cfg.members
for (let i=0; i<members.length; i++) {
if (members[i]._id == 0) {
members[i].host = "새로운호스트이름:27017"
}
}
rs.reconfig(cfg)
- 위 와 같이 "새로운호스트이름"에 ip 주소를 넣어주고 적용을 해주면 됩니다.
8. Replica Set 연결 해지 하기
- 명령어
rs.remove("10.138.6.16:27017")
rs.remove("10.138.6.17:27017")