코드 잡동사니
MongoDB replica set 설정하기 본문
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 포트를 내부에서도 뚫어놔야한다.
'MongoDB' 카테고리의 다른 글
Mongo too many open files (0) | 2019.01.31 |
---|---|
Mongo 샤딩 하는 방법 버전 3.6.9 (0) | 2019.01.25 |
몽고DB 외부 로그인 접속 방법 (0) | 2018.11.30 |
$elemMatch 배열 안에 값 조회하기 (2) | 2018.01.18 |
몽고 오류 too many open files 해결 (0) | 2017.11.20 |