du.study기록공간

MongoDB sharding Architecture 본문

DB

MongoDB sharding Architecture

du.study 2019. 11. 15. 14:08
728x90

처음 개발팀으로 와서 맨 처음 사용했고 현재까지 서비스에 이용하고 있는 몽고디비에 대해서 정리하고자 합니다. 

 

처음에 mongodb 관련 기초기식을 익힐때, 어떤건 mongod, mongos로 불리고, config 서버도 있고 레플리카 셋도 있고,아비터 서버는 또 뭔지.. 뭔가 가장 기본이 되는 구조에 대해서 이해하기가 어려웠던 기억이 있어서 이번기회에 몽고디비 샤드 구조의 아키텍쳐에 대해 기록해보려 합니다.

 

몽고디비 메뉴얼에서 나오는 구조는 다음과 같습니다.

출처 : https://docs.mongodb.com/manual/sharding/

 

몽고디비의 샤딩 구조에서 가장 중요한 3가지 요소로 Shard 서버, Config서버, Router 서버가 있습니다. 

 

Router 서버

기본적으로 라우터라고 불리는 mongos 서버는 사용자의 요청 쿼리를 어떤 샤드 서버에 전달해야할지 결정 및 쿼리를 전송하며, 샤드 서버로부터 받은 결과를 합쳐서 다시 사용자게에 반환하는 역할을 수행합니다. (Proxy 역할 수행)

 

*어떤 샤드 서버에 전달해야할지 : 샤딩이 활성화된 mongodb 에서는 하나의 컬렉션이 chunk단위로 데이터가 분리되어 저장이되고 이 정보는 config서버에서 기록, mongos는 이 메타 정보를 캐싱된 데이터 또는 config서버를 호출하여 어떤 샤드로 정보를 요청해야할지 조회합니다. 

 

Config서버 (mongod)

이름과 같이 컨피그 서버는 샤딩된 클러스터를 관리하는데 있어 필요한 메타정보를 전부 관리합니다.

컨피그db에서는 다음과같은 정보를 기록하는 컬렉션을 가지고 있습니다. 

1. databases :샤드 클러스터의 데이터데이스 목록

2. chunks :샤딩된 컬렉션의 청크 정보

3. shards :샤드 서버의 정보 저장

4. settings : 청크의 밸런싱 작업 설정 ( 샤드서버에 최대한 균등하게 데이터를 저장하기위해 벨런싱 작업을 진행한다.)

5. mongos : mongos 상태 정보

6. version : 샤드 클러스터의 메타 데이터 버전정보 ( 청크 또는 컬렉션 같은 데이터가 변경될때 기록되는 버전정보)

7. lockping : 각 샤드 클러스터의 맴버와 config 서버와읭 연결 상태 확인정보

8. locks : 여러 mongos의 동시 작업의 동기화를 위한 컬렉션

9. changelog : config 메타 정보 변경 이벤트에 대한 로그를 남기는 컬렉션

 

추가적으로 mongo버전 3.2 부터는 replica set을 지원해주지만, 아비터 서버를 구성할 수 없으며, delay member를 가질 수 없습니다.

 

delay member : mongodb에는 일정시간 동안 복제를 할당받을 서버에 복제를 딜레이시킬 수 있는 설정이 있습니다.

 

 

Shard 서버 (mongod)

실제 데이터를 가지고 있는 서버입니다. 샤딩 클러스터에서는 3.6버전 이상부턴 하나 이상의 replicaset ( primary, secondary 로 구성) 를 필요로 합니다. 

 

*replicaset : 동일한 데이터를 여러군데에 관리하여 손실을 막을 수 있고, 여러 node를 통해 조회를 제공함으로서 쿼리의 분산도 이뤄낼 수 있습니다. replicaset 는 프라이머리(Primary),세컨드리(Secondary), 아비터(Arbiter) 서버로 구성이 됩니다.

 

Primary : 레플리카셋 (replicaset) 에서 유일하게 데이터 변경을 처리할 수 있는 서버, 레플리카셋에서 primary는 장애상황(네트워크 오류, 서버다운) 등에따라 Secondary가 Primary 로 선출될 수 있습니다.

Secondary : primary 에서 처리된 데이터를 가져와서 변경된 데이터를 동기화합니다. secondary가 직접 데이터 변경 요청을 처리할 순 없으며, Read Preference 옵션을 이용해서 read query를 실행할 수 있습니다.(부하분산)

Arbiter : primary에 이상이 생겼을때, 어떤 secondary가 primary로 될지 선출에 사용됩니다. 아비터 서버는 실제 데이터를 가지지 않습니다.

 

 

간략하게 mongodb sharding Architecture에서 기록해봤습니다. 작성을 하면서도 각 기능별로 안쪽으로 더 깊게 들어갈 내용이 너무 많아보이기에 나눠서 기록할 예정입니다.

 

 

 

 

 

 

참고 자료 : https://docs.mongodb.com/manual/core/sharded-cluster-config-servers/index.html

728x90

'DB' 카테고리의 다른 글

Elasticsearch heap memory setting  (0) 2020.03.06
CentOS, Elasticsearch 6.x Install  (0) 2020.03.04
Comments