이제부터 정말 중요한 Elastic 개념 정리 들어갑니다.

    최소한 여기에 나오는 용어들을 알아야 사용할 수 있습니다.
    꼭 집중해주시길 바랍니다(人´∀`).☆.。.:*・°

     

    Cluster (클러스터)

      • 하나 이상의 노드(프로세스)로 구성

      • 클러스터를 통해 데이터를 적재하고 검색요청 진행

      • 클러스터는 고유의 cluster_name, cluster_uuid 갖고 운영

     

     

    Node (노드)

      • Elastic search 프로세스 

      • 서로 헬스 체크, 데이터 인덱싱 되어 적재 기능

      • 노드 종류

    노드 종류 노드 역할
    Master Node (마스터 노드)
    • 클러스터 구성 기준
    • 헬스 체크 담당
    Data Node (데이터 노드)
    • 실 데이터 적재, 리턴 담당
    All Node (전체 노드)
    • data, master 역할 전부 담당
    • 확장 필요없는 상태일 때 비용 절감을 위해 사용
    Client Node (클라이언트 노드)
    • 쿼리(검색 요청)만을 받기 위한 노드
    • 모든 노드들의 쿼리를 받을 수 있기 때문에 부하분산용으로 사용

     

     

    Shard (샤드)

      • Lucene의 인덱스 개념과 동일

      • 파티션 개념 유사

      • 인덱스의 doc 데이터를 나누는 단위

      • 샤드가 없다면 생길 문제점
        1) 
        단일 노드의 볼륨 크기의 유한성으로 더이상 저장 못할 때
        2) 
        단일 노드의 유한한 CPU, mem 자원으로 indexing, searching 성능 저하 

    샤드 종류 샤드 역할
    Primary Shard (기본 샤드)
    • doc 원본 샤드

    • ES doc 인덱싱 될때 가장 처음에 생성되는 샤드

    • 샤드에는 number가 있어 몇번째 샤드인지 식별 가능

    • 샤드개수는 불변

    • defualt(기본 값) : 5 (~6.X) → 1 (7.X)

    Replica Shard (복제본 샤드)
    • doc 복제본 샤드

    • 프라이머리 샤드에 먼저 인덱싱 후 
      레플리카 샤드에
      복제되는 구조

    • 몇번째의 복제본 샤드인지 식별 가능

    • 고가용성 유지

    • 병렬 검색 실행함으로 검색 처리량 확장 가능

    • 단점 : IO가 두배로 발생하기에 인덱싱 성능 저하 , 
      실 디스크 볼륨 두배 필요

    • defualt(기본 값) : 1

     

    Segment (세그먼트)

      • 문서(document)가 인덱싱될 때 처음엔 시스템 버퍼 캐시영역으로 적재

      • refresh 수행시 디스크 세그먼트에 적재

        • 디스크 세그먼트에 적재되어야 검색가능한(searchable) 데이터로 전환

      • 세그먼트는 불변의 특성(일관성 유지)을 지님
        • 수정 요청 = 기존 문서 삭제 마킹, 새로운 문서 생성
        • 삭제 마킹 = 실제 삭제 작업 곧바로 진행 X, 실제 삭제 작업은 머징에 의해 진행

    세그먼트 수정시 진행되는 과정 - 다보의 손그림

     

    refresh (리프레쉬)

    refresh 설명 - 다보의 손 그림

    • 버퍼 캐시 영역 → 디스크 세그먼트 적재

    • refresh 주기

      • default(기본 값) :
        ~6.X 버전 = 1s 
        7.X 버전 = 1s + 30s동안 검색 요청
        (select) 없으면 refresh disabled (7.X)

    merging (머징, 병합)

    • 세그먼트는 잘게 쪼개진 데이터 단위이기에 검색 요청 시 많은 세그먼트들에게 응답을 받아야하는 단점 존재

    • 백그라운드에서 세그먼트 병합 수행

    • merging 주기

      • 시간 단위로 끊기진 않고 샤드 상황을 보고 유동적으로 수행

      • 강제 머징(force merging)도 가능

    Posted by 개발자 다보