1. 도커 네트워크 생성

docker network create {network_name}

 

2. 컨테이너 생성

docker run -p {exposing_port1}:27017 --name mongo1 -d --net {network_name} mongo mongod --replSet mongo-set
docker run -p {exposing_port2}:27017 --name mongo2 -d --net {network_name} mongo mongod --replSet mongo-set
docker run -p {exposing_port3}:27017 --name mongo3 -d --net {network_name} mongo mongod --replSet mongo-set

 

3. 레플리카셋 생성

docker exec -it mongo1 mongo

접속 후 몽고쉘에서

config = {
	"_id": "mongo-set",
    "members": [
		{"_id":0, "host":"mongo1:27017"},
		{"_id":1, "host":"mongo2:27017"},
		{"_id":2, "host":"mongo3:27017"}
	]
}

rs.initiate(config)
// output: { "ok" : 1 }

 

4. 확인

아무 컨테이너에 접속해서 아래 커맨드 입력하면 primary, secondaries 등 레플리카 맴버들의 상태, 셋 이름 및 기타 정보가 표시됨.

db.runCommand("ismaster")

 

 

하지만 이 방법으로 하면 MongoDB Compass로 레플리카셋 접근이 되지 않는다. 추측건대 MongoDB Compass는 첫 노드에 접속하고 다른 레플리카 맴버의 정보를 노드를 통해 받아서 접속하는 것 같다. 때문에 mongo{N} 호스트를 알 수 없다는 오류가 뜬다. /etc/hosts 에 등록하면 호스트는 인식하지만 27017 포트에 접근할 수 없다는 오류가 뜬다. 때문에, MongoDB Compass를 사용하려면 몽고디비 실행 시 기본 포트를 사용하지 않고 직접 포트를 지정하되, 레플리카 맴버간 겹치지 않는 포트를 사용하도록 한다. 그리고 도커 포트 매핑을 이 포트로 사용하여 레플리카 맴버간 포트가 겹치지 않게 설정하면 해결할 수 있다.

 

 

 

'DB > MongoDB' 카테고리의 다른 글

Docker Compose 를 이용한 one-command 레플리카셋 구성  (0) 2022.07.15
트랜잭션에 관하여  (0) 2022.07.14

+ Recent posts