일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Wake On Lan
- Winsock
- docker desktop
- IOCP 클라이언트
- 윈도우10 Wake On Lan
- IOCP 서버
- VirtualBox Ubuntu
- Ubuntu VirtualBox
- 윈도우10 WOL
- mongodb pss
- .dotnet Core 3.1 Install
- Volume Mount
- .netCore Install
- Docker오류
- wol
- 우분투서버가상머신
- .netCore3.1
- IOCP
- dotnet Core
- DockerWindows
- 도커마운트
- 닷넷코어
- DockerDesktop
- docker
- mongo docker
- DockerVolume
- mongodb readonly
- ubuntu .net Core
- Ubuntu Server VirtualBox
- MySQL
- 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")