티스토리 뷰

공부

Elasticsearch “Hot-Warm” architecture

Vincent Park 2016.04.01 12:51

Elasitcsearch “Hot-Warm” architecture

By Samir Bennacer

https://www.elastic.co/blog/hot-warm-architecture


2016.04.01 발번역해서 정리해둠


 

긴기간 동안의 대용량 데이터를 위해서 es 를 사용할때, 3가지 다른 유형의 노드(마스터, 핫노드, 웜노드) 의 계층구조로 시간기반의 인덱스를 운영하기를 권장합니다.

각 노드들은 저마다의 성격을 가지며, 아래에 설명되어 있습니다.

Master nodes

다른 유형의 노드에게 영향을 주는 gc 의 영향을 받지 않고 안정성과 복원력을 높여주는 JVM 으로 실행되는 전용 마스터 노드들로 구성된 클러스터 당 3개의 전용 마스터 노드를 두고 운영하기를 권장합니다.

이 노드들은 요청을 처리하지 않고 어떤 데이터도 갖고 있지 않아서 적은 리소스(cpu, ram, disk) 만으로도 충분합니다.


Hot data nodes

핫 데이터 노드는 클러스터 내의 모든 인덱싱을 수행하고, 또한 일반적으로 자주 쿼리하는 최신 인덱스를 갖습니다. 

IO 작업에 매우 집중되기는 색인이기 때문에, 이 서버들은 SSD 스토리지로 백업되는 높은 사양이어야 합니다.


Warm data nodes

웜 데이터 노드는 자주 쿼리하지 않는 읽기전용의 대용량의 인덱스를 처리합니다. 읽기전용이기 때문에 SSD 대신 일반 대용량 디스크를 사용합니다.

 


핫노드 서버 와 웜노드 서버가 무엇인지 elasticsearch 가 알아야 합니다. 이것은 각 서버에 태깅을 해줌으로써 가능합니다. 

elasticsearch.yml 설정에서 node.box_type: hot 으로 설정해 주거나, ./bin/elasticsearh --node.box_type hot 으로 옵션을 주고 es 를 실행하면 됩니다.

웜존의 노드들도 같은 방법으로 하면 됩니다.

box_type 항목은 맘대로 이름지어주면 됩니다. 이 값들은 인덱스를 할당하는 es 에서 사용됩니다.

 

핫 노드로 세팅하는 방법:

PUT /logs_2015-08-31

{

  "settings": {

    "index.routing.allocation.require.box_type" : "hot"

  }

}

 

며칠후 더이상 핫노드로 있을 필요가 없어지면, box_type 태깅을 통해서 웜노드로 옮기도록 인덱스 세팅하는 방법:

POST /logs_2014-08-31/_settings

{

  "index.routing.allocation.require.box_type" "warm"

}


 

인덱스들이 더이상 색인도지 않고 자주 검색되지 않게 되면, 핫 노드로 있을 필요가 없습니다. 이 노드들을 웜 으로 태깅해서 인덱스 세팅하는 방법:

"index.routing.allocation.require.box_type" "warm"

 

es 는 웜노드로 자동 마이그레이션합니다. 마지막으로 최적화를 실행해주면 좋습니다.

최적화 과정중에 노드에서 I/O, 색인등이 일어나는 핫노드에서 최적화 하는것은 좋지 않습니다.

 

지금까지 인덱스의 할당이 변경되는 이 프로세스는 큐레이터를 이용하여 자동화 할 수 있습니다.

큐레이터 3.0 을 이용해서 3 일 후에 핫노드에서 웜노드로 이동시키는 방법 예제:

/usr/bin/curator --logfile /var/log/curator.log --loglevel INFO --logformat default --master-only --host localhost --port 9200 allocation --rule node_type=warm indices --time-unit days --older-than 3 --timestring '%Y.%m.%d'

 

인덱스를 최적화 하기 위해 큐레이터를 사용할 수 있고, 최적화가 실행되기전에 재할당 작업을 충분히 기다려야 합니다.

/usr/bin/curator --host localhost --port 9200 optimize indices --older-than 3 --time-unit days --timestring '%Y.%m.%d'


저작자 표시
신고
댓글
댓글쓰기 폼