ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Elasticsearch] Elasticsearch 구성요소
    📖 개발 공부/elasticsearch 2023. 5. 5. 12:12

    Cluster

    엘라스틱 서치는 기본적으로 클러스터라는 단위로 데이터를 제공한다. 이는 하나 이상의 물리적인 노드로 이뤄져 있으며 각 노드는 모두 데이터 색인 및 검색 기능을 제공하는 일종의 물리적인 서버이기도 하다.

    클러스터는 노드의 모음. 노드는 내부에 다수의 인덱스를 가지고 있으며, 각 인덱스는 다수의 문서를 가지고 있다.

     

    Node

    물리적으로 실행된 Runtime 상태의 Elasticsearch.

    노드는 논리적인 클러스터를 이루는 구성원의 일부이며 실제 데이터를 물리적으로 가지고 있는 단일 서버이다.

    실행 시 노드는 클러스터에 의해 UUID가 할당되고 클러스터 내에서는 할당된 UUID로 서로를 식별한다.

    node의 종류

    • 마스터 노드: 클러스터의 제어를 담당한다. node.master
    • 데이터 노드: 데이터를 보유하고 CRUD, 검색, 집계 등 데이터 관련 작업을 담당한다. node.data
    • 인제스트 노드: 색인 전 전처리 작업을 담당한다. node.ingest
    • 코디네이팅 노드: 검색이나 집계 시 분산 처리만을 목적으로 설정된 노드. 대량의 데이터를 처리할 경우에 효율적으로 사용할 수 있는 노드

    Document, Index, Shard

    • Index
      • Document가 모인 논리적인 집합
      • Document ID로 데이터를 찾고, 데이터를 여러 곳에 분산시키는 용도로 사용된다.
    • Document
      • 사용자가 입력하는 데이터의 최소 단위이다.
      • 특정 테이블 안의 개별 레코드와 유사하다.
      • 인덱스에는 원하는 만큼의 Documemt를 저장할 수 있으며, 물리적인 샤드 형태로 나눠져서 다수의 노드로 분산 저장된다.
    • Shard
      • 샤드는 인덱스의 전체 데이터를 분산해서 가지고 있는 일종의 부분집합이라고 보면 된다.
      • 각 샤드는 자신이 가지고 있는 데이터만으로도 독립적으로 검색 서비스가 가능하다. 
      • 샤드는 Elasticsearch가 클러스터에서 데이터를 배포하는 단위이다.
        데이터 균형 다시 맞추기 작업을 할 때(예: 장애 발생 후) Elasticsearch가 샤드를 빠르게 이동할 수 있는 속도는 네트워크 및 디스크 성능은 물론 샤드의 크기와 개수에 따라 달라진다.
      • 인덱스를 생성할 때, 샤드의 개수와 레플리카 개수를 지정할 수 있다.
        • 샤드의 개수는 변경할 수 없고(성능과 밀접), 레플리카 개수는 변경이 가능하다. → 운영 중 트래픽 증가에 따른 유연한 대응이 가능해진다.
        • 필요한 경우 reindex를 통해 다시 인덱스하는 경우가 있다.
        • (일반적으로 시간이 많이 소요되는 과정이다.)
      • 레플리카는 샤드 단위로 복제가 된다.
        • 레플리카가 많아지면 데이터 내구성이 좋아지고, 검색 성능이 좋아진다.
      • 엘라스틱 서치에서는 샤드 1개가 50GB를 넘지 않도록 권장한다.

    Segment

    문서들은 빠른 검색에 유리하도록 설계된 특수한 자료구조로 저장된다. 샤드 내부에는 루씬 라이브러리를 포함혹 있는데, 이를 이용해 대부분의 검색 기능을 제공한다.

    루씬에 데이터가 색인되며 데이터는 최소한의 단위인 토큰으로 분리되고 특수한 형태의 자료구조로 저장되는데, 이렇게 저장된 자료구조를 세그먼트라고 한다.

    Elasticsearch의 인덱스 구조

    하나의 엘라스틱서치 샤드는 하나의 루씬 인덱스라할 수 있다.

     

     

    루씬 인덱스는 세그먼트를 이용해 검색을 수행하는데, 세그먼트는 내부적으로 역색인 구조이기 때문에 이를 통해 빠른 검색 결과를 얻을 수 있다.

    엘라스틱서치는 독립적인 루씬 인덱스를 엘라스틱서치 샤드라는 형태로 확장해서 제공한다. 루씬 인덱스가 자기 자신이 가지고 있는 세그먼트 내에서만 검색이 가능하다는 것과 달리, 샤드는 모든 샤드가 가지고 있는 세그먼트들을 논리적으로 통합해서 검색할 수 있다.

     

     

    🔗 참고

     

    내가 운영하는 Elasticsearch 클러스터에 얼마나 많은 샤드가 필요할까?

    편집자 노트: "힙 메모리의 GB당 20 샤드 이하를 목표로 하는 것"에 대한 경험 법칙은 버전 8.3에서 더 이상 사용되지 않습니다. 이 블로그는 새로운 권장 사항을 반영하도록 업데이트되었습니다. E

    www.elastic.co

     

    반응형

    댓글

Designed by Tistory.