elasticsearch
Elastic Search 입문
노마지
2016. 11. 21. 22:23
Elastic Search 입문
Elastic Saerch 특징
- 아파치 루씬 기반
- 분산 시스템
- 높은 가용성
- 멀티 테넌시
- JSON document / Restful api
- 실시간 분석
시스템 구조
클러스터
- 클러스터는 엘라스틱서치의 가장 큰 시스템 단위
- 하나의 클러스터는 여러 개의 노드로 이루어짐
- 여러 대의 서버가 하나의 클러스터를 구성할 수 있으며 그 반대도 가능
- 같은 클러스터의 이름으로 노드를 실행하는 것만으로 자동 확장
노드
- 노드는 마스터 노드와 데이터 노드로 구분
- 마스터 노드는 전체 클러스터 상태의 메타 정보를 관리
- 기존의 마스터 노드가 종료되는 경우 새로운 마스터 노드가 선출됨
- 데이터 노드는 실제 데이터가 저장되는 노드
네트워크 바인딩
- 효율적인 스케일아웃을 위해 네트워크에 있는 다른 서버의 노드와도 바인딩 가능
- 네트워크 바인딩을 위해 젠 디스커버리 기능 내장
- 멀티캐스트와 유니캐스트 방식을 모두 지원
- 공식 운영 그룹에서는 유니캐스트의 사용을 권장
- 반드시 두 엘라스틱서치의 버전은 동일해야 함
샤드와 레플리카
- 샤드는 데이터 검색을 위해 구분되는 최소 단위
- 색인된 데이터는 여러 개의 샤드로 분할되 저장
- 기본적으로 인덱스당 5개의 샤드와 5개의 레플리카으로 분리
- 개수 설정을 제외하면 사용자가 직접 사드에 접근하는 경우는 없음
- 데이터가 색인되어 저장되는 공간을 최초 샤드라 함
- 최초 샤드에 데이터가 색인되면 동일한 수만큼 레플리카을 생성
- 최초 샤드가 유실되는 경우 레플리카을 최초 샤드로 승격
- 최초 샤드와 레플리카는 동시 검색 대상이 되어 성능 향상에 이점이 있음
- 최초 샤드와 레플리카는 서로 다른 노드에 저장
- 생성된 인덱스와 샤드 설정은 변경 불가능
shard reallocation 동적으로 끄기
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}'
인덱스 (Index)
- 유사한 특징을 갖는 도큐멘트들의 집합
- 인덱스는 인덱스 이름으로 식별됨
- 인덱스 이름은 인덱싱, 검색, 갱신, 삭제 명령 시 참조됨
- DATABASE
타입 (Type)
- 하나의 인덱스 내에 여러개의 타입을 지정 가능
- 타입은 인덱스에 대한 논리적인 카테고리/파티션
- TABLE
도큐멘트 (Document)
- 인덱스 가능한 정보의 기본 단위
- 도큐멘트는 JSON으로 표현됨
- ROW
데이터 처리
엘라스틱서치 데이터 구조
- 데이터 구조는 인덱스, 타입, 도큐먼트 단위로 이루어짐
- 서로 다른 인덱스 타입들은 서로 다른 매핑 구조로 구성
- 멀티 테넌시를 지원하므로 여러 개의 인덱스를 한꺼번에 검색 처리 가능
REST api
- HTTP METHOD GET, POST, PUT, DELETE, HEAD 등이 있음
- curl -X{METHOD} http://host:port/{INDEX}/{TYPE}/{ID} -d '{DATA}'