본문 바로가기

IT/Database

[mongodb] Replica Set

A서버 1234 port에서 돌고있는 mongod가 있는 상태에서


5678 port mongod를 같이 돌리려고 한다.


master : A

slave : B


1. A서버와 B서버 동일하게 conf파일을 복사하여 포트번호를 5678로 수정하고


replica 이름과 host도 설정해준다. (master의 host로 설정한다, name은 동일하게)


2. conf파일이 2개가 생겼으므로 mongod를 실행할 때 --config 옵션을 주어야 하는데 귀찮으므로 shell 파일을 따로 생성한다.


~~~1234.start

~~~5678.start


3. 기존 db폴더의 이름을 db_1234로 바꾸고 mkdir db_5678하여 하나 더 생성해준다 (빈 디렉터리만 생성하면 된다)


4. A, B 서버에서 mongod를 실행하고 돌고있는지 확인한다. (각각 2개씩 돌면 된다(1234, 5678)


5. A서버에서 새로 만든 5678포트로 접속하여 (mongo localhost:5678)


>config = {_id: '[replicaName]', members: [{_id: 0, host: '[A host]:1234'},{_id: 1, host: '[B host]:5678'}]}


------ 재민씨 추가 -----

master---------------------------------------------------------------
    config={ _id:"[replicaName]", members:[{_id:0, host:"[HOSTNAME]:[PORT]", priority:1}] }
    rs.initiate(config)
    rs.add({_id:1, host:"[HOSTNAME]:[PORT]", priority:0, votes:0})
   
 slave---------------------------------------------------------------
    rs.slaveOk()


config 설정에서 priority를 1로 주면 master라고, 0으로 주면 slave라고 명시해주는 것이기 때문에

master가 죽어도 slave가 master로 변하는 것이 아니가 그대로 slave로 남게된다.

--------------------------------------------------------------------------


라고 친 후


rs.initiate(config)를 해준다.


그럼 A 서버가 PRIMARY로 바뀐것을 볼 수 있다.


6. 이제 slave인 B서버에 들어가 master에서 해준것과 동일하게 해준다.(config도 위와 동일하게 한다)


B서버가 SECONDARY가 되었다.


7. 마지막으로 master에서 db와 collecion 하나를 생성하여 data를 insert 해보고 slave에도 제대로 들어가는지 확인한다.


출처 : 껸