샤딩(Sharding) 이란?
서버를 여러 개 두고 데이터를 여러 부분(Chunk)으로 나누어 분산하여 저장해놓고, 해당 데이터가 필요할 때마다 I/O를 분산 처리하여 I/O 효율을 높이는 방식을 말한다.
* 복제(Replication)와는 엄연히 목적이 다르다. 복제는 단순히 데이터를 복사하여 여러 서버에 두어, HA(High Availability, 고가용성)를 위한 솔루션에 해당하고, 샤딩(Sharding)은 한 데이터를 여러 서버로 잘게 나누어 저장하고 처리함으로써 Horizontal Scaling(수평 확장) 을 쉽게 하는 데에 목적이 있다.
** Horizontal Scaling(수평 확장) : 데이터 셋을 여러 서버로 나누고, 각 서버 인스턴스마다 DB 로드를 분산하여 처리하도록 하는 스케일링 방식. 과도하게 쓰면 아키텍처의 복잡성을 증가시키기 때문에 무조건적으로 좋은 방법은 아니다.
*** Vertical Scaling(수직 확장) : 단일 서버의 하드웨어 기능(CPU, RAM, 스토리지 용량 등의 하드웨어 스펙)을 향상시키는 전통적인 방법. 기술적 한계와 비용 제약이 필연적으로 생긴다.
MongoDB 에서의 샤딩을 위한 서버 아키텍처 - Sharded Cluster
MongoDB에서 샤딩을 구현하려면 총 3종류의 서버가 반드시 필요하다. 이들에 대해 우선적으로 알아보자!
Config Servers
- Sharded Cluster의 메타 데이터, Configuration 등을 저장하는 서버.
- 클러스터 전체 구조를 구성하는 데에 있어 핵심 정보를 담고 있기 때문에, 대부분 Replica Set으로 두 개 이상의 노드를 두는 것을 권장한다.
Mongos (Router)
- 다이어그램에 표현되어 있듯이 Router, 즉, 중개자 역할을 한다. 어플리케이션 서버와 Shard Cluster 간의 인터페이스를 제공하며, 쿼리 라우터의 역할도 수행한다. (MongoDB는 특정 Shard에 접속하여 직접적으로 DB에 엑세스할 수 없다.)
- Config Server의 정보를 기반으로 Data Chunk의 위치를 찾아가는 역할을 수행하며, 이때 Config Server의 메타 데이터에 대한 캐싱도 수행한다.
- Sharded Cluster에서 최소한 1개 이상의 Mongos 서버가 존재해야 한다.
Shard
- 실제적으로 데이터가 저장되는 저장소의 역할을 한다.
- 분산 처리가 샤딩의 목적이므로, Sharded Cluster에서 최소한 2개 이상의 Shard 서버가 존재해야 한다. 또한 각 샤드마다 Replica Set으로 구현하는 것도 가능하다.
Linux (CentOS 7) 에서 MongoDB Sharding Cluster를 구축하려면 아래 링크로 들어가보자!
참조
https://www.mongodb.com/docs/manual/reference/configuration-options/
https://www.saichoiblog.com/window-mongodb-shard-reflicaset/
'DB > MongoDB' 카테고리의 다른 글
[MongoDB] CentOS 7 에 MongoDB 설치 및 샤드 클러스터 구성하기 (0) | 2023.02.27 |
---|
최근댓글