elasticsearch

Elastic Search 입문

노마지 2016. 11. 21. 22:23

Elastic Search 입문



Elastic Saerch 특징

  1. 아파치 루씬 기반
  2. 분산 시스템
  3. 높은 가용성
  4. 멀티 테넌시
  5. JSON document / Restful api
  6. 실시간 분석

시스템 구조

클러스터

  • 클러스터는 엘라스틱서치의 가장 큰 시스템 단위
  • 하나의 클러스터는 여러 개의 노드로 이루어짐
  • 여러 대의 서버가 하나의 클러스터를 구성할 수 있으며 그 반대도 가능
  • 같은 클러스터의 이름으로 노드를 실행하는 것만으로 자동 확장

노드

  • 노드는 마스터 노드와 데이터 노드로 구분
  • 마스터 노드는 전체 클러스터 상태의 메타 정보를 관리
  • 기존의 마스터 노드가 종료되는 경우 새로운 마스터 노드가 선출됨
  • 데이터 노드는 실제 데이터가 저장되는 노드

네트워크 바인딩

  • 효율적인 스케일아웃을 위해 네트워크에 있는 다른 서버의 노드와도 바인딩 가능
  • 네트워크 바인딩을 위해 젠 디스커버리 기능 내장
  • 멀티캐스트와 유니캐스트 방식을 모두 지원
  • 공식 운영 그룹에서는 유니캐스트의 사용을 권장
  • 반드시 두 엘라스틱서치의 버전은 동일해야 함

샤드와 레플리카

  • 샤드는 데이터 검색을 위해 구분되는 최소 단위
  • 색인된 데이터는 여러 개의 샤드로 분할되 저장
  • 기본적으로 인덱스당 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}'