04-27 06:19
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Replication / Sync 본문

Data Science/MongoDB

[MongoDB] Replication / Sync

cinema4dr12 2014. 4. 9. 16:41

by Geol Choi | 

슬레이브 노드가 시작될 때 가장 먼저하는 일은 마스터 노드의 데이터 전체를 동기화하는 것이다. 슬레이브 노드는 마스터 노드의 모든 도큐먼트를 복제하는데 이것은 엄청 부담이 되는 연산이다. 초기 동기화가 완료되면 슬레이브 노드는 마스터 노드의 oplog를 쿼리하고 연산을 수행하여 최신 상태로 데이터를 유지한다.

만약 슬레이브 노드의 연산이 마스터 노드에서 수행되고 있는 연산에서 매우 뒤쳐져 있는 상황이라면 슬레이브 노드의 동기화는 실패하게 될 것이다. 즉, 동기화에 실패한 슬레이브 노드는 마스터 노드에서 수행되고 있는 연산 속도를 더 이상 따라잡지 못하게 되는 상황이 발생하게 된다.

동기화에서 이탈하게 되면 슬레이브 노드는 복제를 멈추고 마스터 노드의 데이터 전체를 다시 동기화하는 것이 바람직하다.

재동기화는 다음 명령을 통해 수동으로 수행한다:

> use admin
switched to db admin
> db.runCommand({resync: 1})

또는 슬레이브 노드 시작 시 다음과 같이 옵션을 추가한다:

$ mongod --dbpath [YOUR_DATA_PATH] --slave --autoresync

참고로 resync 연산이 수행되면 처리가 완료될 때까지 전체 데이터 쓰기 잠금(Global Write Lock) 상태가 되며 다른 연산의 수행은 막힌다.

데이터를 복제(마스터-슬레이브 노드 간 데이터 동기화)는 매우 부담되는 연산이기 때문에 복제 자체보다는 마스터 노드의 연산 이력을 저장하는 oplog 사이즈를 충분히 설정하여 슬레이브 노드가 데이터의 직접 복제 대신 oplog를 통해 동일한 연산을 수행하도록 하는 것이 훨씬 유리하다.

oplog 파일 사이즈를 크게 잡을수록 데이터 동기화에 있어서는 유리하지만 디스크 용량을 많이 차지한다. 이런 점을 잘 감안하여 상황에 맞게 적절하게 사이즈를 잡는 것이 좋다.

oplog 파일 사이즈의 디폴트 사이즈는 남은 디스크 공간의 5%이다.

Comments