본문 바로가기
DataOps/Elasticsearch

[Elasticsearch] 노드 역할 완벽 가이드: Hot, Warm, Cold를 넘어서

by BenKangKang 2025. 7. 15.

Elasticsearch 클러스터를 운영하면서 "노드 역할을 어떻게 설정해야 할까?"라는 고민을 해보셨나요? 많은 개발자들이 Master, Data, Cold 정도만 알고 있지만, 실제로는 훨씬 더 다양하고 정교한 노드 역할들이 존재합니다.

이번 글에서는 Elasticsearch의 모든 노드 역할을 살펴보고, 각각의 특징과 최적의 활용 방법을 알아보겠습니다.

🎯 왜 노드 역할이 중요한가?

Elasticsearch는 분산 시스템이기 때문에 각 노드가 수행하는 역할에 따라 클러스터의 성능과 안정성이 크게 달라집니다. 적절한 노드 역할 설정은:

  • 성능 최적화: 워크로드에 맞는 하드웨어 리소스 할당
  • 비용 절약: 데이터 생명주기에 따른 스토리지 비용 최적화
  • 확장성: 필요에 따른 유연한 클러스터 확장
  • 안정성: 장애 발생 시 빠른 복구 능력

🔧 기본 노드 역할들

1. Master Node (master)

node.roles: ["master"]

역할: 클러스터의 두뇌 역할

  • 인덱스 생성/삭제 관리
  • 샤드 할당 및 재분배
  • 클러스터 상태 관리
  • 노드 추가/제거 감지

권장 설정:

  • 프로덕션 환경에서는 홀수 개(3개 이상) 구성
  • 전용 마스터 노드 사용 권장
  • 상대적으로 낮은 하드웨어 요구사항

2. Data Node (data)

node.roles: ["data"]

역할: 실제 데이터 저장 및 검색 처리

  • 문서 인덱싱 및 검색
  • 집계(aggregation) 연산
  • 샤드 데이터 관리

주의사항: 특수한 데이터 티어 역할(data_hot, data_warm 등)과 함께 사용하면 일반 data 역할이 우선순위를 가집니다.

3. Ingest Node (ingest)

node.roles: ["ingest"]

역할: 데이터 전처리 파이프라인 실행

  • 문서 변환 및 보강
  • 데이터 검증 및 정규화
  • 인덱싱 전 전처리 작업

활용 예시:

{
  "description": "로그 데이터 전처리 파이프라인",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}"]
      }
    },
    {
      "date": {
        "field": "timestamp",
        "formats": ["ISO8601"]
      }
    }
  ]
}

4. Coordinating Node (기본값)

node.roles: []  # 빈 배열 = 코디네이팅 전용

역할: 클라이언트 요청 라우팅 및 결과 집계

  • 검색 요청을 적절한 데이터 노드로 분산
  • 결과 집계 및 정렬
  • 클라이언트 응답 처리

🔥 Multi-Tier 아키텍처: Hot, Warm, Cold, Frozen

시간 기반 데이터(로그, 메트릭 등)를 효율적으로 관리하기 위한 다층 아키텍처입니다.

Hot Tier (data_hot)

node.roles: ["data_hot"]

특징:

  • 최신 데이터, 높은 읽기/쓰기 성능
  • SSD 스토리지 권장
  • 강력한 CPU 및 메모리 필요

사용 사례: 실시간 로그 분석, 최근 메트릭 모니터링

Warm Tier (data_warm)

node.roles: ["data_warm"]

특징:

  • 상대적으로 덜 자주 접근되는 데이터
  • 업데이트 가능하지만 빈도 낮음
  • 읽기 최적화

사용 사례: 지난 주 로그 데이터, 월간 리포트 기준 데이터

Cold Tier (data_cold)

node.roles: ["data_cold"]

특징:

  • 거의 접근되지 않는 데이터
  • 저렴한 하드웨어 사용 가능
  • 높은 압축률 적용

사용 사례: 분기별 아카이브, 규제 준수용 데이터

Frozen Tier (data_frozen)

node.roles: ["data_frozen"]

특징:

  • 매우 드물게 접근되는 데이터
  • 스냅샷 리포지토리 활용으로 로컬 스토리지 절약
  • 검색 시 지연 시간 높음

사용 사례: 법적 보관 의무 데이터, 장기 아카이브

📊 Content Tier와 특수 노드들

