Elasticsearch
Elasticsearch는 점점 많은 문제를 해결하는 분산형 RESTful 검색 및 분석 엔진입니다. Elastic Stack의 핵심으로, 데이터를 중심부에 저장하여 예상되는 항목을 검색하고 예상치 못한 항목을 밝혀낼 수 있습니다.
Categories
- Lucene - 기반 엔진
- Elasticsearch:Python - Python API
- Zinc - 경량 ElasticSearch 대체제
- Sonic - 빠르고 가벼운 Schema-less 검색 백엔드
- OpenSearch - 라이선스 문제로 Fork된 프로젝트.
Shards and Replicas
Remove or delete old data from elastic search
Install Elasticsearch with Docker
-
cluster.name=docker-cluster
- ES Cluster명입니다. ES 서비스마다 동일한 명칭을 사용해야합니다.
-
node.name=master-node1
- ES Node명을 설정합니다.
-
bootstrap.memory_lock=true
- ES운영중 메모리 스왑을 막기 위한 설정을 추가합니다.
-
"ES_JAVA_OPTS=-Xms512m -Xmx512m"
- JVM Heap메모리 설정입니다. Xms/Xmx 옵션은 항상 같게 설정합니다.
-
ulimits
- 리눅스 시스템 자원제한 관련 옵션입니다. ES는 많은 파일디스크립터와 핸들러를 사용하기 때문에 제한 해제가 필요합니다.
Starting a single node cluster with Docker
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.1
Starting a multi-node cluster with Docker Compose
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
use elasticsearch in gitlab-ci
gitlab-ci에서 테스트용으로 사용하고 싶을 경우 다음과 같이 적용하면 된다.
test-elasticsearch:
stage: test
services:
- name: "docker.elastic.co/elasticsearch/elasticsearch:7.10.1"
alias: "elasticsearch"
command: [ "bin/elasticsearch", "-Expack.security.enabled=false", "-Ediscovery.type=single-node" ]
script:
- curl "http://elasticsearch:9200/_cat/health"
Docker GELF logging
Logstash#Docker GELF logging 항목 참조.
ELK Stack
Elasticsearch vs Solr
- 검색엔진 비교_Solr vs ElasticSearch::사이버이메지네이션 블로그
- 검색과 색인, 그리고 강력한 지원군 루씬(Lucene)
- Elasticsearch - 로그 분석, 모니터링, 위치 기반 정보 데이터 분석 및 시각화화 같은 사례에 더 적합하고 자주 사용되며,
- Solr - 는 캐시, 전자 상거래와 같이 패킷 및 정렬에 역변환 되지 않은 정적 데이터와 관련하여 더 많은 이점이 있습니다.
Troubleshooting
error 137 in docker container
간단히, 메모리 크기가 부족할 수 있다. Docker#error code 137 항목 참조.
max virtual memory areas vm.max_map_count is too low
- Elasticsearch 실행시 vm.max_map_count (65530) is too low 오류 수정 방법
- Stackoverflow - Elasticsearch: Max virtual memory areas vm.max_map_count (65530) is too low, increase to at least (262144)
Elasticsearch 가 종료될 때 로그를 보면:
~/elasticsearch-5.6.1/bin$ [2017-10-11T06:39:53,758][DEBUG][o.e.a.ActionModule ] Using REST
wrapper from plugin org.elasticsearch.xpack.XPackPlugin
[2017-10-11T06:39:55,926][INFO ][o.e.x.m.j.p.l.CppLogMessageHandler] [controller/16678] [Main.cc@128] controller (6
4 bit): Version 5.6.1 (Build e81fa9e3f3e0c1) Copyright (c) 2017 Elasticsearch BV
[2017-10-11T06:39:55,972][INFO ][o.e.d.DiscoveryModule ] [node1] using discovery type [zen]
[2017-10-11T06:39:57,291][INFO ][o.e.n.Node ] [node1] initialized
[2017-10-11T06:39:57,292][INFO ][o.e.n.Node ] [node1] starting ...
[2017-10-11T06:39:57,666][INFO ][o.e.t.TransportService ] [node1] publish_address {10.146.0.5:9300}, bound_addres
ses {[::]:9300}
[2017-10-11T06:39:57,679][INFO ][o.e.b.BootstrapChecks ] [node1] bound or publishing to a non-loopback or non-li
nk-local address, enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2017-10-11T06:39:57,692][INFO ][o.e.n.Node ] [node1] stopping ...
[2017-10-11T06:39:57,731][INFO ][o.e.n.Node ] [node1] stopped
[2017-10-11T06:39:57,732][INFO ][o.e.n.Node ] [node1] closing ...
[2017-10-11T06:39:57,750][INFO ][o.e.n.Node ] [node1] closed
[2017-10-11T06:39:57,753][INFO ][o.e.x.m.j.p.NativeController] Native controller process has stopped - no new nativ
e processes can be started
[1]+ Exit 78 ./elasticsearch
vm.max_map_count
를 제시된 값과 같이 수정하면 된다:
See also
- Metrics Aggregations (Stats Aggregation)
- Log Aggregator
- typesense
- Solr - elasticsearch에 비해 어 정도 안정화 되어 있는 검색엔진, vendor support 가능 대용량 검색 서비스에 적합
- Tika - 다양한 문서에서 텍스트를 추출 할 수 있는 라이브러리
- Lucene - 고성능 정보 검색(IR, Information retrieval) 라이브러리
- Splunk - 유료
- Graylog
- 로그스파우트 (Logspout)
- Postgres FTS
Favorite site
- elasticsearch web site
- 엘라스틱서치 기초 사용법
- Slideshare - 엘라스틱서치, 로그스태시, 키바나
- Telegraf로 ElasticSearch에 시스템, 도커 모니터링 메트릭 전달 및 Kibana로 시각화하기 (Telegraf, ElasticSearch, Kibana)
- Elastic Cluster 구성 5 - Jongmin's blog
- NAVER D2 - Storm과 Elasticsearch Percolator를 이용한 NELO2 알람 기능 개선
- Postgres에서의 전문 검색: Elasticsearch vs. 대체제들 | GeekNews
Documentation
- Interfacing with Elasticsearch: Picking a Client - 클라이언트 선택 방법
- Logstash를 사용해야 하나요, Elasticsearch 수집 노드를 사용해야 하나요?