엘라스틱서치(Elasticsearch)란???
엘라스틱서치는 Apache Lucene(아파치 루씬) 기반의 JAVA 오픈소스 분산 검색 엔진이다. 엘라스틱서치는 엄밀히 말하면 데이터 저장소가 아니기 때문에 MySQL과 같은 데이터베이스들을 대체할 수 없다. 대신 엘라스틱서치는 방대한 양의 데이터를 빠르게 저장,검색,분석할 수 있다.
엘라스틱서치는 검색을 위해서 단독으로 사용되기도 하지만 Logstash, Kibana와 같이 ELK스택으로 사용하기도 한다.
ELK(Elasticsearch , Logstash, Kibana)스택
Logstash
- 다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집,집계,파싱하여 엘라스틱서치로 전달한다.
Elasticsearch
- Logstash로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득한다.
Kibana
- 엘라스틱서치의 빠른 검색을 통해 데이터를 시각화 및 모니터링한다.
엘라스틱서치의 핵심개념
클러스터
- 하나 이상의 노드(서버)가 모인 것이며 전체 데이터를 저장하고 모든 노드를 포괄하는 통합 색인화 및 검색 기능을 제공한다.
- 클러스터는 고유한 이름으로 식별된다.
- 노드가 클러스터에 포함되기 위해서는 이름에 의해 클러스터의 구성원이 되도록 설정되기 때문에 이름은 매우 중요하다.
- 노드가 잘못된 클러스터에 포함될 위험이 있으므로 동일한 클러스터 이름을 서로 다른 환경에서 재사용하면 안된다.
- 클러스터에 하나의 노드만 있는 것은 유효하며 각자 고유한 클러스터 이름을 가진 독립적인 클러스터를 여러개 둘 수 있다.
노드
- 노드는 클러스터에 포함된 단일 서버이며 데이터를 저장하고 클러스터의 색인화 및 검색 기능에 참여합니다.
- 노드도 클러스터처럼 이름으로 식별된다. 노드의 기본이름은 임의 UUID이며 특정 이름으로 정의도 가능하다.
- 네트워크의 어떤 서버가 엘라스틱서치 클러스터의 어떤 노드에 해당하는지 알아야하므로 노드의 이름은 중요하다.
인덱스(색인)
- 엘라스틱서치에서는 단일데이터 단위를 도큐먼트(document)라고 부르며 이 도큐먼트들을 모아놓은 집합을 인덱스라고 한다.
- 엘라스틱서치의 버전7 이후부터는 인덱스의 개념을 테이블이라고 봐야한다. 즉, 엘라스틱서치에서도 도큐먼트를 모아둔 테이블이 인덱스인 것 이다.
샤드 / 리플리카
- 클러스터에 노드를 추가하면 샤드들이 각 노드로 분산되며, 디폴트로 1개의 복제본을 생성한다.
- 처음에 생성된 샤드를 프라이머리 샤드(primary shard)라고 하며, 복제본을 리플리카(replica)라고 부른다.
- 샤드는 인덱스의 도큐먼트를 분산해서 저장하는 저장소라고 할 수 있다.
- 리플리카는 프라이머리 샤드의 복제본이다.
- 같은 샤드와 복제본은 동일한 데이터를 담고있기 때문에 서로 다른 노드에 저장이 된다.
참고한 사이트 :
https://choseongho93.tistory.com/231
https://pearlluck.tistory.com/695