본문 바로가기
DB

[MongoDB] 샤딩 시스템

by 오늘의개발부 2022. 2. 24.
반응형

샤딩

  1. 데이터의 분산저장
    • 한 대의 서버에 빅데이터를 저장하려고 하면 서비스 성능 저하 발생
    • 데이터를 분산하여 순차저장하면 트래픽으로 인한 부하를 효과적으로 처리할 수 있음
  2. 백업과 복구 전략
    • 서버의 데이터 유실에 대비해 미리 데이터를 분산하여 저장함
  3. 빠른 성능
    • 여러 대의 독립된 프로세스가 병렬로 작업을 수행하기 떄문에 빠른 처리 성능을 보장받음

샤딩 시스템의 구조

  • mongos: 라우터, 3개의 shard에 분산하여 데이터를 저장함
  • mo

샤딩 시스템의 특징

  1. 샤딩 시스템은 분산처리를 통한 효울성 향상을 목적으로 함
    • 가능한 성능보장을 위해 3대 이상의 서버를 샤드로 활용하는 것을 추천
    • 최소 2대만 있으면 샤드 서버 구칙 가능
  2. 샤드 서버로 운영하게 되면 한 대로 운영할 때보다 메모리를 20~30% 더 사용하게 됨
    • 샤드 시스템 구축시 사용하는 라우팅 서버인 mongos와 OpLog, Balancer 프로세스가 메모리를 추가로 사용하기 때문
    • 20~30% 추가 메로리 준비 필요

config 서버

  • 샤드 시스템에 대한 메타데이터를 저장/관리하는 역할
  • 샤드 서버의 인덱스를 빠르게 검색할 수 있게 함
  • 샤드 서버와 별도의 서버에 구축해야 장애발생에 대응하기 원활
  • 1대만으로 운영이 가능하나 장애발생에 대비하여 3대 이상 사용 권장
  • 샤드 서버에 비해 저사양 서버 사용 가능

mongos 서버

  • 하나 이상의 프로세스를 사용
  • config 서버의 meta data를 캐시함
  • 빅데이터를 샤드 서버로 분산해주는 프로세스
  • config 서버는 각 샤드 서버에 어떤 데이터들이 어떤 식으로 분산 저장되어 있는지에 대한 meta data를 가지고 있는데, mongos 서버를 통해 데이터를 쓰고 읽는 작업이 가능함

샤딩 시스템의 게층

<사진>

  • mongos는 중개자 계층
  • 중개자 계층은 샤드 메타 정보를 저장하여 응용 계층으로부터 전달된 질의를 분석하여 적절한 샤드에 명령을 수행시킨 다음 결과를 응용게층으로 다시 전달해줌

Shard key 구성

  • Shard key 구성은 Mongodb 샤딩 시스템을 구축할 때 가장 중요함
  • Shard key는 여러 개의 shard 서버로 분할될 기준필드를 가리키며, partition과 load balancing의 기준이 되므로 데이터 저장과 성능에 절대적인 영향을 미침
  • Shard key는 카디널리티(cardinality)를 보고 적절한 선택이 필요함
  • 데이터 분포가 넓으면 Low 카디널리티라고 하고, 높으면 high 카디널리티라고 함
    • 예) 사원번호는 고유값이므로 높은 카디널리티
    • 예) 성별은 남녀 두 개의 값만 가지므로 샤드키로 사용하면 인덱스 도움을 받을 수 없음
  • Shard key는 Chunk migration의 횟수와 빈도를 결정함
    • Chunk migration: 서버에 균등하게 데이터를 이동하여 재조정하는 과정
    • Chunk: 하나의 서버에 저장되는 데이터를 여러 개의 논리적 구조로 분할저장하다가 일정한 데이터 양에 도달했을 때 두 번째, 세 번째 서버로 데이터를 분할하여 저장하는데 이 분할 단위를 Chunk라고 함
    • Chunk의 크기는 기본적으로 64MB(100,000행) 단위로 분할되며, 필요시 64MB 이상의 크기로 설정할 수 있음
    • 기본 설정 단위보다 빈번하게 Chunk migration이 발생한다면 Chunk의 크기를 더욱 크게 설정해야함
반응형