본문 바로가기

Monitoring Tools/ELK Stack

[elasticsearch] ILM(Index Lifecycle Management) 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기 [1]

반응형

구현에 앞서


관련글은 아래 링크를 참조 하도록 한다.

 

 

시계열 데이터를 기반으로 검색과 분석에 특화 되어 있는 elasticsearch(이라 ES)는 ILM(인덱스 수명주기 관리)을 통하여 Hot-Warm-Cold 아키텍쳐를 구현할 수 있다.

데이터를 Hot-Warm-Cold로 tier별로 구분하여 정의함으로써 인덱싱과 검색을 효율적으로 관리하며 투입되는 자원을 적절히 분배하거나 절약하여 사용자의 의도에 따라 운영에 도움을 줄 수 있다. 사용자의 의도에 따라 다르겠지만 Hot-Warm-Cold tier의 구분은 일반적으로 다음과 같다.

  • Hot : 가장 최근의 가장 자주 검색되는 시계열 데이터를 보관하며 빈번한 인덱싱과 검색으로 많은 CPU 리소스와 빠른 IO가 요구 된다. 복원을 위해 1개 이상의 replica를 구성해야 한다.
  • Warm : 일반적으로 최근 몇 주 동안의 데이터를 보관하며 Hot Tier보다는 자주 검색이나 업데이트가 되지 않으므로 많은 CPU 리소스나 빠른 IO는 요구 되지 않는다. 하지만 Hot tier 보다 많은 데이터를 보관해야 하므로 많은 스토리지가 필요하다. 복원을 위해 1개 이상의 replica를 구성해야 한다.
  • Cold : 더이상 정기적으로 검색하거나 업데이트 되지 않는 시계열 데이터를 보관하며 검색 속도 보다는 낮은 저장 비용에 중점을 둔다. 복원을 위해 검색 가능한 스냅샷으로 복구를 하며 replica가 필요하지 않다. replica를 운용하지 않으므로 스토리지 사용량을 절반으로 절약할 수 있다.
  • Frozen : 쓰기가 금지 되며 더이상 검색되지 않는 데이터를 보관한다.
많은 CPU 리소스과 빠른 IO : Hot > Warm > Cold
많은 스토리지 공간 : Cold > Warm > Hot

 

참고

인덱스 수명 주기 관리를 통해 Hot-Warm-Cold 아키텍처 구현 : https://www.elastic.co/kr/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management

Elastic Cloud Elasticsearch Service에서 로깅과 메트릭을 위한 hot-warm 아키텍처 설정 : https://www.elastic.co/kr/blog/sizing-hot-warm-architectures-for-logging-and-metrics-in-the-elasticsearch-service-on-elastic-cloud

Data lifecycle management with data tiers :
https://www.elastic.co/blog/elasticsearch-data-lifecycle-management-with-data-tiers/

 

 

 

구현 환경


본격적인 구현에 앞서 테스트 환경은 아래와 같다.

  • CentOS Stream release 8
  • elasticsearch, logstash, kibana 버전 : 8.14.3
  • 총 4개의 node로 이루어진 cluster
  • 2개의 hot node, 2개의 warm node
  • ES node :
    • test-ES01 : 172.16.10.111
      • node name : es-node01
      • node role : data_hot
    • test-ES02 : 172.16.10.112
      • node name : es-node02
      • node role : data_hot
    • test-ES03 : 172.16.10.113
      • node name : es-node03
      • node role : data_warm
    • test-ES04 : 172.16.10.114
      • node name : es-node04
      • node role : data_warm
      • 그밖에 : kibana, logstash 
test-ES01은 host의 hostname이며 es-node01은 ES 의 node name 이다

 

역할 별 node는 최소 2개의 node로 구성해야 한다. 

 

 

 

노드 역할


노드 역할 종류

ES 설정에서 노드의 역할을 별도로 지정하지 않았다면 모든 역할이 부여된다.

아래와 같이 node.role에 "cdfhilmrstw"로 표기 된다.

GET _cat/nodes?v

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role 	master 		name
172.16.10.112           13          64   3    0.37    0.29     0.39 cdfhilmrstw      -      es-node02
172.16.10.111           46          63   4    0.09    0.19     0.34 cdfhilmrstw      *      es-node01
172.16.10.114            6          88   1    0.35    0.26     0.31 cdfhilmrstw      -      es-node04
172.16.10.113            1          61  20    0.99    0.43     0.40 cdfhilmrstw      -      es-node03

 

표기되는 노드 역할은 다음과 같다.

  • data_cold (c) : Cold Data 노드
  • data (d) : 일반적인 Data 노드로 모든 콘텐츠 계층에 포함된다.
  • frozen (f) : Frozen Data 노드
  • data_hot (h) : Hot Data 노드, 데이터 스트림에서 자동 할당 된다.
  • ingest (i) : 수집 노드
  • ml (l) : 머신러닝 노드
  • master (m) : 마스터 노드
  • remote_cluster_client  (r) : remote cluster에 연결하며 데이터를 동기화 할 수 있고 Kibana의 Stack Monitoring에도 사용된다.(xpack.monitoring.collection.enabled: true)
  • data_content (s) : 시계열 데이터와 달리 시간이 지나도 보존 요구 사항이 긴 데이터를 취급하며 데이터 스트림이 아닌 일반 인덱스에서 아무설정이 없을 경우 자동 할당 된다. 
  •  transform (t) : transform API request를 처리한다.
  • data_warm (w) : Warm Data 노드
참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

 

노드 역할 설정

ES 7.10을 기준으로 이전과 이후의 노드 역할 설정이 다르다.

경로 : /etc/elasticsearch/elasticsearch.yml

7.10 이전의 경우 아래와 같이 설정하였다.

# On hot nodes 
node.attr.node_type: hot

# On warm nodes 
node.attr.node_type: warm 

# On cold nodes: 
node.attr.node_type: cold

 

7.10 이후의 경우 아래와 같이 설정한다.

# On hot nodes 
node.roles: ["data_hot"] 

# On warm nodes 
node.roles: ["data_warm"] 

# On cold nodes 
node.roles: ["data_cold"]

# 여러개의 역할 부여
node.roles: ["master", "ingest", "ml", "data_hot", "data_content"]

 

test-ES01 ~ test-ES04 까지 설정을 한다.

경로 : /etc/elasticsearch/elasticsearch.yml

# test-ES01
node.roles: ["master","data_hot","data","remote_cluster_client","ingest"]

# test-ES02
node.roles: ["master","data_hot","data","remote_cluster_client","ingest"]

# test-ES03
node.roles: ["master","data_warm","remote_cluster_client","ingest"]

# test-ES04
node.roles: ["master","data_warm","remote_cluster_client","ingest"]

 

ES를 재시작한다.

systemctl restart elasticsearch

 

역할 확인

GET _cat/nodes?v

ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.16.10.112           13          64   3    0.37    0.29     0.39 dhimr     -      es-node02
172.16.10.111           46          63   4    0.09    0.19     0.34 dhimr     *      es-node01
172.16.10.114            6          88   1    0.35    0.26     0.31 imrw      -      es-node04
172.16.10.113            1          61  20    0.99    0.43     0.40 imrw      -      es-node03

 

 

다음 편으로...

 

반응형