본문 바로가기
SQL/MongoDB

MongoDB 7.0 ReplicaSet 이중화 환경 구축 하기 (Window)

by 흑시바 2024. 1. 28.

해당 포스팅에서는 현재 기준 최신 몽고 DB 7.0 이상 버전을 바탕으로 Window 환경에서 ReplicaSet을 활용해 이중화 환경을 구축하는 방법에 대해 다룬다. 로컬 환경에서 간단하게 진행하지만, 실제 환경에서 구축할 때 방법도 일부 포함한다.

 

컨테이너 기반으로 진행하는 방법은 아니니, 컨테이너 기반 방식이 궁금하면 다른 포스팅을 참고하길 바란다.

1. MongoDB 설치하기

https://www.mongodb.com/try/download/community

 

Try MongoDB Community Edition

Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project!

www.mongodb.com

몽고디비 다운로드 센터에 가서 최신 Community 버전을 설치한다.

 

모두 다 Next를 누르면 알아서 설치된다. 중간에 Compass 설치 여부에 대한 체크 박스가 있는데, 이건 몽고 DB를 사용할 때 GUI가 필요한 사람들은 설치하고 별로 필요 없으면 체크를 해지하고 넘기면 된다.

 

설치가 완료되면, 시스템 환경 변수에 bin 디렉터리를 등록한다.

msi로 설치한 경우, C:\Program Files\MongoDB\Server\7.0에 /bin 디렉터리가 존재한다.

 

등록을 완료했으면 cmd 창에 mongod --version을 통해 정상 설치됐는지 확인한다.

2. MongoDB Shell 설치하기

6.0 버전부터 MongoDB Shell을 별도로 지원하지 않는다.

 

과거 설치 매뉴얼을 참고하면 mongo 명령어로 접근했는데 더 이상 mongo 명령어를 사용할 수 없다.

설치된 파일 내역을 확인해 보면 더 이상 mongo.exe가 별도로 존재하지 않다는 것을 볼 수 있다.

 

이제는 해당 몽고 쉘을 설치한 뒤, mongosh 명령어로 접근해야 한다.

 

https://www.mongodb.com/try/download/shell

 

Try MongoDB Tools - Download Free Here

Free download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.

www.mongodb.com

위 링크에 접속해서 최신 버전을 다운로드한 뒤 실행시킨다.

 

참고로, 설치할 때 아래와 같은 화면에서 Install just for you 체크 박스를 풀지 않으면, AppData\Local 쪽에 데이터가 저장되므로 해제하도록 하자.

 

 

설치가 완료되면, mongosh --port 27017을 입력해서 정상 접속되는지 테스트해 보자.

 

3. 레플리카 셋을 테스트할 3개 노드 생성하기

여기서 굳이 3개의 노드를 만들어야 할까?라는 의문이 들 수도 있다.

 

2개의 노드로는 MongoDB Replica Set의 Failover가 정상적으로 동작하지 않을 수 있기 때문에, 적어도 3개 이상의 노드가 필요하다는 점을 인지해야 한다. 자세한 내용은 아래 커뮤니티 내용을 참고하자.

 

https://www.mongodb.com/community/forums/t/setup-a-2-node-mongodb-replica-set/3323

 

Setup a 2 node mongodb replica set

Hi Team, Can it possible to setup a 2 node mongodb cluster? with Automatic failover option? please reply. Thanks,

www.mongodb.com

레플리카 셋을 위한 노드를 생성하기 위해서는 cmd 창에 옵션을 입력할 수도 있고, 설정 파일을 만들어 적용하는 방법이 있다. 해당 포스팅에서는 간단하게 직접 명령어를 작성하는 방법을 선택할 것이다.

 

작성 방법은 다음과 같다.

 

mongod --replSet <레플리카셋이름> --bind_ip <바인드아이피> --dbpath <DB경로> --port <실행할 포트>

 

--replSet = ReplicaSet 이름 작성 (동일한 이름을 보유해야 한다.) 

--bind_ip = 바인딩할 IP/호스트 작성 (만약 다른 서버에 서버에 연결해야 한다면 반드시 작성해야 한다.)

--dbpath = 데이터를 저장할 DB 경로 (서로 다른 경로를 보유해야 한다.)

--port = MongoDB를 실행할 포트 (동일한 서버에서는 다른 port로 실행해야 한다.)

 

예시 :

mongod --replSet shibaHolic --dbpath C:\data\rs1 --port 27017
mongod --replSet shibaHolic --dbpath C:\data\rs2 --port 27018
mongod --replSet shibaHolic --dbpath C:\data\rs3 --port 27019

 

만약 현재 몽고디비 서버를 작동시킨 상태라면, 기본 포트인 27017 포트 외 포트를 사용하는 게 좋다.

만약 27017 포트를 사용해야 한다면 [ 작업 관리자 - 서비스 ]에서 MongoDB 를 중지하고 해당 과정을 진행하자.

 

 

각 CMD 창을 열어서 예시에 있는 명령어를 3번 실행한다.

4. 레플리카 셋 시작하기

새로운 CMD 창을 열어서 2번에서 설치했던 MongoDB Shell에 접속한다.

 

mongosh --port 27017

 

이후, use admin 명령어를 입력해서 관리자로 접속한다. (admin 계정은 설치될 때 기본으로 포함되어 있다.)

 

Shell에 하기 명령어를 입력해서 레플리카 셋을 실행한다.

 

만약 ReplicaSet ID를 다르게 했다면 명령어에서 shibaHolic을 설정한 이름으로 변경한다.

 

rs.initiate( {
   _id : "shibaHolic",
   members: [
      { _id: 0, host: "localhost:27017" },
      { _id: 1, host: "localhost:27018" },
      { _id: 2, host: "localhost:27019" }
   ]
})

 

참고로, 다른 서버와 함께 레플리카 셋을 구성하는 경우 localhost 또는 127.0.0.1이 아닌 실제 서버의 아이피를 host에 작성해야 한다.

 

예를 들어, 해당 PC(localhost)의 실제 IP가 172.36.123.123인 경우, 10.100.101.1 서버의 27017 몽고 DB와 함께 레플리카 셋을 작성하려면, 

 

{ _id: 0, host: "172.36.123.123:27017" },

{ _id: 1, host: "10.100.101.1:27017" },

 

이런 식으로 작성해야 된다는 의미이다.

 

 

MongoDB Shell에 명령어를 실행하면 레플리카 셋이 생성되면서 ok라는 메시지가 나온다.

 

db.isMaster() 명령어를 입력해서 현재 복제 구성에 대한 기본 개요를 확인한다.

 

 

해당 명령어를 통해 localhost:27017 몽고 DB가 Primary 노드라는 것을 확인할 수 있다.

그리고 맨 하단에 [direct: primary]라는 표시로 변경되는 것을 확인할 수 있다.

 

새로운 CMD 창을 띄워서 다른 포트로 접속해 보면, 

 

 

[direct: secondary]라는 표시로 해당 노드가 Secondary 노드라는 것을 확인할 수 있다.

즉, 하기와 같은 구조로 레플리카 셋이 생성된 것을 알 수 있다.

 

REFERENCE

https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/

https://www.mongodb.com/docs/manual/replication/

댓글