상위: Elasticsearch
요약
데이터의 수명 주기에 따라 저장 위치를 최적화(Data Tiering)하고, 관리를 자동화(ILM)하여 비용을 절감하고 성능을 유지하는 방법입니다.
Data Tiering (데이터 계층화)
데이터의 접근 빈도와 중요도에 따라 노드를 구분하여 비용을 절감하고 성능을 최적화합니다.
| 티어 | 접근 빈도 | 스토리지 | 용도 |
|---|---|---|---|
| Hot | 높음 | SSD | 최신 데이터, 활발한 읽기/쓰기 |
| Warm | 중간 | HDD | 덜 빈번한 조회 |
| Cold | 낮음 | 저렴한 스토리지 | 가끔 조회 |
| Frozen | 매우 낮음 | 최저비용 | 거의 조회 안 함 |
노드 역할 설정
node.roles: master, data_hot, data_content
데이터 할당 규칙
cluster.routing.allocation.require._tier: data_hot
cluster.routing.allocation.include._tier: data_warm
cluster.routing.allocation.exclude._tier: data_cold
인덱스 레벨 티어링
index.routing.allocation.include._tier_preference: data_hot
계층 간 데이터 이동
es.indices.put_settings(index=index_name, body={
"index.routing.allocation.include._tier_preference": "data_warm"
})
ILM (Index Lifecycle Management)
인덱스의 생성부터 삭제까지의 과정을 정책(Policy)으로 정의하여 자동화합니다.
주요 단계 (Phases)
- Hot: 데이터가 활발히 적재되고 검색됨.
Rollover(크기나 기간 도달 시 새 인덱스 생성) 수행. - Warm: 읽기 전용으로 전환, 세그먼트 병합(
Force Merge)으로 최적화. - Cold: 스냅샷 생성 또는 저비용 노드로 이동.
- Delete: 보관 기간 만료 시 삭제.
Rollover & Alias
- Alias: 여러 인덱스를 가리키는 별칭. 클라이언트는 Alias를 통해 쓰기/읽기 수행.
- Rollover: Alias가 가리키는 쓰기 전용 인덱스가 조건(크기, 시간)을 만족하면 새로운 인덱스를 생성하고 Alias를 갱신.
- 반드시
"is_write_index": true필요
ILM 정책 예제
{
"phases": {
"hot": {
"actions": {
"rollover": { "max_age": "30d", "max_size": "50gb" }
}
},
"warm": {
"min_age": "45d",
"actions": {
"allocate": { "include": { "node_type": "warm" } },
"forcemerge": { "max_num_segments": 1 }
}
},
"cold": {
"min_age": "60d",
"actions": {
"allocate": { "include": { "node_type": "cold" } }
}
}
}
}
Index Template
es.indices.put_index_template(name="demo-ilm-template", body={
"index_patterns": ["demo-ilm-*"],
"template": {
"settings": {
"index.lifecycle.name": "simple-ilm-policy",
"index.lifecycle.rollover_alias": "demo-ilm-write"
}
}
})
es.indices.create(index="demo-ilm-000001", body={
"aliases": {
"demo-ilm-write": {"is_write_index": True}
}
})