앞선 글에서 Hot–Warm 아키텍처와 ILM 개념을 살펴봤습니다.
Elasticsearch 운영 Hot–Warm 아키텍처와 ILM(Index Lifecycle Management)
온프레미스 환경에서 Elasticsearch 클러스터를 운영하다 보면서비스 규모가 커질수록 수집되는 로그는 기하급수적으로 늘어나고, 그에 따라 클러스터도 점점 복잡해집니다.클러스터가 커질수록
sudo-minz.tistory.com
이번에는 실제로 이를 클러스터에 적용했던 과정을 정리해보려 합니다.
적용하는 법은 Elasticsearch 버전에 따라 꽤 다른데,
Elasticsearch 7.10 이상에서는 아예 데이터 티어(Data tiers)라는 공식 개념이 추가되었습니다.
이번 포스팅에서는 7.10 이상에서 적용하는 방법에 대해 설명합니다.
1. 노드에 box_type 속성 지정하기
이전에는 node.attr.box_type: hot 같은 식으로 Node Attribute 속성을 직접 정의했지만,
7.10부터는 데이터 티어(Data Tiers) 라는 공식 개념이 생겼습니다.
노드를 배치할 때는 이렇게 elasticsearch.yml 파일 안에서 node.roles로 지정합니다.
# Hot 노드
node.roles: [ master, data_hot, ingest ]
# Warm 노드
node.roles: [ data_warm ]
# Cold 노드
node.roles: [ data_cold ]
# Frozen 노드
node.roles: [ data_frozen ]
data_hot → 최신 인덱스 저장, 인덱싱 활발 (SSD, 높은 CPU/메모리)
data_warm → 검색은 드물지만 보관 필요 (대용량 HDD)
data_cold → 거의 조회되지 않음, 장기 보관용
data_frozen → 아주 드물게 조회됨, 스냅샷에서 부분 마운트
data_content → 시계열이 아닌 정적 데이터 (문서, 상품정보 등)
2. 인덱스 라우팅 설정 (_tier_preference)
7.10 이상에서는 index.routing.allocation.require.node_tag=hot 대신
_tier_preference를 사용합니다.
PUT logs-2025-09/_settings
{
"index.routing.allocation.include._tier_preference": "data_hot"
}
3. ILM 정책 정의
ILM(Index Lifecycle Management)을 이용해 인덱스 이동 조건을 정의합니다.
PUT _ilm/policy/logs_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": { "max_age": "14d", "max_size": "50GB" }
}
},
"warm": {
"min_age": "14d",
"actions": {
"allocate": { "include": { "_tier_preference": "data_warm" } },
"forcemerge": { "max_num_segments": 1 }
}
},
"cold": {
"min_age": "30d",
"actions": {
"allocate": { "include": { "_tier_preference": "data_cold" } },
"freeze": {}
}
},
"delete": {
"min_age": "180d",
"actions": { "delete": {} }
}
}
}
}
- Hot 단계: 50GB 또는 14일마다 롤오버
- Warm 단계: 14일 이상 된 인덱스는 Warm 노드로 이동
- Cold 단계: 30일 이상 된 인덱스는 Cold 노드로 이동 후 freeze
- Delete 단계: 180일 이상 된 인덱스는 삭제
4. 인덱스 템플릿 정의
새로 생성되는 인덱스가 자동으로 ILM 정책과 연결되도록 템플릿을 정의합니다:
PUT _index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"index.lifecycle.name": "logs_policy",
"index.lifecycle.rollover_alias": "logs-write",
"number_of_shards": 3,
"number_of_replicas": 1
}
}
}
5. 첫 번째 인덱스 생성 및 alias 연결
PUT logs-000001
{
"aliases": {
"logs-write": {
"is_write_index": true
}
}
}
- logs-write alias로 데이터가 들어오면 자동으로 rollover가 수행됨.
- ILM 정책에 따라 Hot → Warm → Cold → Frozen → Delete 순서로 이동.
'ES' 카테고리의 다른 글
Elasticsearch 운영 Hot–Warm 아키텍처와 ILM(Index Lifecycle Management) (0) | 2025.09.22 |
---|---|
Elasticsearch 데이터는 어떻게 저장되고 검색될까? (0) | 2025.09.19 |
Elasticsearch 구조와 기본 용어 Cluster, Node, Index, Shard, Segment, Document, Field, Mapping (0) | 2025.09.18 |
Elasticsearch 역색인이란? Inverted Index (1) | 2025.09.17 |
Elasticsearch 비밀번호 변경 초기화 하는 법 (0) | 2025.09.17 |
댓글