My Blog

ElasticSearch 분산처리

서버

클러스터

  • ElasticSearch 시스템 전체를 하나로 묶는 단위입니다.
  • 하나 이상의 노드로 구성되며, 클러스터 이름으로 서로를 식별합니다.
  • 모든 데이터를 저장하고, 질의를 수행하며, 상태를 관리하는 논리적 그룹입니다.

노드

  • 클러스터에 참여하는 개별 ElasticSearch 인스턴스입니다.
  • 하나의 노드도 클러스터가 될 수 있지만, 보통은 여러 노드를 함께 사용합니다.
  • 노드는 각기 다른 역할을 맡을 수 있습니다.
    • Master Node: 클러스터 상태, 샤드 배치 등 전체 관리
    • Data Node: 실제 데이터 저장 및 질의 처리
    • Ingest Node: 데이터 수집 및 전처리 수행
    • Coordinating Node: 질의 분산 및 결과 집계

인덱스

  • ElasticSearch에서 데이터를 논리적으로 구분하는 단위입니다.
  • 관계형 DB의 테이블과 유사한 개념입니다.
  • 클러스터에는 여러 개의 인덱스가 존재할 수 있으며, 각 인덱스는 자신만의 샤드 구성을 가집니다.

샤드

  • 인덱스를 물리적으로 쪼갠 조각입니다.
  • 각 샤드는 하나의 노드에 저장되며, 샤드를 통해 인덱스를 여러 노드에 분산 저장할 수 있습니다.
  • 두 종류가 있습니다:
    • Primary Shard: 실제 데이터를 저장하는 주요 샤드
    • Replica Shard: Primary의 복제본, 고가용성 확보 및 읽기 성능 향상에 기여

데이터 입력 예시

PUT my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas" 2
  }
}
  • number_of_shards : 프라이머리 샤드의 개수를 의미합니다.
  • number_of_replicas : 프라이머리 샤드 1개당 할당할 레플리카 샤드의 개수를 의미합니다.

분산 처리 방식 요약

  • 데이터 분산 저장: 인덱스가 여러 샤드로 나뉘고, 샤드는 여러 노드에 분산됨
  • 검색 분산 처리: 질의 요청은 Coordinating Node가 받아 샤드별로 병렬 전송
  • 결과 병합: 각 노드가 검색 결과를 반환하면, 하나로 병합해 응답

예시 구조

Cluster: search-cluster
├── index_a (3 primary shards)
│   ├── shard_0 → Node 1
│   ├── shard_1 → Node 2
│   ├── shard_2 → Node 3
├── index_b (2 primary shards)
│   ├── shard_0 → Node 2
│   ├── shard_1 → Node 3
  • 인덱스마다 샤드 수가 다르고, 샤드들은 노드에 분산되어 저장됨
  • 하나의 질의가 여러 노드에서 병렬 처리됨