DevOps/ElasticSearch

[ElasticSearch] 클러스터와 노드

kyoulho 2024. 10. 20. 13:58

1. 엘라스틱서치 클러스터 개념

클러스터 (Cluster)

여러 개의 엘라스틱서치 인스턴스(노드)들이 모여서 하나의 클러스터를 구성합니다. 모든 노드는 클러스터 이름을 공유하며, 같은 클러스터 이름을 가진 노드들만이 클러스터의 일부로 간주됩니다.

클러스터 ID 및 이름

각 클러스터는 고유한 클러스터 ID를 가지며, 이름은 클러스터를 식별하기 위해 사용됩니다. 클러스터 이름은 설정 파일에서 정의할 수 있습니다 (elasticsearch.yml).


2. 노드 유형

엘라스틱서치 클러스터는 다양한 역할을 수행하는 여러 노드로 구성됩니다. 각각 하나의 역할만 할 수 있는 게 아니라 한 번에 여러 개의 역할을 할 수 있습니다.

마스터 노드 (Master Node)

  • 클러스터의 상태를 관리하고 클러스터의 메타데이터(예: 인덱스, 노드 추가/제거 등)를 업데이트합니다.
  • 클러스터의 모든 노드는 현재 노드의 상태, 성능 정보, 자신이 가지고 있는 샤드의 정보를 마스터 노드에 알립니다.
  • 마스터 노드는 클러스터의 리더로 동작하며, 안정성을 위해 최소 3개의 마스터 후보 노드를 설정하는 것이 권장됩니다.

데이터 노드 (Data Node)

  • 사용자가 색인한 문서를 저장하고, 검색 요청을 처리해서 결과를 돌려주는 역할을 합니다.
  • 자신이 받은 요청 중 자신이 처리할 수 있는 요청은 직접 처리하고, 다른 데이터 노드들이 처리해야 할 요청은 해당 데이터 노드에 전달합니다. 이때 어떤 데이터 노드로 요청을 전달할 것인지는 마스터 노드를 통해 받은 클러스터의 전체 상태 정보를 바탕으로 합니다.

코디네이팅 노드 (Coordinating Node)

  • 쿼리나 색인 요청을 받아 데이터를 요청할 다른 노드들에 적절히 분배합니다.
  • 별도의 설정 없이 모든 노드는 코디네이터 역할을 수행할 수 있으나, 데이터 저장이나 마스터 역할을 수행하지 않도록 설정해 코디네이터 전용 노드를 사용할 수도 있습니다.

인제스트 노드 (Ingest Node)

  • 데이터 전처리를 위해 파이프라인을 사용하여 인제스트 파이프라인을 실행합니다.
  • 로그나 이벤트 데이터를 저장하기 전에 변환 작업을 수행할 때 유용합니다.

머신 러닝 노드 (Machine Learning Node)

  • 엘라스틱서치 내 머신 러닝 작업을 수행하며, 데이터 이상 탐지와 예측 분석 작업을 지원합니다.
  • 머신 러닝 기능을 활성화하고 필요한 자원을 할당할 수 있습니다.


3. 노드 설정

노드의 역할은 elasticsearch.yml 파일에서 설정할 수 있으며, 각 노드는 여러 역할을 동시에 수행할 수 있습니다.

  • master: 마스터 역할 수행 여부
  • data: 데이터 저장 및 검색 역할 수행 여부
  • ingest: 데이터 전처리 파이프라인 수행 여부
  • ml: 머신 러닝 작업 수행 여부
  • transform: 데이터 변환 작업 수행 여부
  • voting_only: 마스터 노드 선출 시 투표 전용 역할 수행 여부
  • remote_cluster_client: 원격 클러스터와의 통신을 위한 역할 수행 여부


4. 클러스터 샤딩과 복제

샤드 (Shard)

엘라스틱서치는 데이터를 여러 개의 샤드로 나누어 저장합니다. 클러스터에 있는 여러 데이터 노드에 샤드를 분산하여 저장함으로써 데이터 처리 성능을 높이고, 데이터 손실 방지 및 고가용성을 확보할 수 있습니다.

기본적으로 인덱스는 여러 개의 프라이머리 샤드(primary shard)와 복제본 샤드(replica shard)로 구성됩니다.

  • 프라이머리 샤드: 데이터의 원본이 저장됩니다.
  • 복제본 샤드: 프라이머리 샤드의 복사본이며, 장애 대비 및 검색 성능 향상을 위해 사용됩니다.


5. 클러스터 및 노드 상태 모니터링

클러스터 상태

클러스터의 상태는 green, yellow, red 세 가지로 표시됩니다.

  • green: 모든 샤드가 할당되었고, 클러스터가 정상적으로 작동 중입니다.
  • yellow: 프라이머리 샤드는 할당되었으나 일부 복제본 샤드가 할당되지 않은 상태입니다.
  • red: 일부 프라이머리 샤드가 할당되지 않은 상태로, 클러스터의 기능이 제한됩니다.

API 명령어

클러스터와 노드의 상태를 확인하기 위해 다양한 REST API를 사용할 수 있습니다.

  • 클러스터 상태 확인: GET /_cluster/health
  • 노드 상태 확인: GET /_nodes
  • 샤드 상태 확인: GET /_cat/shards
728x90