ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elastic Search
    NoSql/Elasticsearch 2019. 9. 4. 12:11
    반응형

    - Elastic Search 

     

     회사 내에서 사용할 일이 생겨서 급하게 R&D 를 시작했다. ELK(Elasticsearch, Kibana, Logstash, Beats 을 합쳐서 통칭함) 에 대한 기본 상식이 없으며 Elastic Search 는 써본적도 없는 상태에서 실제 상용서비스를 구축해야 하는 상황이다. 

     일단 구글링을 하면 대부분 Elastic Search 를 쓰기전에 ELK 스택에 대해서 설명을 한다. 데이터 과학, 흔히 data science 라고 불리는 부분부터 설명을 시작한다. 간단하게 요약하면 어떤 데이터든 수집하고 빠르게 검색하여 보기 좋게 만들수 있어야 한다고 한다. 그리고 ELK 스택을 마스터 할경우 어떤 빅데이터라도 쉽게 개발할수 있다고 한다. 

     보통 Elastic Search 를 쓰는 경우는 로그 수집을 할때 많이 사용하는것으로 보인다. 메세지큐 와 LOGSTASH 같은 것들을 이용하여 데이터를 Elastic Search 에 입력하고 그것을 KIBANA 같은 솔루션을 이용해 visualization 을 하는것을 기본구성으로 가져간다. 

     이러한 구성이라면 응용 여부에 따라 대부분의 데이터들도 쉽게 수집이 가능할거 같다. 단지 로그 수집이 아니라 서비스에 정보와 환결설정 같은 정보들도 충분히 수집이 가능할것이라 본다. 

    현재 ELK 의 버전은 7.X 버전까지 릴리즈 된것으로 알고 있다.(2019년 4월 7.0 버전 출시) 5.0,6.0 은 버전이 나올때 변경점이 많았던거 같지만 그나마 그에 비해 7.0 은 큰변화는 없었던거 같다. 하지만 각 버전별로 변경점이 있으며 버전선택시 충분히 고려를 해보야 할거 같다. 

    ( 변경 참고 사이트 : http://kimjmin.net/2019/04/2019-04-elastic-stack-7-release/ )

    일단, 조사결과 5.0,6.0 은 사용에서 제외 했으며 일단 7.0 을 사용하기로 마음먹었기에 7.0 변경점에 대해서 확인해보았고 그중 가장 눈에 뛰는건 TYPE 구조가 일부 삭제 되었다는 점이었다. 

    참조 링크에서 api 부분만 따로 캡쳐

    대부분의 ELK API 사용에 관련된 내용을 검색하면 API 사용시 TYPE 을 명시하게 되있다. 그래서 그부분이 삭제 되면서 혼란이 가중됬고 그럼 어떻게 사용 하는지 다시 찾아볼 필요가 생겼다. DocumentAPI 경우 type에 들어가던 부분을 지정자 _doc 로 대치 하면 대부분 적용된다고 한다. ( 테스트가 필요할거 같다 ) 예를 들면 

     /{index]/_update/{id} or /{index}/_doc/{id]/_update 두가지 모두 사용이 가능하다고 한다. ELK 공부를 시작하면서 이전 버전내용들을 보고 실제 7.x 버전을 사용할때 잘 안될경우 헷갈리지 말아야 겠다. 

     7.x 버전 이전버전을 사용하고 있는 곳에서 7.x 버전으로 업그레이드 하려면 생각보다 고려할상황이 많을거 같다. 

     

    - JSON 기반의 저장소 

     

     Elastic Search 는 검색엔진이지만 NOSQL 이라고 할수 있다. 데이터모델을 JSON 으로 사용하고 있기 때문에 데이터가공에 대한 접근성이 쉽다. 스키마자체를 미리 정의 하지 않고 JSON 문서를 넘겨주면 기본적으로 자동 인덱싱을 한다. 그리고 각 데이터도 값을 보고 타입을 자동 매핑해준다. 

     

    - Elastic Search 사용 명칭 

     Elastic Search 를 쓰기전에 용어에 대해서 확실히 인지 하는것이 좋은거 같다. 용어 자체가 기존 나처럼 RDBMS 를 많이 사용하던 사람들은 혼돈이 오기 쉬운 부분이며, 아래 내용은 Elastic Search 를 검색하면 무조건 정리되서 나오는 부분이다. 꼭 숙지하고 사용해야 겠다. 

     

     

    Elastic Search  RDBMS
    INDEX DATA BASE
    TYPE TABLE
    DOCUMENT ROW 
    FIELD COLUMN
    MAPPING SCHEMA

     

    출처: https://www.slideshare.net/deview/2d1elasticsearch

    그리고 Elastic Search 는 API 형태로 사용이 가능하다. 그래서 API 호출을 통해 실제 CRUD 기능을 수행할수 있다. ELS 에서 사용하는 사용 API 는 아래 표에 정리 해두었다. 이것도 필수로 인지 해야 한다. 

    Elastic Search  RDBMS
    GET SELECT
    PUT UPDATE
    POST INSERT
    DELETE DELETE

    - Multi-tenancy 

    Elastic Search 는 Multi_tenancy 를 지원 한다고 한다. Elastic Search 서버에 여러 인덱스를 저장하고 여러 인덱스의 데이틀 하나의 쿼리로 조회가 가능 하다고 한다. 

    curl -XGET http://localhost:9200/대상A,대상B/_search  

    - 확장/유연성

     Elastic Search는 플러그인을 이용해서 여러가지 기능을 사용이 가능하고 플러그인을 통해 모니터링, 통신 프로토콜 변경 등 여러가지 설정들을 쉽게 진행이 가능하다. 

     

    - 분산 저장소 & 클러스터 

     Elastic Search는 분산 검색 엔진이다. 그래서 키에 따라서 샤드가 구성 되는방식으로 데이터 분산이 된다. 각 샤드별로 인덱스가 구성이 되며 각 샤드별로 복제본을 가지고 있다. Elastic Search는 클러스터링을 지원해주고 있으며 노드중 마스터 노드가 존재하게 된다. 그리고 마스터 노드는 메타 데이터를 관리하게 되고 마스터 노드가 failover 될경우 같은 클러스터내에 노드중 하나가 마스터가 된다. ( 기본적으로 클러스터기능을 가지고있는 대부분의 솔루션들과 동일한 구조와 동작방식인것 같다. ) 그리고 특이한건 같이 네트워크 에 노드를 추가하면 추가된 노드가 멀티캐스트를 하여 자동으로 클러스를 찾아서 자신을 직접 추가한다는것이다. 같은 네트워크가 아니여도 설정만 해준다면 동일 동작이 가능하다. 

    개인적으로 보통 클러스터 구성시 노드를 관리툴로 설정해주거나 코디네이션 솔루션을 이용해서 적용 하는것만 봐서 그런지 뭔가 스마트해 보이는 기능이다. 

    출처 : https://github.com/exo-archives/exo-es-search

     ■ cluster : 최소 하나이상의 노드를 가지고 있는 노드들의 집합 클러스터 끼리는 데이터 공유가 불가함. 한서버에 여러개의 클러스터 구성도 가능

     ■ master node  :  인덱스 생성,삭제 / 클러스터 노드 추적 & 관리 / 데이터 입력시 샤당 위치 

     ■ data node : CRUD , cpu와 메모리 자원소모를 많이 하므로 마스터 노드와는 분리 되야 하며 모니터링이 필요함.

     ■ ingest node  : 사전처리 실행을 하는 역할 

     ■ coordination only node : data node와 master-eligible node의 일을 대신하며, 로드밸런서와 유사 역할 

     

     

    -인덱스 & 샤드 & 리플리카 

    index 는 RDBMS 에서 사용하는 index 와 같은 개념이라고한다. 그리고 샤드나 리플리카도 보통 일반적인 분산 시스템에서 사용하는 개념과 동일한것을 의미한다. 샤딩은 데이터를 분산해서 저장하는것을 말하며 index 자체를 여러 샤드로 쪼갠다. 보통 검색성능 향상을 위해 샤드 갯수를 조절한다고한다. 추후 필요에 의하여 변경해줄 값이다. 

    리플리카는 샤드의 한 형태라고 보면 될거 같다. 노드가 유실 될경우 데이터의 신뢰성을 보장하기위해 샤드들을 복제하는것을 의미 한다. 그렇기 때문에 복제시 복제된 내용은 다른 노드에 하는것이 좋다고 한다. 

     

    출처 : https://stackoverflow.com/questions/19838825/what-are-elasticsearch-indices#answer-19839840

    이제 Elastic Search를 시작 하려고 하고 기본 개념과 특성들부터 알아야 할것 같단 생각이 들었고 그에 맞는 내용들을 구글링하고 책보면서 자료를 모아서 부족하지만 간신히 정리 한거 같다. 실제 서비스를 구축해야하는 상황이라 최대한 빨리 테스트 서버를 구축하고 돌려볼 생각이다. 다음글부턴 설치, 설정 , 사용 관련된 글을 그리고 삽질하는 내용에 대해서 작성할거 같다. 잘 기록해서 두고두고 잘 써먹어야겠다.  

    반응형

    'NoSql > Elasticsearch' 카테고리의 다른 글

    Elaticsearch 시작  (0) 2019.09.19
Designed by Tistory.