ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elasticsearch 알아보자
    Dev 2020. 5. 13. 17:58

    1. Elasticsearch란?

     

    Elasticsearch는 Apache Lucene 기반의 Java OpenSource 분산 검색 엔진이다.
    Elasticsearch를 통해 Lucene 라이브러리를 단독으로 사용할 수 있게 되었으며, 방대한 양의 데이터를 신속, 실시간( NRT, Near Real Time ) 으로 저장, 검색, 분석할 수 있다.

    Elasticsearch는 검색을 위해 단독으로 사용되기도 하며, ELK( Elasticsearch / Logstatsh/ Kinana ) 스택으로 사용되기도 한다.
    Logstash: 다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달한다.
    Elasticsearch: Logstash로 받은 데이터를 검색 및 집계하여 필요하고 관심있는 정보를 획득한다.
    Kibana: Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링 한다.

     

    2. 클러스터( cluseter )

     

    클러스터란 Elasticsearch에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드들의 집합체이다. 서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며, 여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터가 존재할 수 있다.

     

    3.  노드( node )

     

    Elasticsearch를 구성하는 하나의 단위 프로세스를 의미한다. 그 역활에 따라 master-eligible, Data, Ingest, Tribe 노드로 구분이 가능하다.

    • Master-eligible node

      클러스터를 제어하는 마스터로 선택할 수 있는 노드를 의미한다.

      여기서 master 노드가 하는 역활은 아래와 같다.

      1) 인덱스 생성, 삭제

      2) 클러스터 노드들의 추적, 관리

      3) 데이터 입력 시 어느 샤드에 할당할지

    • Data Node

      데이터와 관련된 CRUD 작업과 관련있는 노드이며 이 노드는 CPU, 메모리 등 자원을 많이 소모하므로 모니터링이 필요하다 추가로 master 노드와는 분리되는 것이 좋다.

    • Ingest node

      데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역활을 한다.

    • Coordination only node

      data node와 master-eligible node의 일을 대신하는 이 노드는 대규모 클러스터에서 큰 이점이 존재한다 로드밸런서와 비슷한 역활 을 한다고 보면될거 같다.

      *로드 밸런싱은 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업 을 나누어 주는 것을 의미한다.

     

    4. 인덱스( index )/ 샤드( shard )/ 복제( replica )

     

    Elasticsearch에서 index는 RDMS에서 database와 대응하는 개념이다. 또한 shard와 replica는 Elasticsearch에만 존재하는 개념이 아니라, 분산 데이터베이스 시스템에도 존재하는 개념이다.

    샤딩( sharding )은 데이터를 분산해서 저장하는 방법을 의미한다. 즉 Elasticsearch에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것이다. 기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 사용하기도 합니다.

    복제( replica )는 또 다른 형태의 shard라고 할 수 있다. 노드를 손실한경우 데이터의 신뢰성을 위해 샤드를을 복제하는 것이다. 따라서 replica는 서로 다른 노드에 존재할 것을 권장한다.

     

    5. Elasticsearch의 특징

     

    • Scale Out

      샤드를 통해 규모가 수평적으로 늘어날 수 있다.

    • 고가용성

      복제를 통해 데이터의 안정성을 보장한다.

    • Schema Free

      Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없다.

    • Restful

      데이터 CURD 작업은 HTTP Restful API를 통해 수행하며, 각각 대응은 다음과 같다.

      • Select(Data CRUD) = Get(Elasticsearch Restful)

      • Insert(Data CRUD) = Post(Elasticsearch Restful)

      • Update(Data CRUD) = Put(Elasticsearch Restful)

      • Delete(Data CRUD) = Delete(Elasticsearch Restful)

    • 빠른속도

      먼저 index( 색인 ), inverted index( 역색인 ) 차이를 알아보자
      index는 책으로 비유하자면 카테고리, 목차 별로 찾아낼 수 있도록 한 맨 앞 카테고리, 목차 라고 생각을 하면 쉽다.
      inverted index도 마찬가지 책으로 비유하자면 맨 뒤에 있는 키워드마다 찾아볼 수 있도록 표현한 것 이다.
      Elasticsearch는 텍스트를 파싱해서 검색어 사전을 만든 다음에 inverted index 방식으로 텍스트를 저장한다.
      "This is dummy text for testing" 이라는 문장을 파싱하여 각 단어별로 저장을 하고 (This, is, dummy...) 대문자는 소문자 처리 한 뒤 유사어 등을 확인하고 텍스트를 저장하기에 RDBMS보다 전문검색( Full Text Search )에 빠른 성능을 보인다.

    • Elasticsearch 단점

      • 정확하게 실시간 검색은 불가능 하다. ( 준 실시간 검색 )
        • 일반적으로 색인된 데이터는 통상적으로 1초정도 뒤에 확인이 가능하다. 색인된 데이터는 내부적으로 커밋 플러쉬 과정을 거치기에 준 실시간 검색( Near Realtime ) 이라 볼 수 있다.
      • 트랜잭션과 롤백은 지원하지 않는다.
        • 전체적인 클러스터 상향 향상을 위하여 시스템적 비용이 큰 트랜잭션과 롤백은 지원하지 않아 데이터 손실 위험이 존재한다.
      • 데이터의 업데이트는 지원하지 않는다.
        • 정확히 말하자면 일반 SQL 처럼 기존의 데이터를 갱신하는게 아니라 Elasticsearch 에서는 기존의 데이터를 삭제 후 새로운 데이터를 저장하는 방식으로 진행이 이루어 진다. 그렇기에 일반 업데이트는 큰 비용이 발생할 수 있다. 다만 이러한 기능때문에 불변성이 존재한다

     

    출처 : https://victorydntmd.tistory.com/308

     

     

     

     

    'Dev' 카테고리의 다른 글

    Window Docker Jenkins 설치 및 github-webhook 연결  (0) 2021.08.25
    AWS 관련  (0) 2021.02.09
    Kafka 알아보기  (0) 2020.05.14
    Elasticsearch 설치  (0) 2020.05.14

    댓글

Designed by Tistory.