본문 바로가기

클라우드 & 컴퓨팅

Sharded Cluster(Mongodb)에 대해서…

Sharded Cluster?

MongoDB에서 말하는 Cluster는 Shared Cluster를 말합니다.

 

Mongodb를 사용하다보면 데이터 양이 커지거나 여러가지 복합적인 이유로 데이터 처리 속도가 느려지게 되고, 이러한 이유 때문에 성능개선이 필요한 상황에 직면하게 됩니다.

그렇기 때문에 Mongodb는 성능 개선을 위해 Sharding(Scale out, Sharded Cluster)을 지원하고 있으며, 아래는 Sharded Cluster를 사용하기 위해 알아야하는 기본 개념 설명입니다.

  1. Shards
  2. Config Server
  3. Query Router

Shard란?

실제 데이터가 저장되는 저장소

 

성능 문제를 해결하기위해 Mongodb는 Shard 여러개를 두고, 분산 처리를 할수있는 기능을 지원합니다.

Shard를 여러개로 구성하게 되면, Shard의 갯수를 Scaling을 통해 늘리고 줄일수 있으며, 보통 3개의 Shard를 구성한다고 합니다. *Single Point of Failure(Single point of failure)가 되는것을 막기위해

 

Shard를 여러개 가지고 있을때 Mongodb를 사용하는 사용자 입장에서는 어떤 Shard가 어떤 데이터(data chunk)를 가지고 있는지 (직접 쿼리를 날리거나 따로 기억하고있는 무언가가 없다면) 알 수가 없습니다.

이를 위해 Config Server라는 것이 존재합니다.

 

Config Server?

Config Server는 다음과 같은 정보를 알 수 있다.

  1. 어떤 Shard가 어떤 데이터(data chunk)를 가지고 있는지
  2. data chunk들을 어떻게 분산해서 저장하며 관리할지

위 두가지(Shard, Config Server)를 통해 데이터의 분산과 분산된 데이터를 저장하는 단계까지 가능하고,

이를 최종적으로 사람이 Command Line을 통해 사용할 수 있도록 해주는 Query Router (mongos[mongos])라는 것이 있다. 

 

Query Router

*Mongodb는 직접 특정 Shard에 접근할 수 없게 되어있다. Query Router에 명령을 하고, Query Router가 Shard에 접근하는 방식(Config Server정보기반으로 data chunk 위치를 찾아가는 것도 이때 수행됨)으로 설계되어 있다.

*Query Router는 매번 Shard정보를 찾는 부분에 대해서도 성능을 위해 Config Server의 metadata를 cache로 저장해둔다.

여기까지 Shard, Config Server, Query Router 세가지에 대한 개념을 설명하였는데, 이 세가지를 묶어 Sharded Cluster라고 부른다.

 

<위 개념들을 기반으로 추가적으로 알아 두면 좋은 정보>

데이터베이스 시스템 확장을 처리하는 방법에는 수직 및 수평 확장의 두 가지가 있습니다.

  1. 수직적 확장(Vertical Scaling, Scale up) 에는 더 강력한 CPU 사용, 더 많은 RAM 추가 또는 스토리지 공간 증가와 같은 단일 서버의 용량 증가가 포함됩니다. 사용 가능한 기술의 제한으로 인해 단일 머신이 주어진 워크로드에 대해 충분히 강력하지 못하도록 제한 할 수 있습니다. 또한 클라우드 기반 공급자는 사용 가능한 하드웨어 구성에 따라 엄격한 제한이 있습니다. 결과적으로 수직 확장에 대한 실질적인 최대 값이 있습니다.
  2. 수평적 확장(Horizontal Scaling, Scale out) 에는 시스템 데이터 세트를 분할(Sharding)하고 여러 서버에 로드하여 필요에 따라 용량을 늘리기 위해 서버를 추가합니다. 단일 시스템의 전체 속도 또는 용량은 높지 않을 수 있지만 각 시스템은 전체 워크로드의 하위 집합을 처리하므로 잠재적으로 단일 고속 대용량 서버보다 더 나은 효율성을 제공합니다. 배포 용량을 확장하려면 필요에 따라 추가 서버 만 추가하면되며, 이는 단일 시스템의 고급 하드웨어보다 전체 비용이 낮을 수 있습니다. 트레이드 오프는 배포를위한 인프라 및 유지 관리의 복잡성 증가입니다.


Mongodb는 Sharding시 수평적 확장을 지원합니다.

Mongodb는 Shard구성시 Collection단위로 데이터를 분리(Chunk) 한다. Sharding되지 않은 컬렉션은 Primary Shard(기본 샤드)에 저장된다.

 

추가로 알아볼만한 것들

1. Hashed Sharding

2. Ranged Sharding

참고 자료

Config Servers

MongoDB shard cluster - config server

[MongoDB] Sharding (1) - Sharded cluster의 구성

Sharding — MongoDB Manual

'클라우드 & 컴퓨팅' 카테고리의 다른 글

Function Framework - Google Cloud  (0) 2021.09.18
Database(MYSQL)의 Connection Pool 및 튜닝  (1) 2021.07.18