Docker로 MongoDB 복제 세트를 실행하기 위한 로컬 개발 설정 개선
snntnupl / devcontainers-mongodb-replica-set-with-docker
로컬 머신에서 MongoDB 복제 세트 클러스터를 실행하기 위한 Docker 기반 개발 컨테이너 템플릿.
내 에서 MongoDB 복제 세트를 실행하기 위한 도커 기반 개발 설정을 만들었습니다.
해당 설정의 결함은 클라이언트가 복제 세트의 독립 실행형 노드에 연결할 수 있지만 this issue의 github repository에서 보고한 것처럼 전체 복제 세트에 연결할 수 없다는 것입니다.
이 블로그 게시물에서는 이 문제를 극복하기 위해 무엇을 할 수 있는지 살펴보겠습니다.
근본 원인
MongoDB specifications에 따라:
the hostnames used in a replica set config are reachable from the client
이전 블로그에서 다음 복제 세트 구성을 초기화했습니다.
MONGODB1=mongo1
MONGODB2=mongo2
MONGODB3=mongo3
:
var cfg = {
"_id": "rs0",
...
"members": [
{
...
"host": "${MONGODB1}:27017",
...
},
{
...
"host": "${MONGODB2}:27017",
...
},
{
...
"host": "${MONGODB3}:27017",
...
}
]
};
본질적으로 이렇게 하려면 클라이언트가 다음 호스트에 연결할 수 있어야 합니다.
mongo1:27017, mongo2:27017, mongo3:27017
./etc/hosts
에서 127.0.0.1
호스트 이름을 가리키도록 mongo1, mongo2, mongo3
파일을 업데이트할 수 있습니다. 그러나 포트 번호27017
는 여전히 문제를 일으킬 수 있습니다. 동일한 포트에서 3개의 노드(서비스)를 실행할 수 없습니다.따라서 문제에 대한 해결책은 다음과 같습니다.
hosts
을 mongo1, mongo2, mongo3
에 매핑하도록 클라이언트 시스템의 127.0.0.1
파일 업데이트mongod
. 다른 포트 번호에서해결책
첫 번째 단계를 구현하는 것은 간단합니다. Linux에서
/etc/hosts
파일을 업데이트하거나 Windows에서 C:\Windows\System32\drivers\etc\hosts
파일을 업데이트해야 합니다.127.0.0.1 localhost mongo1 mongo2 mongo3
두 번째 단계를 구현하는 단계를 살펴보겠습니다.
docker compose 파일 변경
...
mongo1:
hostname: 'mongo1'
container_name: 'mongo1'
...
command: ["-f", "/etc/mongod.conf", "--port", "30001", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
expose:
- 30001
ports:
- 30001:30001
...
mongo2:
hostname: 'mongo2'
container_name: 'mongo2'
...
command: ["-f", "/etc/mongod.conf", "--port", "30002", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
expose:
- 30002
ports:
- 30002:30002
...
mongo3:
hostname: 'mongo3'
container_name: 'mongo3'
...
command: ["-f", "/etc/mongod.conf", "--port", "30003", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
expose:
- 30003
ports:
- 30003:30003
...
이렇게 하면 3개의 다른 포트에 있는 3개의 노드에서
mongod
서비스가 나타납니다.다음으로
mongosetup.sh
파일을 변경하여 복제 세트 구성을 수정합니다.mongo --host ${MONGODB1}:30001 -u ${MONGO_INITDB_ROOT_USERNAME} -p ${MONGO_INITDB_ROOT_PASSWORD} <<EOF
var cfg = {
"_id": "rs0",
...
"members": [
{
...
"host": "${MONGODB1}:30001",
...
},
{
...
"host": "${MONGODB2}:30002",
...
},
{
...
"host": "${MONGODB3}:30003",
...
}
]
};
이것은 기본적으로 문제를 해결하기 위해 수행해야 하는 모든 필수 변경 사항입니다.
최종 결과
이러한 변경을 수행하면
mongo
클라이언트를 사용하여 복제 세트에 연결할 수 있습니다.$ mongo "mongodb://localhost:30001,localhost:30002,localhost:30003/<MONGO_INITDB_DATABASE>?replicaSet=rs0" -u <MONGO_INITDB_USERNAME> --authenticationDatabase admin
또는
$ mongo "mongodb://mongo1:30001,mongo2:30002,mongo3:30003/<MONGO_INITDB_DATABASE>?replicaSet=rs0" -u <MONGO_INITDB_USERNAME> --authenticationDatabase admin
또한
db.isMaster()
명령의 결과를 보고 클라이언트가 연결해야 하는 복제 세트의 호스트, 노드가 기본 노드인 경우 등과 같은 세부 정보를 디버깅할 수 있습니다.Reference
이 문제에 관하여(Docker로 MongoDB 복제 세트를 실행하기 위한 로컬 개발 설정 개선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sntnupl/improving-the-local-development-setup-for-running-mongodb-replica-set-with-docker-2j7k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)