이번시간엔 지난번에 생긴 궁금증에 대해 이어서 포스팅 해보고자 한다. 친구가 했던 내용을 글로 쓰는거지만 나 나름대로 내용을 알고 있는 상태에서 글을 썼고 모르는 내용이나 어설프게 아는 내용이었다면 포스팅 하지 않았다. 컴퓨터 개발자나 보안전문가들은 항상 겸손하다. 왜나면 아는것 같아도 또 모르는게 계속 있기 때문에 끊임없이 공부해야하기 때문이다. 아무튼 내가 알게 된 지식도 겸비해 글을 쓰겠다.
1. mongodb rs(replica set) 구조에서 Write를 수행하는 DB는 “Primary”라고 하고, Read를 수행하는 DB는 “Secondary”라고 부른다.
[그림1 rs: Primary, Secondary]
’그림2’와 같이 Primary에 장애가 생겨 서비스 장애가 발생했다. 그렇다면 이상황에 대해서는 어떻게 해야할까? 이래서 Primary쪽은 관리를 잘해야 하는 것 같다.
[그림2 rs: Primary에 장애가 생긴 경우]
그림3’처럼 Primary가 죽은 것을 빠르게 catch한 후 Secondary 중 하나가 Primary로 선출된다면 다시 정상적인 서비스가 가능해질 것이다.
[그림3 rs: Primary를 새롭게 선출]
우리가 알아 볼 mongodb Replica Set은 아래 ‘그림4’와 같다.
여기서 추가된게 보이지 않은가? 바로 Arbiter의 추가이다. 여기서 Arbiter은 또 하나의 중요한 역할을 하게 된다. 이는 조금 더 뒤에가서 자세히 다뤄보도록 하겠다.
replica set은 다음과 같이 동작하게 된다.
- ‘그림5’와 같이 Primary는 각 Secondary에게 Replication하여 data가 동일시 되도록 한다. 모든 rs이 동일한 data를 저장한 상태가 된다.
[그림5 mongodb rs: Primary가 Secondary에게 Replication해 주는 모습]
- ‘그림6’처럼 Arbiter는 Primary가 죽을 경우 Secondary와 함께 Election을 진행하여Secondary 중 하나를 골라 Primary로 승격시켜 주는 역할을 수행한다.
[그림6 mongodb rs: Election for New Primary(Secondary2, Arbiter1)]
그림7’와 같이 Primary가 죽으면 남은 Secondary가 서로 Election을 진행해 새로운 Primary를 결정하게 된다.
[그림7 Election for New Primary: Secondary2]
그러나 또 다시 새로 선출되어진 Primary가 죽는다면 Election하는 Secondary가 자기 자신 밖에 없으므로 primary가 선출되지 않고 서버는 장애가 발생하게 된다. 그럼 또 여기선 어떻게 해야할지 막막해지게 된다.
[그림8 Election for New Primary: Secondary1]
해결방안으로 이번엔 아비터를 추가했을 경우이다.
[그림9 mongodb rs: Primary1, Secondary2, Arbiter1]
Primary가 죽으면 남은 Secondary와 Arbiter가 Election을 진행해 새로운 Primary를 선출하게 된다.
[그림10 Election for New Primary: Secondary2, Arbiter1]
또 다시 Primary가 죽는다면 Secondary는 하나이지만 Arbiter가 존재하기 때문에 마지막 남은 Secondary가 Primary가 되어 서비스가 정상 동작한다.
[그림11 Result of Election with secondary1, arbiter1]
<출저: https://unagi44.wordpress.com/Developer Lee>
여기서 Arbiter의 역할을 알겠는가? Primary가 죽고 Secondary가 하나 남았을시엔 서버쪽에서 에러가 당연히 발생하게 되는데 Arbiter을 추가해 준다면 Secondary가 Primary역할을 하게 되고 Arbiter가 Secondary역할을 하게 되면서 서버가 정상적으로 동작하게 된다. 한마디로 Secondary가 혼자 남았을시 서버가 죽지않도록 Arbiter가 그걸 커버해주고 있는 셈이다. 그럼 아까 또 포스팅해놨던 것중에 Election은 또 무엇일까? 그건 또 다음시간에 포스팅 해보도록 하겠다.
'mongoDB' 카테고리의 다른 글
mongodb Replica Set 실습 (0) | 2016.09.08 |
---|---|
Sharding의 기능 (0) | 2016.09.03 |
왜 Arbiter인가? (0) | 2016.09.03 |
mongodb Replica Set Election (0) | 2016.09.03 |
mongodb Replica Set의 필요성 (0) | 2016.09.02 |