DB/MongoDB

Replica Set 구축하기

Code Maestro 2023. 8. 3. 16:09
728x90

 

1. Atlas와 On-Premises의 차이

 

Atlas는 mongoDB 클라우드 제품을 뜻하며, 비용을 제공해야 한다. 반면 On-premises는 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식이다. 비용을 아낄 있지만, 몽고 DB 직접 관리하고 운영해야 한다.

 

편의를 위해서 Atlas를 사용하였다.

 

 

2. Replica Set 구축

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

위의 형태로 Replica Set을 구축해 보겠다.

 

1) 데이터 구축

 

 

 

MongoDB Shell을 사용해서 구현해보겠다.

 

먼저 Replica Set을 구현하기 위해 폴더들을 위의 사진처럼 만들어야 한다. 

 

./mongodb --replSet rs1 --port27017 --bind_ip "0.0.0.0" dbpath "경로/data1" --oplogSize 128

MongoDB 터미널을 띄어서 위의 명령어를 입력한다. 

 

  • replSet: replicaSet으로 구축하겠다를 의미.
  • port: 포트를 설정한다. 
  • bind_ip: 어디서 접근할 수 있는지 설정. 편의상 나는 모두 다 접속할 수 있도록 0.0.0.0을 설정했다.
  • dbpath: 아까 만든 데이터 경로(폴더 위치)를 입력한다.
  • oplogSize: oplog의 사이즈를 설정한다.

그러면 replica Set1이 완성된 것을 확인할 수 있다. 

 

그리고 터미널을 더 띄어서 

./mongodb --replSet rs1 --port 27018 --bind_ip "0.0.0.0" dbpath "경로/data2" --oplogSize 128

포트 번호와 경로를 변경시키고 실행시킨다.

 

또 터미널을 띄우고

./mongodb --replSet rs1 --port 27019 --bind_ip "0.0.0.0" dbpath "경로/data3" --oplogSize 128

명령어를 실행시키면

 

3개가 띄어져있다띄어져 있다.

 

참고로 Fail 오류의 의미는 내가 Replica Set 설정을 주고 실행한 건데, replica set 구축되지 않다는 의미이다. 일단 무시하면 된다.

 

 

2) Replica Set 구축 

 

이제 mongo shell을 사용해서 Replica set을 구축해 보겠다. 참고로 mongo shell은 클라이언트 드라이버라 생각하면 된다.

 

localhost의 27017로 들어가면 

 

상태를 확인하려고 해도 오류가 발생한다.

 

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

ReplicaSet을 구축해야 오류가 발생 안 한다.

 

 

위의 명령어를 입력하면 

 

 

 

 

이렇게 replica set 형태로 만들어진 확인할 있다.

 

rs.status() 확인해보면

 

PRIMARY와 Secondary 2개. 이런 식으로 구축이된 확인할 있다.

 

3) Config 설정

이전에는 위의 사진처럼 옵션을 이용해서 mongodb 프로세스 뒤에다가 실행을 했는데.

 

문제는 매번 실행할 때마다 옵션을 주는 번거로울 있다. 이를 config 파일에 넣어서 실행 있다.

 

실습을 위해 먼저 Data 1,2,3 폴더들을 삭제하고, 다시 생성해준다.

 

Mongo logs 1,2,3 파일을 생성하자.

 

 

파일은 위의 사진과 같다. 이전에 설정하던 것을 풀어쓴 것이다.

 

이런 식으로 mongod2.conf, mongod3.conf 파일들을 만들어보자. (반드시 포트랑 dbPath는 달라야 한다.)

 

 

mongod -f config 파일경로

각각의 터미널을 열고, 이제는 f 옵션을 두고 실행해 보면

 

 

이전과 달리 로그가 뜨지 않는다.

 

로그 파일들에 가보면 로그가 기록된 확인할 있다.

 

상태를 확인하려해도 디렉토리가 초기화됐기에 없다.

 

 

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

 

다시 만들고

 

 

Replica Set의 상태를 확인해 보면

 

 

정상적으로 구축된 걸 확인할 수 있다.

728x90