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의 노드 역할을 제대로 이해하고 활용하면:
- 성능 향상: 워크로드 특성에 맞는 최적화
- 비용 절약: 데이터 생명주기 기반 스토리지 계층화
- 운영 효율성: 명확한 역할 분리로 인한 관리 편의성
- 확장성: 필요에 따른 유연한 클러스터 확장
단순히 "마스터와 데이터 노드만 있으면 된다"는 생각에서 벗어나, 데이터의 특성과 비즈니스 요구사항에 맞는 정교한 아키텍처를 설계해보세요.
특히 로그나 메트릭 같은 시계열 데이터를 다루는 환경에서는 Hot-Warm-Cold-Frozen 아키텍처가 큰 효과를 발휘할 것입니다.
'DataOps > Elasticsearch' 카테고리의 다른 글
| Elasticsearch Data Streams (0) | 2025.03.27 |
|---|---|
| [Elasticsearch] 8. 엘라스틱서치의 내부 동작 상세 (5) | 2024.04.03 |
| [Elasticsearch] 3. 인덱스 설계 (Template, Routing) (0) | 2024.03.13 |
| [Elasticsearch] 3. 인덱스 설계 (Analyzer, Tokenizer) (0) | 2024.03.13 |
| [Elasticsearch] 3. 인덱스 설계 (설정, 맵핑, doc_values, _source) (0) | 2024.03.04 |
댓글