mongos와 mongod

Pinterest

글 : 이승용

mongos는 샤드를 관리하기 위한 쓰레드 ReplicaSetMonitorWatcher와 WriteBackListener를 사용한다. WriteBackListener 쓰레드는 mongos에 샤드가 설정될 때, 샤드에 등록된 mongod 리스트를 취득하여 각각의 mongod와 연결을 유지시킨다. 그리고, ReplicaSetMonitorWatcher 쓰레드는 10초 주기로 mongos가 관리하고 있는 mongod 서버에 복제 정보를 요청하여 데이터를 취득한다. 복제 정보에는 복제 집합 정보(이름과 노드 리스트)와 master 여부와 master 서버 주소, 그리고 mongod에 저장된 BSON 객체 크기를 알려준다.

 

[그림 4-5]

 

[그림 4-5]는 두 개의 mongos와 3개의 mongod로 구성되어진 모습이다. [그림 4-5]를 보면 mongos는 서로 다른 mongos와의 통신 연결선이 없는 대신에 모든 mongod 서버와 연결선을 가지고 있다. 즉, mongod 서버에 문제가 발생하면 mongos는 자기 스스로 문제점을 찾아 해결 방안을 강구하게 된다.

쓰레드 WriteBackListener는 최초 연결된 mongod와의 소켓 연결을 유지하여, mongod의 소켓이 close될 때, 이벤트를 발생시켜 mongod가 문제가 있음을 인지하고, config 서버로부터 변경된 샤드 정보가 있는지 요청한다. 획득한 config 서버의 정보를 이용하여 mongod 서버와 10초 주기로 재 접속을 시도한다. 그리고, 주기적인 복제 정보를 취득하는 쓰레드 ReplicaSetMonitorWatcher 역시 mongod의 상태를 체크하여 master 정보를 획득하고, master 정보가 획득되면 변경된 master로 연산을 수행한다. 자세히 살펴보면, 쓰레드 WriteBackListener의 역할은 한 샤드의 복제 정보가 변경되었을 경우에 샤드 정보를 업데이트하는 용도로 사용되고, 한 샤드를 구성하고 있는 복제 집합 노드의 fail 처리는 ReplicaSetMonitorWatcher에서 수행한다.

한가지 재미있는 사항은 mongos는 mongod의 문제점을 바로 인지할 수 있으나, 문제에 따른 master 취득과정이 실시간이 아니라는 것이다. 이러한 사항은 mongod의 복제 구조를 생각해 보면 쉽게 알 수 있다. Mongod의 복제 구조는 master가 fail이 되면 master를 선출하기 위해 투표를 수행한다. 이러한 투표 과정 시간이 약 10초, 길게는 30초~1분 정도 소요될 수 있기 때문에[1] mongos 입장에서는 master가 선출될 때까지 기다려야 한다. 운이 좋게도 master가 아닌 slave가 fail이라면 mongos 입장에서는 기존 master로 계속 연산을 수행한다.

 

이전글 : mongos와 config 서버

다음글 : mongos와 응용

 


[1] 실제 투표 시간은 5초이내로 종료된다.


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
  1. 아직 댓글이 없습니다.
  1. 엮인글들이 아직 없습니다.