Sharding Cluster 만들기(1) : 구성

arky uhm·2025년 5월 23일

MongoDB

목록 보기
8/14

샤딩 클러스터는 최소한 3개의 Config Server와 1개 이상의 샤드 레플리카 셋(각 3개 노드), 그리고 1개 이상의 mongos 인스턴스를 구성하는 것을 목표로 하고, Docker Compose 기반으로 진행합니다.

** 구성

  • Mongos : 2개의 mongos 인스턴스 : mongos1, mongos2
  • Config Server : 1개의 레플리카 셋 (3개의 mongod 인스턴스: config1, config2, config3)
  • Shard : 1개의 레플리카 셋 (3개의 mongod 인스턴스: shard1-a, shard1-b, shard1-c)
    ※ 본 구성은 데이터가 여러 서버에 분산되지 않고, 한 세트 내의 Primary에 모든 데이터가 저장되고 다른 Secondary에 복제될 뿐입니다. 2개 이상의 샤딩 서버 세트가 있어야 비로소 mongos (라우터)가 샤드 키를 기반으로 데이터를 어느 샤드에 저장할지 결정하고, 실제 데이터를 여러 샤드에 분할하여 분산 저장할 수 있게 됩니다. (본 구성은 Shard2 Replica Set까지의 구성은 아닙니다.)

✅ Docker

  • 설정 파일 : docker-compose_replica_shard.yml

✅ Config Server Replica Set (설정 서버 레플리카 셋)

  • 역할 : 샤딩 클러스터의 모든 메타데이터(어떤 데이터가 어떤 샤드에 있는지, 샤드 키 정보, 클러스터 멤버 정보 등)를 저장하고 관리하는 핵심 구성 요소입니다. 클러스터의 "두뇌"라고 할 수 있습니다.
  • 구성 : config1, config2, config3 총 3대의 mongod 인스턴스로 이루어진 하나의 레플리카 셋입니다.
    • 이 3대 중 1대가 프라이머리(Primary)가 되고, 나머지 2대가 세컨더리(Secondary)가 되어 데이터 복제 및 고가용성을 제공합니다.
    • 각 인스턴스는 --configsvr 옵션을 사용하여 설정 서버 역할을 수행합니다.
  • 접속 포트: Docker 호스트의 30011, 30012, 30013 포트로 각각 노출됩니다. (내부적으로는 27017)
  • 설정 파일 : mongod_config.conf

✅ Shard Replica Set (샤드 레플리카 셋)

  • 역할 : 실제 사용자 데이터가 저장되고 분산되는 곳입니다. 샤드 클러스터의 "실제 저장 공간"이라고 할 수 있습니다.
  • 구성 : shard1-a, shard1-b, shard1-c 총 3대의 mongod 인스턴스로 이루어진 하나의 레플리카 셋입니다.
    • 마찬가지로 1대가 프라이머리, 2대가 세컨더리가 되어 샤드 내 데이터 복제 및 고가용성을 보장합니다.
    • 각 인스턴스는 --shardsvr 옵션을 사용하여 샤드 서버 역할을 수행합니다.
  • 접속 포트 : Docker 호스트의 30021, 30022, 30023포트로 각각 노출됩니다. (내부적으로는 27017)
  • 확장성 : 필요에 따라 shard2-a, b, c와 같이 추가적인 샤드 레플리카 셋을 구성하여 클러스터의 저장 용량과 처리량을 확장할 수 있습니다. (현재 docker-compose 파일에는 1개의 샤드 셋만 정의되어 있습니다.)
  • 설정 파일 : mongod_shard.conf

✅ Mongos (쿼리 라우터)

  • 역할 : 애플리케이션이 MongoDB 샤딩 클러스터에 접속하는 주요 진입점입니다. 클라이언트(Application, Compass, mongosh 등)는 샤드나 Config Server에 직접 연결하지 않고 mongos 인스턴스에 연결합니다. mongos는 Config Server로부터 클러스터 메타데이터를 캐싱하여 쿼리를 적절한 샤드로 라우팅하고, 필요한 경우 여러 샤드에서 데이터를 취합하여 클라이언트에게 결과를 반환합니다.
  • 구성 : mongos1, mongos2 총 2대의 mongos 인스턴스로 구성되어 있습니다.
    • mongos는 스테이트리스(Stateless)하므로, 여러 대를 구성하여 고가용성을 확보하고 로드 밸런싱을 통해 쿼리 처리량을 분산할 수 있습니다. 한 mongos 인스턴스에 장애가 발생해도 다른 인스턴스를 통해 클러스터에 계속 접근할 수 있습니다.
  • 접속 포트 : Docker 호스트의 30001, 30002 포트로 노출됩니다. 클라이언트는 이 중 하나의 포트를 선택하여 mongos에 연결할 수 있습니다.
  • 설정 파일 : mongos.conf

0개의 댓글