Hot/Warm Architecture
• 데이터 별로 저장 할 데이터 노드를 구성 하여 Cluster를 구성 할 수 있다. Elasticsearch에서 원할한 검색 속도를 보장 받기 위해서는 SSD 디스크를 이용 하여 Node를 구성 하지만, 저장 되는 데이터가 많아 지면 고민에 빠질 수 밖에 없다. 그럴 경우 자주 사용 되는 Index에 대하여 성능이 좋은 Node에 저장 하여 사용 하고, 사용을 많이 하고 간혈적으로 사용 하는 Index 에 대하여 비교적 성능이 낮은 Node에 저장 하여 구성 할 수 있다.
• 이러한 구성을 Hot/Warm Architecture 라고 불리며, Node를 제어 하려는 시나리오에 유용 하여, 데이터에 대한 세밀한 제어가 가능하다.
• 전용 데이터 노드는 다음과 같이 사용할 수 있습니다.
- hot 노드 : 새로운 문서가 작성된 색인을 지원하기 위해
- warm 노드 : 빈번하게 질의 될 가능성이없는 읽기 전용 색인을 처리하기 위해
Hot Node
• 색인 생성에 Hot Node 를 사용
- 인덱싱 작업은 CPU 및 IO 집중적 작업이기 때문에 서버의 자원이 높아야 한다.
- warm 노드에 비하여 보다 빠른 스토리지를 사용 해야 한다.
Warm Node
• 오래된 읽기 전용 색인에 warm 노드 사용
- 큰 부착 디스크를 사용하는 경향이 있다.
- 더 많은 양의 데이터를 만나려면 추가 노드가 필요할 수 있다.
Hot, Warm 과 같이 index에 대하여 특정 Data 노드로 구분 하여 구성 하기 위해서는 Shard Filtering을 통하여 구성 할 수 있다.
Shard Allocation Filtering
Shard Filtering 은 특정 Shard가 특정 Node로 지정 될 수 있도록 Routing 해준다.
즉, 특정 Index에 대하여 특정한 Node로 할당 하여 관리 할 수 있도록 해준다,
이러한 설정은 dynamic setting 을 통하여 Node에 재시작 없이 allocation 하여 운영 할 수 있다.
"index.routing.allocation"을 이용 하여 특정 노드에 할당 하는 것을 설정 한다.
Shard Allocation Filtering Dynamic Setting
index.routing.allocation.include.{attr} : 해당 attr에 적어도 한 개 이상 포함 하는 설정
index.routing.allocation.exclude.{attr} : 해당 attr에 포함 되지 않도록 설정
index.routing.allocation.require.{attr} : 해당 attr에 무조건 포함 되로록 설정
ㅁ attribute 요소
{attr} | 설명 |
---|---|
| Node의 이름으로 매칭 |
| Node의 ip 주소로 매칭 |
| Node의 hostname 으로 매칭 |
Tag the Nodes
다수의 Node를 지정하여 그룹화 및 관리의 편의성을 위하여 Node에 대하여 Tag를 지정 할 수 있다.
설정은 "node.attr" 속성을 사용하여 노드에 태그를 지정 한다.
아래와 같이 elasticsearch.yml파일을 수정 하거나 실행 시 -E 옵션으로 설정이 가능 하다
"cy_es" 임의로 설정된 이름으로 변경 가능 하며, 아래와 같은 경우 "cy_se" 에 "hot" 이라는 이름 Tag로 Node로 설정이 되어 Shard Filtering이 가능 하다.
아래와 같은 경우 "cy_se" 에 "warm" 이라는 이름의 Tag로 Node로 설정이 되어 Shard Filtering이 가능 하다.
index.routing.allocation
위에서 설명한 index.routing.allocation을 통하여 특정 index에 대하여 routing 을 아래와 같이 진행 할 수 있다.
아래 예제는 hot_warm_test 라는 index에 할당된 shard에 대하여 cy_es 에서 hot 이라는 tag로 지정된 node로 allocation 하게 된다.
만약 동일한 index에 대하여 warm으로 지정된 tag로 설정된 data node 로 allocation 할 경우 warm tag로 설정 한다.
Hot/Warm Test
기존의 아래와 같은 구성 으로 되어 있는 elasticsearch cluster가 있다.
1~3 노드는 master와 같은 역할 을 하고 있으며, hot node로 사용 할 예정이며, 4~6 노드는 warm 노드로 설정 하려고 한다.
hot 노드로 설정 할 노드에 대하여 "node.attr.cy_es : hot" 으로 설정 하여 hot node로 설정 하기 위한 tag를 설정 한다.
hot 노드로 설정 할 노드에 대하여 "node.attr.cy_es : warm" 으로 설정 하여 warm node로 설정 하기 위한 tag를 설정 한다.
이제, hot_warm_test 라는 이름의 index를 hot으로 tag된 data노드로 routing 하여 생성 하여 본다,
모든 data 노드는 1~3 노드에 tag된 hot 노드로 shard가 생성 된 것을 볼 수 있다.
간단하게 document를 1개 생성 하여 보면 정상 적으로 생성 된다.
검색도 정상 적으로 응답 받을 수 있다.
만약 더이상 색인(docuement 추가)가 없고 간혈적으로 검색 하기 위하여 hot_warm_test 라는 이름의 index를 warn으로 tag된 data노드로 routing 하여 생성 하여 본다,
기존의 hot 노드(elastic_1~3) 에 있던 shard가 warm 노드(elastic_4~6) 으로 allcation된 것을 확인 할 수 있다.
Monitoring 기능을 활성화 하였다면, 좀더 자세하게 allocation된 부분을 확인 할 수 있다.
hot 노드와 동일 하게 document를 1개 생성 하여 보면 정상 적으로 생성 된다.
또한,검색도 정상 적으로 응답 받을 수 있다.
참고 : https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x
'Elastic Stack' 카테고리의 다른 글
Curator 를 이용한 오래된 index 자동 삭제 (0) | 2018.10.21 |
---|---|
Elasticsearch Cluster (0) | 2018.07.25 |
Logstash Drop filter (1) | 2018.07.22 |
Logging every shell command to elastic stack (0) | 2018.05.20 |
Elasticsearch5, Logstash5, Kibana5 and Redis (ELKR5 Stack) install CentOS 7 (0) | 2016.12.24 |