ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ELK Stack] 검색엔진으로서의 Elasticsearch의 특성-2
    Dahum Library/ELK Stack 2020. 1. 2. 01:29

    1편에 이어서 검색엔진으로서의 Elasticsearch에 대해서 더 얘기해보려고 한다.

     

     

    내가 생각하는 Elasticsearch이 검색엔진으로 기능하는데 강력하게 작용하는 특성은 아래의 세가지였다.

     

    1. 비정형 데이터를 자유롭게 색인 가능

    2. 고성능의 전문검색 지원

    3. 강력한 분산 관리/검색 기능

    이전편에서 1,2번에 대해서 이야기했고 이번글에서는 3번에 대해서 이야기하려고 한다.

     

    이전글 : [ELK Stack] 검색엔진으로서의 Elasticsearch의 특성-1

     

    사실 앞의 2가지 특성은 모두 es만의 특성이라기에 애매한 부분이 있다.

    1번은 결국 비관계형DB구조라는 것이고, 2번째는 es의 베이스가되는 Apache Lucene에 대한 이야기기 때문이다.

    하지만 3번 es의 분산시스템에 대한 특성이야말로 es가 강력한 검색엔진이 될 수 있는 독특한 특징이라고 생각한다.

     

    es의 아키텍쳐를 간단히 아래의 그림을 보면서 설명해본다면

    es cluster 구조

    보이는것 처럼 es 시스템의 가장 상위 계층을 cluster라고 부른다. 그리고 하나의 클러스터는 1개 이상의 node들로 이루어져있으며 node는 es에서 하나의 클러스터를 구성하는 단위 프로세스들이라고 생각하면 된다. 각각의 node는 꼭 해당 클러스터가 있는 서버에 있을 필요없이 여러 서버에 분산되어있을 수 있다.

    또한 node는 목적에 따라 역할이 부여되고 그 종류로는 master(eligible) node, injest node, data node, tribe node 등이있다.

    (실사용시 boolean옵션으로 역할부여가 가능하다. ex. node.master=true, node.data=false...)

     

    각 역할별 node의 기능은 es공식 사이트를 참조하면 알 수 있다.

    https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node

     

    es는 단순히 문자열과 쿼리를 매칭하는 수준의 검색이 아니라 형태소 분석, 집계와 같은 연산 작업을 수행한다. 이러한 기능들을 물리적인 수준으로 까지 분리해서 각 노드들이 본연의 기능에 최적화할 수 있다는점이 바로 es 분산시스템의 강점이다. 또한 이와같은 분산시스템을 구성하기 위한 설정이 굉장히 쉽고 간단해서 관리차원에서도 굉장히 용이하다.

     

    마지막으로 위 그림에서 각 node의 안을 보면 a0, b1과 같은 작은 조각들이 있는데 이것들을 shard라고 한다. shard는 쉽게말해 index에 저장되는 데이터의 조각이다. 하나의 index는 1개 이상의 (primary)shard에 나누어 저장되고 각 shard는 0개 이상의 replica(복사본)을 가진다. 위의 그림을 예시로 들자면 각 샤드의 이름에서 앞의 알파벳은 index이름을 나타내고 숫자는 해당 index의 n번째 shard라고 생각할 수 있다.

     

    그림을 보면 index a는 2개의 shard와 2개의 replica를 가지고있고, index b는 3개의 shard와 3개의 replica를 가지고있다. 그런데 이 shard들은 각각의 node에 균일하게 분산되어있어서 만일 하나의 node가 fail되는 상황에서도 index a,b에 대한 정보의 손실이 없다. 이런 shard의 분산을 통해 보다 안전하게 데이터를 관리할 수 있다. shard와 replica구성 또한 customizing할 수 있으며 데이터량이나 다른 여건을 잘 고려하여 구성하면 검색 성능을 많이 향상시킬 수 있다.

    (나중에 검색이나 통계 부분에서 언급되겠지만 검색이나 집계를 shard에 특정해서 수행할 수가 있다.)

     

     

    결론

    node의 분산을 통해서 연산(기능)에 대한 각 서버의 부하를 분리할 수 있고, shard의 분산을 통해서 고가용성 보장과 효율적인 검색이 가능하다.

     


    https://www.elastic.co/blog/every-shard-deserves-a-home - node, shard구성 시나리오 (elastic공식문서)

    https://brownbears.tistory.com/4 - shard개념

    https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node
    - node개념 (elastic공식문서)


     

     

     

    댓글

Designed by Tistory.