Elasticsearch

- Apache Lucene(아파치 루씬) 기반의 Java 오픈소스 분산 검색 엔진
- Logstash로부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득
- 루씬 라이브러리(Java에서 개발한 정보 검색용 라이브러리)를 단독으로 사용할 수 있음
- 확장성이 뛰어난 오픈 소스 전체 텍스트 검색 및 분석 엔진
- 대량의 데이터를 신속하고 거의 실시간으로 저장, 검색 및 분석
- 일반적으로 복잡한 검색 기능과 요구 사항이 있는 응용 프로그램을 구동하는 기본 엔진 / 기술
특징
Near Realtime(NRT)
- 거의 실시간 검색 플랫폼
- 문서를 색인할 때부터 검색 기능할 때까지 약간의 대기시간 (일반적으로 1초)이 매우 짧음
- 클러스터(Cluster)
- 전체 데이터를 함께 보유하고 모든 노드에서 연합 인덱싱 및 검색 기능을 제공하는 하나 이상의 노드 모음
- 클러스터는 기본적으로 elasticsearch라는 고유한 이름으로 식별
- 어떤 노드가 어느 클러스터에 포함되기 위해서는 이름에 의 해 클러스터의 구성원이 되도록 설정되기 때문에 이 이름은 매우 중요
- 클러스터는 하나 이상의 노드가 모인 것이며, 이를 통해 전 체 데이터를 저장하고 모든 노드를 포괄하는 통합 색인화 및 검색 기능을 제공
- 클러스터는 고유한 이름으로 식별되는데 기본이름은 elasticsearch
- 노드가 잘못된 클러스터에 포함될 위험이 있으므로 동일한 클러스터 이름을 서로 다른 환경에서 재사용하면 안됨
- 클러스터에 하나의 노드만 있는 것은 유효하며 또한 각자 고유한 클러스터 이름을 가진 독립적인 클러스터를 여러개 둘 수 있음
노드
- 노드는 클러스터의 일부이며 데이터를 저장하고 클러스터의 인덱싱 및 검색 기능에 참여하는 단일 서버
- 단일 클러스터에서 원하는 만큼 노드를 소유 가능
- 현재 네트워크에서 실행중인 다른 Elasticsearch 노드가 없는 경우 단일 노드를 시작하면 기본적으로elaticsearch라는 새로운 단일 노드 클러스터가 생성
- 노드는 클러스터에 포함된 단일 서버로서 데이터를 저장하 고 클러스터의 색인화 및 검색 기능에 참여
- 클러스터처럼 이름으로 식별되는데, 기본이름은 시작 시 노 드에 지정되는 임의 UUID(Universally Unique Identifier)
- 기본이름 대신 특정 이름으로 정의 가능
- 네트워크의 어떤 서버가 Elasticsearch 클러스터의 어떤 노드 에 해당하는지 식별해야 하기 때문에 노드의 이름은 관리의 목적에서 중요
- 노드는 클러스터 이름을 통해 어떤 클러스터의 일부로 구성
master-eligible node
- 클러스터를 제어하는 마스터로 선택할 수 있는 노드
- 인덱스 생성, 삭제
- 클러스더 노드들의 추적, 관리
- 데이터 입력 시 어느 샤드에 할당할 것인지
Data node
- 데이터와 관련된 CRUD 작업과 관련있는 노드
- 메모리 등 자원을 많이 소모하므로 모니터링이 필요 하며, master 노드와 분리되는 것이 좋음
Ingest node
- 데이터를 변환하는 등 사전 처리 파이프라인 을 실행하는 역할
- Coordination only node
- data node와 master-eligible node의 일을 대신하는 이 노드는 대규모 클러스터에서 큰 이점
- 로드밸런서와 비슷한 역할
색인(index)
- 색인은 다소 유사한 특성을 갖는 문서의 컬렉션
색인은 이름(모두 소문자여야함)으로 식별되며 이 이름은 색인 작성, 검색, 갱신 및 삭제할 때 색인을 참조하는데 사용
RDB 관점에서 보면 DB에 해당
Type
- 다른 종류의 data들을 같은 index에 저장하게 해주는 index 의 ‘논리적인’ 부분을 의미
- 7.x 버전부터 해당 개념이 전체 삭제 -> deprecated
RDB 관점에서 보면 Table에 해당
Documments
- 문서는 색인을 생성할 수 있는 기본 정보 단위
JSON으로 표현
- RDB 관점에서 Record
- 인덱스( index )
- RDBMS에서 database와 대응하는 개념
샤드( Shard )
- 샤딩( sharding )은 데이터를 분산해서 저장하는 방법
스케일 아웃을 위해 index를 여러 shard로 쪼갠 것
기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터 의 샤드 갯수를 조정하는 튜닝을 하기도 함
복제( Replica )
- 또 다른 형태의 shard
노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제 하는 것
- replica는 서로 다른 노드에 존재할 것을 권장