Elasticsearch 기본 개념

개념 설명
노드(Node) Elasticsearch 인스턴스를 실행하는 하나의 서버
클러스터(Cluster) 여러 개의 노드(Node)로 구성된 그룹
인덱스(Index) 여러 개의 도큐먼트(Document)를 저장하는 논리적 데이터 단위
샤드(Shard) 인덱스를 나누어 저장하는 물리적 데이터 단위
도큐먼트(Document) Elasticsearch에서 데이터를 저장하는 기본 단위 (JSON 형식)

Elasticsearch는 여러 노드(Node)로 구성된 클러스터(Cluster)에서 데이터를 샤드(Shard) 단위로 나누어 저장하고 관리함.


주요 개념 상세 설명

(1) 노드(Node)란?

노드는 Elasticsearch의 실행 인스턴스로, 하나 이상의 노드가 모여 클러스터를 형성합니다.

  • 싱글 노드(Single Node): 한 개의 노드로 구성된 Elasticsearch 실행 환경.
  • 멀티 노드(Multi Node): 여러 개의 노드가 하나의 클러스터를 형성하는 환경.

🔹 노드 확인 방법

GET _cat/nodes?v

🔹 노드 정보 예시

ip           name     roles    heap.percent load   node.role
192.168.1.10 node-1   mdi      42          1.2    master, data, ingest
192.168.1.11 node-2   mdi      35          1.5    data, ingest
192.168.1.12 node-3   mdi      50          1.1    data, ingest

각 노드는 특정 역할을 가지며 클러스터 내에서 데이터 저장, 검색, 관리 등의 작업을 수행함.


(2) 클러스터(Cluster)란?

클러스터는 여러 개의 노드(Node)로 구성된 Elasticsearch의 논리적 그룹입니다.
모든 노드는 동일한 cluster.name을 가지며, 클러스터 내에서 데이터를 공유하고 검색을 수행합니다.

🔹 클러스터 상태 확인

GET _cluster/health

🔹 응답 예시

{
  "cluster_name": "my-cluster",
  "status": "green",
  "number_of_nodes": 3,
  "number_of_data_nodes": 2,
  "active_primary_shards": 5,
  "active_shards": 10
}

클러스터는 Elasticsearch의 핵심 구성 요소로, 노드 간 데이터 복제 및 분산 저장을 수행함.


(3) 인덱스(Index)란?

인덱스는 데이터를 저장하는 논리적 공간으로, 관계형 데이터베이스의 테이블(Table) 개념과 유사합니다.
각 인덱스는 여러 개의 샤드(Shard)로 분할되며, 샤드 단위로 데이터를 저장합니다.

🔹 인덱스 생성 예제

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

인덱스는 여러 개의 도큐먼트(Document)로 구성되며, 검색과 색인의 기본 단위가 됨.


(4) 샤드(Shard)란?

샤드는 인덱스를 나누어 저장하는 물리적 데이터 단위입니다.
대량의 데이터를 저장하고 검색할 때 성능을 높이기 위해 샤드 단위로 데이터를 분산 저장합니다.

  • 프라이머리 샤드(Primary Shard): 원본 데이터를 저장하는 주요 샤드.
  • 복제본 샤드(Replica Shard): Primary Shard의 복제본으로, 데이터 유실 방지 및 검색 성능 향상 역할.

🔹 샤드 정보 확인

GET _cat/shards?v

샤드는 인덱스 성능과 확장성을 결정하는 중요한 요소이며, 클러스터 내 여러 노드에 분산 저장됨.


(5) 도큐먼트(Document)란?

도큐먼트는 Elasticsearch에서 데이터를 저장하는 가장 작은 단위입니다.
모든 도큐먼트는 JSON 형식으로 저장되며, 고유한 _id 값을 가집니다.

🔹 도큐먼트 색인 예제

PUT /products/_doc/1
{
  "name": "Elasticsearch 책",
  "category": "IT",
  "price": 30000
}

Elasticsearch는 관계형 DB처럼 행(Row) 개념이 없으며, 데이터를 JSON 문서(Document) 형태로 저장함.


프라이머리 샤드(Primary Shard)와 복제본(Replica Shard) 개념

샤드 유형 설명
Primary Shard 원본 데이터를 저장하는 주요 샤드
Replica Shard Primary Shard의 복제본으로, 데이터 유실 방지 및 검색 부하 분산

🔹 Primary Shard와 Replica Shard 예시

  • 인덱스를 프라이머리 샤드 3개, 복제본 1개로 설정하면 총 6개의 샤드(3 Primary + 3 Replica)가 생성됨.

복제본(Replica Shard)은 반드시 Primary Shard와 다른 노드에 저장되어야 함.


노드의 역할 (Node Roles)

Elasticsearch 노드는 역할(Role)에 따라 다르게 동작합니다.

노드 유형 설명
마스터 노드 (Master Node) 클러스터 상태 관리, 노드 추가/삭제, 샤드 할당
데이터 노드 (Data Node) 데이터를 저장하고 검색 및 색인 수행
코디네이팅 노드 (Coordinating Node) 클라이언트 요청을 받아 데이터 노드에 분산

(1) 마스터 노드 (Master Node)

  • 클러스터의 상태 관리 (샤드 할당, 노드 추가/삭제).
  • 클러스터 설정 변경.

🔹 마스터 전용 노드 설정

node.master: true
node.data: false

마스터 노드는 클러스터 안정성을 위해 최소 3개 이상의 홀수 개수로 운영하는 것이 좋음.


(2) 데이터 노드 (Data Node)

  • 실제 데이터를 저장하고 색인/검색을 수행.
  • CPU, 메모리, 디스크 I/O 리소스를 많이 사용.

🔹 데이터 노드 전용 설정

node.master: false
node.data: true

대량 데이터 저장이 필요한 경우 데이터 노드의 리소스를 충분히 할당하는 것이 중요함.


(3) 코디네이팅 노드 (Coordinating Node)

  • 클라이언트 요청을 받아 적절한 데이터 노드로 분배.
  • 직접 데이터를 저장하지 않고 검색 요청을 최적화하는 역할.

🔹 코디네이팅 전용 노드 설정

node.master: false
node.data: false

대량의 검색 요청이 있는 경우 코디네이팅 노드를 추가하여 부하를 분산 가능.


결론

  • Elasticsearch는 여러 개의 노드(Node)로 구성된 클러스터(Cluster)에서 데이터를 샤드(Shard) 단위로 분산 저장함.
  • 프라이머리 샤드(Primary Shard)는 원본 데이터를 저장하고, 복제본(Replica Shard)은 데이터 유실 방지 역할을 수행.
  • 마스터 노드는 클러스터를 관리하고, 데이터 노드는 저장 및 검색, 코디네이팅 노드는 요청을 최적화하는 역할을 함.

 

+ Recent posts