Post
EN

ElasticSearch Basic

Introduce Elasticsearch

​

RESTful

“Near Real-Time” Search Engine

- 인덱싱한 데이터에 대한 검색이 실시간으로 가능하지는 않지만, 정해진 시간 안에 인덱싱이 완료되고 검색이 가능하다. ex)refresh_interval: 10s -> 인덱싱 후 10초 이내에 검색이 가능해짐

분산형 저장소

- 데이터의 분산 저장, 검색, 백업이 가능하다. 분산 저장과 노드 간 데이터 조정, 백업 복구 등은 자동으로 수행된다.

​

Near Real-Time Search Engine

Lucene의 segment처리 방법이 Realtime이 아니기 때문

​

​

RESTful API

Support various client, also easy to make your own

​

분산형 저장소

편리한 데이터 분산 저장과 복제

쉬운 노드 확장

장애 복구와 힐링 정책

​

Elasticsearch

Recent version : 8.3.1 (July 1, 2022)

License: Elastic License 2.0

​

Apache License 2.0에서 Elastic License로 전환(7.11버전 부터)

​

AWS와 법적 분쟁이 발생된 이후부터 OpenSource가 아니게 되었음.

​

ElasticSearch는 OpenSource가 아니다.

​

AWS에서는 7.11 version을 fork 해서 독자적으로 만들어나가고 있는데 이것이 OpenSearch이다.

​

Pricing

Basic(Free) License는 무료

AWS와 GCP로 호스팅 하는 Elastic Cloud

​

ELK : Elasticsearch, Logstash, Kibana

Beats, Logstash, Elasticsearch, Kibana

​

ELK 대신에 EFK가 있다.

​

fluentd는 logstash와 비슷하다.

![](/assets/images/posts/222843707156/9464ecf68e71.png?type=w580)

Logstash는 Buffer 기능이 없어서 traffic이 몰릴 경우 이슈가 있었는데, 최근에 buffer가 추가되고 있다.

​

Logstash는 JVM 위에서 동작할 수 있도록 JRuby로 작성되어 있어 메모리 사용량이 좀더 많다.

ex) audit beats 라는 plugin 형태로 제공해주는데, 사용하게 되면 자동으로 index 생성되고 audit 정보를 저장해준다.

​

Node

![](/assets/images/posts/222843707156/6cb364c25812.png?type=w580)

Coodination Node

![](/assets/images/posts/222843707156/d11f9e2fb28f.png?type=w580)

Master Node

실제로는 하나의 마스터가 요청을 전부 처리하지만, 최소 3개의 Master-eligible 노드를 살려두는 것이 좋다. 마스터가 모두 다운되면 복구될 때 까지 클러스터로 들어오는 모든 요청이 거부된다.

​

리소스에 여유가 있다면 마스터 노드를 다른 역할과 분리시키는 것이 좋다. 고부하 상황에서 Data, ingest가 OOM등의 이유로 고장을 일으키면 마스터가 영향을 받을 수 있기 때문.

​

Ingest Node

Logstash의 Ingest filter와 거의 동일하다. Ingest Node는 REST API로 입력된 데이터에 한해서 데이터 전처리를 수행할 수 있는 반면, Logstash는 다른 소스로부터 데이터를 뽑아내거나 버퍼를 두고 부하 상황을 조정할 수 있다.

​

![](/assets/images/posts/222843707156/8656fc1b5797.png?type=w580)

Data Node

얼마나 많은 리소스가 필요할까?

ES 클러스터를 구성할 때 메모리와 디스크가 클러스터 비용의 대부분을 차지한다. Elasticsearch는 JAVA로 작성되었기 때문에 JVM heap 영역을 최대 32GB 까지 설정할 수 있다. 그리고 Elasticsearch에서는 데이터 노드에서 heap 사용량에 따라서 하나의 Data 노드는 최대 64GB의 메모리가 권장 사양이며, 그 이상으로 메모리를 설정하는 것은 성능 증가 폭이 작다.

​

1개의 Data Node Resource Limit

- CPU : unlimited

- Memory : 64GB

- Disk: 1920GB

Memory는 JVM Heap을 32GB 까지 설정할 수 있지만 32GB로 설정하면 성능이 감소하는 문제가 있다. 이 때문에 Elastic Cloud를 비롯한 클라우드형 Elasticsearch와 VES에서도 힙 메모리는 31GB 이하로 설정하고 있다.

​

Elasticsearch에서는 Memory:Disk의 비율은 1:30 정도를 권장하고 있다.

​

디스크 사용량 관리 정책

low : 85%

더이상 index 생성이 불가.

high : 90%

shard를 옮기는 작업을 진행 함.

flood_stage : 95%

모든 index의 데이터 등록을 불가능하게 한다.

​

Data Structure

​

![](/assets/images/posts/222843707156/f0faa6fdf235.png?type=w580)

​

![](/assets/images/posts/222843707156/a311bccfcb17.png?type=w580)

​

This article is licensed under CC BY 4.0 by the author.