코드 잡동사니

MongoDB replica set 설정하기 본문

MongoDB

MongoDB replica set 설정하기

세객 2019. 1. 22. 16:54

MongoDB 에서 replica set 은 


1개의 PRIMARY DB 와 

N개의 SECONDARY,

1개의 Arbiter 로 구성되어 있다.


PRIMARY 는 데이터를 삽입할 메인 

SECONDARY 는 PRIMARY 한테 데이터를 받아서 복사하는 DB 

Arbiter 는 PRIMARY DB 가 죽었을 시 남은 SECONDARY DB 를 PRIMARY 로 승격시킴


여기 replica set 등록하는 멤버 총 개수가 7개(PRIMARY + SECONDARY + Arbiter) 로 제한이 되어있다

Arbiter 는 여러개를 등록가능하지만 살아있는것은 오직 1개뿐이다



config 파일에 

replication:

replSetName: "ABC"


이름은 마음대로 설정하고 실행할때 mongod --config mongo.conf 로 실행한 후 


자세한 내용은 https://docs.mongodb.com/manual/replication/ 에서 참조하면 된다. 


처음 셋팅할때 rs.initiate(


나중에 1개의 DB 를 SECONDARY 로 추가하고 싶으면 rs.add("ipaddr:port") 형식으로 작성해주면 현재 모든 DB 복사된다. 



config 파일에서 authorization: enabled 로 변경했을 때 mongo 접속 방법 


  • MongoDB replica config 파일 (여러 개가 필요하니깐 dbPath, logPath, port 를 변경하자) 

storage: dbPath: /root/ha/mongo_replica1/lib/mongo

systemLog: path: /root/ha/mongo_replica1/log/mongodb/mongo.log logAppend: true destination: file traceAllExceptions: false processManagement: fork: true replication: replSetName: "hagood" security: authorization: enabled keyFile: /root/ha/mongo_replica1/bin/config/mongodb.key net: bindIp: 0.0.0.0 port: 10000


  • 몽고db 접속 후 replica 초기화

mongo localhost:10000 rs.initiate( { _id : "hagood", members: [ { _id: 0, host: "localhost:10000" }, { _id: 1, host: "localhost:10001" }, { _id: 2, host: "localhost:10002" } ] })


  • Mongo KeyFile 생성 (https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/)

openssl rand -base64 741 > mongodb.key chmod 600 mongodb.key


위에서 생성한 KeyFile 경로를 config 파일 keyFile 경로와 일치시켜준다. 

다른 레플리카 DB 도 같은 keyFile 을 바라보게 한다. scp 로 이동시켜서






TEST


1. hosts 에  127.0.0.1:20001, 127.0.0.1:20002, 127.0.0.1:20003, 127.0.0.1:20004 의 DB 를 연결해놓고

Arbiter 를 등록하지 않으면 20001 번이 PRIMARY 인데 죽었을 경우 다른 DB 중 1개가 PRIMARY 로 승격되지 않음

-> Arbiter 가 살아있어야지만 나머지 3개중 1개의 DB 를 PRIMARY 로 승격함


주의할점 node 추가하기 전에 데이터가 있으면 전부 지워지고 덥어씌어버림




**replica set 초기화 방법

secondary 인 DB 를 초기화하고 싶을 때 

DB 를 종료하고 config 폴더에 replica 옵션을 지운후 DB 를 실행한다. 

use local 

db.dropDatabase();

하면 된다. ㅠㅠㅠㅠ


** 주의 할점 이상하게 다른 내부 네트워크 망이 아니라 127.0.0.1 외부네트워크 망으로 레플리카셋을 설정하려면 이상하게도 외부에서 실행되는 DB 포트를 내부에서도 뚫어놔야한다.


Comments