Content Tier (data_content)

node.roles: ["data_content"]

시계열이 아닌 일반적인 콘텐츠 데이터를 위한 티어입니다.

특징:

  • 상대적으로 일정한 데이터 보관
  • 빈번한 업데이트 가능
  • 검색 성능 최적화

사용 사례: 제품 카탈로그, 사용자 프로필, 설정 데이터

Machine Learning Node (ml)

node.roles: ["ml"]

역할: 머신러닝 작업 전용

  • 이상 탐지 모델 실행
  • 데이터 프레임 분석
  • 모델 훈련 및 추론

Remote Cluster Client (remote_cluster_client)

node.roles: ["remote_cluster_client"]

역할: 클러스터 간 검색 지원

  • 원격 클러스터 연결
  • 크로스 클러스터 검색 처리

🏗️ 실제 프로덕션 환경 설정 예시

소규모 클러스터 (3-5 노드)

# 노드 1-3: 마스터 + 데이터 + 인제스트
node.roles: ["master", "data_hot", "data_warm", "ingest"]

# 노드 4-5: 데이터 전용
node.roles: ["data_cold"]

대규모 클러스터 (10+ 노드)

# 마스터 전용 노드 (3개)
node.roles: ["master"]

# Hot 티어 노드 (4개)
node.roles: ["data_hot", "ingest"]

# Warm 티어 노드 (3개)
node.roles: ["data_warm"]

# Cold 티어 노드 (2개)
node.roles: ["data_cold"]

# 코디네이팅 전용 노드 (2개)
node.roles: []

📈 Index Lifecycle Management (ILM) 활용

Multi-tier 아키텍처의 진가는 ILM과 함께 사용할 때 발휘됩니다.

{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb",
            "max_age": "30d"
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "migrate": {
            "enabled": true
          },
          "shrink": {
            "number_of_shards": 1
          }
        }
      },
      "cold": {
        "min_age": "90d",
        "actions": {
          "migrate": {
            "enabled": true
          }
        }
      },
      "frozen": {
        "min_age": "365d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "backup-repo"
          }
        }
      },
      "delete": {
        "min_age": "2555d"
      }
    }
  }
}

⚠️ 주의사항 및 베스트 프랙티스

1. 노드 역할 조합 시 주의점

# ❌ 잘못된 설정 - data가 우선순위를 가짐
node.roles: ["data", "data_hot"]

# ✅ 올바른 설정
node.roles: ["data_hot"]

2. 마스터 노드 전용 설정

# ✅ 프로덕션 환경 권장
node.roles: ["master"]
cluster.initial_master_nodes: ["master-1", "master-2", "master-3"]

3. 리소스 할당 가이드라인

Hot Tier:

  • CPU: 16+ cores
  • RAM: 64GB+
  • Storage: NVMe SSD

Warm Tier:

  • CPU: 8-16 cores
  • RAM: 32-64GB
  • Storage: SSD

Cold Tier:

  • CPU: 4-8 cores
  • RAM: 16-32GB
  • Storage: HDD

🔧 모니터링 및 운영

핵심 메트릭 모니터링

# 클러스터 상태 확인
GET /_cluster/health

# 노드별 역할 확인
GET /_cat/nodes?v&h=name,node.role,master

# 샤드 분산 상태 확인
GET /_cat/shards?v&h=index,shard,prirep,state,node

알림 설정 예시

  • 마스터 노드 장애 시 즉시 알림
  • Hot 티어 디스크 사용량 80% 초과 시 경고
  • Cold 티어로 데이터 마이그레이션 실패 시 알림

🎯 결론

Elasticsearch의 노드 역할을 제대로 이해하고 활용하면:

  1. 성능 향상: 워크로드 특성에 맞는 최적화
  2. 비용 절약: 데이터 생명주기 기반 스토리지 계층화
  3. 운영 효율성: 명확한 역할 분리로 인한 관리 편의성
  4. 확장성: 필요에 따른 유연한 클러스터 확장

단순히 "마스터와 데이터 노드만 있으면 된다"는 생각에서 벗어나, 데이터의 특성과 비즈니스 요구사항에 맞는 정교한 아키텍처를 설계해보세요.

특히 로그나 메트릭 같은 시계열 데이터를 다루는 환경에서는 Hot-Warm-Cold-Frozen 아키텍처가 큰 효과를 발휘할 것입니다.

댓글