3. Elasticsearch
분산형 검색 및 분석 엔진
- GET, PUT, DELETE, POST의 RESTful API를 제공
Apache Lucene 기반
- 현재 Elasticsearch 버전 (5.x) 을 기준으로 Lucene은 6.x 버전이 적용되어 있음
기본적으로 모든 데이터(document)는 JSON 형식으로 저장
데이터 색인(Indexing)을 이용한 전문검색(Full Text Search) 지원
Elasticsearch 클러스터와 상호작용 할 수 있는 다양한 언어의 라이브러리 지원
- Java, Python, Javascript, PHP, Perl, Ruby
‘X-Pack’ 을 통해서 보안, 모니터링 등 부가 기능 제공
4. Elasticsearch – RDB와의 용어 비교
RDBMS Elasticsearch
저장하다(Insert) 색인하다(Indexing)
Table Type
Schema Mapping
Row Document
Column Field
Database Index(Indice)
5. Elasticsearch – 설치 및 설정
설치
- zip이나 tar 파일을 내려 받아 압축 해제로 간단하게 설치
설정
- elasticsearch.yml 파일에 YAML 형식으로 설정
cluster.name: es-cluster
node.name: es-node
.
.
.
6. Elasticsearch – Cluster 구조
Cluster > Node > Shard (Primary, Replica)
- 데이터 교환 : 9300 port
- rest api : 9200 port
7. Elasticsearch – Node
Master Node
- 클러스터 상태관리 (Scale in/out)
- Index(indice) 생성/삭제
- shard allocation
Data Node
- 데이터(document) 저장
- 검색 및 Aggregations 등의 작업 수행
Ingest Node
- 데이터가 색인되기 전에, 전처리 수행
Coordination Node
- 클러스터에 인입된 요청을 각 노드로
하고, 결과를 취합하는 역할을 하는 일종
의 ‘로드 밸런싱 노드’
- Scatter Phase : 요청을 데이터 노드로
포워딩. 데이터 노드는 요청을 처리후,
다시 코디네이팅 노드로 반환
- Gather Phase : 반환된 결과를 Reducing
연산을 통해 하나의 Result Set으로 취합
8. Elasticsearch – Clustering (1)
Zen Discovery 방식
node 1
(master)
node 2
node 3
discovery.zen.ping.unicast.hosts:
- 10.213.10.2
- 10.213.10.3
10.213.10.1
10.213.10.2
10.213.10.3
elasticsearch.yml
AWS EC2 환경에서는 ‘ec2 discovery’ 플러그인을
설치하여 사용
9. Elasticsearch – Clustering (2)
최소 가용 Master Node 설정
- 아래와 같은 수식으로 값 도출.
- 만약 master_eligible_nodes가 3이라면,
.
.
discovery.zen.minimum_master_nodes: [number]
.
.
elasticsearch.yml
𝑚𝑎𝑠𝑡𝑒𝑟_𝑒𝑙𝑖𝑔𝑖𝑏𝑙𝑒_𝑛𝑜𝑑𝑒𝑠
2
+ 1
3
2
+ 1 = 2
16. Kibana
ELK Stack의 시각화 도구
Elasticsearch Aggregation 기능을 통한 통계 그래프
ELK Cluster (Elasticsearch, Logstash, Kibana) 모니터링 기능 제공
Machine Learning 기능 제공 (Beta Ver)