menu

ELK 개념 정리

Elastic Search란
  • 아파치 루씬 기반 오픈소스 분산 검색엔진
등장 배경
  • 빅데이터 시대 -> 스키마가 다른 비정형 데이터 분석 요구 -> NoSQL과 같은 사상 등장
  • 이러한 데이터들을 분석하기 위해 Hadoop과 같은 대용량 데이터 저장소 및 분석툴 사용
  • Elastic Search 역시 NoSQL
Elastic Search의 장점
  • 높은 사용성 : Hadoop에 비해 훨씬 쉽게 구성이 가능
  • 높은 확장성 : 신규 리소스 추가가 간편
  • ELK(Elastic Stack)를 이용해 쉽게 데이터 분석 환경 구성 가능
ELK(Elastic Stack)
  • Elastic Search : 검색 엔진 (데이터 분석)
  • Logstash : 데이터 수집
  • Kibana : 데이터 시각화
Elastic Search 구조
  • 클러스터(Cluster) : 엘라스틱 서치 시스템의 가장 큰 단위
    • 다수의 노드로 구성됨
    • 다수의 서버로 바인딩해서 운영 or 하나의 서버에 다수 클러스터 운영 가능
  • 노드(Node) : Elastic Search를 구성하는 하나의 단위 프로세스
    • 하나의 Elastic Search인스턴스
    • 일반적으로 1서버 1노드 구성을 권장
    • 다수의 샤드로 구성됨
    • 같은 클러스터명을 가진 노드들은 자동으로 바인딩
    • Master-Slave 구조
      • 마스터 : 클러스터의 상태정보를 관리
      • 데이터 : 데이터 입/출력, 검색
  • 샤드(Shard) :
    • 데이터베이스 수평분할
    • 사이즈 중간에 바꾸지 못함
    • 1샤드당 20GB 권장
  • 레플리카(Replica) : 데이터 무결성을 위한 샤드의 복사본
클러스터링 과정
  • ES는 데이터를 샤드 단위로 분리해서 노드에 저장
  • 노드를 알아서 선택해 샤드를 분산하여 저장
  • 무결성과 가용성을 위해 각 샤드의 레플리카를 생성하고, 각각 다른 노드에 저장
  • 프라이머리 샤드-레플리카로 불림
  • 노드가 죽게되면, 클러스터 상태는 yellow가 되고, 복제본이 없는 샤드를 살아있는 노드로 복제함
  • 죽은 노드에 프라이머리 샤드가 있으면, 다른 노드의 레플리카가 프라이머리 샤드가 됨
  • 이걸 설정파일에 샤드갯수만 정의해놓으면 알아서 ES가 함
데이터 저장 및 삭제
  • REST API
  • 대용량 데이터는 bulk api를 이용
ES 인덱싱 과정
  • Inverted Index : 텍스트를 다 뜯어서 검색어 사전을 만듦 (책의 맨 뒤 찾아보기 페이지)
  • 입력된 데이터를 화이트 스페이스 등의 기준에 따라 전부 분해 (Tokenize)
  • 분해된 키워드(term)들을 가공함
    • 소문자로 바꾸기
    • 아스키순서로 정렬
    • a,the 같은 불용어 제거
    • 형태소 분석(ex. ~s, ~ing 제거)
    • 동의어 병합(ex. fast, quick)
  • 검색어 입력되면, 똑같이 텍스트 처리
Tip
  • ES는 6.4부터 한글을 지원함(노리). 이전 버전은 은전한닢
  • ES에서 Like검색은 부하가 많음
  • s대량 데이터 업로드 시, 반드시 bulk api사용
  • Master와 slave는 다른 호스트에 하는 것이 좋음
  • 비용여력이 있는 경우 5개, 없는 경우 3개 정도의 노드를 구성