기본 콘텐츠로 건너뛰기

[Elasticsearch] Elasticsearch Physical Layout - Cluster, Node, Shard, Replica

물리적 레이아웃


엘라스틱서치의 물리적 레이아웃에 해당하는 샤드(Shard)와 노드(node), 클러스터(Cluster)를 반드시 이해하고 넘어 가야한다. 이유는 실제 엘라스틱서치를 이용하여 빅데이터 처리, 검색 시스템을 운영하면서 엘라스틱서치 서버 확장이 필요한 시기가 올 수 있기 때문이다.

클러스터 (Cluster)

클러스터는 노드의 모임, 엘라스틱서치의 모임이라는 생각일 가지고 접근한다면 좀 더 이해하기 쉬운 것 같다. 각 노드는 데이터를 나눠 저장하고 있으며 해당 노드들을 하나로 묶어 주는 개념이다.
클러스터에 노드를 추가하는 방법으로 확장하는 것을 수평적 확장(Horizontal scaling)이라고 부르며 이 경우 각 노드는 각자의 역할을 수행하고 모든 노드가 일을 공유하여 처리하기 때문에 부가적인 성능의 이득을 얻는다.

노드 (Node)

간단히 말하면 노드는 엘라스틱서치를 실행하는 프로세스라고 말할 수 있으며, n개의 샤드로 구성된다. 하나의 서버 내부에서 엘라스틱서치를 여러 번 실행하면 하나의 서버 안에 n개의 노드를 가질 수 있다. 만약 또 다른 서버에 엘라스틱서치를 실행했다면 그 또한 노드가 생성되는 것이고 n개의 노드들을 하나로 묶기 위해서는 클러스터(Cluster)를 이용한다.
클러스터로 묶인 노드들은 각자의 역할을 수행을 할 수 있다. 각 노드에 역할을 주기 위해서는 config/elasticsearch.yml 에서 간단하게 수정이 가능하다.

노드의 역할

  1. 데이터 노드 (Data node) - node.data : true
    • 데이터가 저장되는 노드, 색인 및 검색 작업이 수행되는 노드이다.
  2. 마스터 노드 (Master node) - node.master : true
    • 클러스터를 관리하는 노드, 큰 구성에서는 n개의 마스터 노드를 생성하여 관리한다.
  3. 클라이언트 노드 (Client node) - http.enabled : true
    • 네트워크 부하를 담당하며 각 노드의 앞단에서 로드 밸런서의 역할을 수행한다.
노드의 역할에 따라 옵션을 변경해주면 되고 하나의 노드가 3가지 역할을 모두 수행할 수도 있다. 단일 노드 구성의 경우 그 만큼 위험부담이 따른다.
Elasticsearch에서 색인 및 검색을 위해서 대부분 Elastic에서 제공하는 Java API와 RESTful API를 사용한다. 이때 주의 할 점은 Java API는 Transport 모듈로 통신을 하기 때문에 데이터 노드와 통신을 하며,RESTful API는 HTTP 모듈로 통신하기 때문에 클라이언트 노드와 통신을 한다.

샤드(Shard) / 리플리카(Replica)

하나의 샤드는 하나의 루씬 색인이다. 루씬 색인이란 역 색인을 포함한 파일들의 모음이라고 할 수있다. 리플리카는 샤드의 복제본이다.
엘라스틱서치에서 색인을 생성하는 경우 기본 설정으로 샤드 5개와 샤드당 리플리카 1개가 생성 된다. 즉 1개의 색인을 생성하면 10개의 샤드가 생성되는 것이다.
색인을 생성하는 시점에서 샤드 수를 지정할 수 있다. 하지만 색인에 데이터가 색인된 후에는 샤드의 수를 수정할 수 없다. 그에 반해 리플리카의 추가/제거는 항상 가능하다.

참고 자료

댓글

이 블로그의 인기 게시물

[Github] Windows 환경에서 Git 자격 증명 변경 (자격 증명 변경)

오늘 Git 계정을 새로 생성하여 Git config 사용자 정보를 변경후 푸쉬하는 도중 에러가 발생하여 상당 시간 삽질한게 있어 내용 기록합니다. 새로운 계정에서 repository 생성 후 VS Code를 사용하여 git push를 하려고하니 사용자 때문에 에러가 발생하더군요. 에러 내용은 아래처럼 발생했습니다. # git push remote: Permission to yunseul-light/elasticsearch-study.git denied to Maruhan. fatal: unable to access 'https://github.com/yunseul-light/elasticsearch-study.git/': The requested URL returned error: 403 repository에 해당하는 폴더 .git 파일 내용과 git config 를 이용한 사용자 변경 등 여러가지를 해봤지만 결국 같은 에러가 발생해습니다. 해결 방안 Windows 환경에서 git 사용자 계정을 변경하기 위해서는 위 스크린샷과 같이 제어판에서 편집을 해야합니다.  1. 제어판 - 사용자 계정 - 자격 증명 관리자 2. Windows 자격 증명 3. 일반 자격 증명 4. git 관련 자격 증명 편집 다들 알고있는 내용지만 혹시 저 같은 실수 하시는 분들을 위해 혹시 몰라 남겨둡니다. P.S 위에서 언급했던 git config 관련 내용 추가합니다. git config를 이용한 계정 설정 # git config --global user.name "YunSeul" # git config --global user.email "yunseul.light@gmail.com" config를 이용한 user 설정 후 commit 하는 경우 commit을 시도하는 사용자에 대한 정보가 위에서

[Logstash] Logstash, Logstash-plugin 설치

Logstash Logstash는 기본적으로 다양한 소스를 효율적으로 수집을 할 수 있게 도와주는 오픈소스입니다. 입력, 필터, 출력 3가지 단계가 있으며 각 단계별로 다양한 플러그인이 있어 다양한 서비스 사이에서 사용될 수 있죠. Logstash 다운로드 최신 버전 다운로드 :  https://www.elastic.co/kr/downloads/logstash 지난 버전 다운로드 (Past Releases) :  https://www.elastic.co/kr/downloads/past-releases 링크로 이동하면 logstash를 받을 수 있으며 저는 logstash-5.5.0 버전을 사용하여 글을 작성중입니다. 아래 설치 및 실행관련 부분은 리눅스 환경을 기준으로 적었으며, 윈도우 환경에서도 동일하게 진행하면 문제 없이 사용가능합니다. Getting Started with Logstash logstash 설치는 정말 간답합니다. 위에서 다운로드 받은 tar파일을 원하는 서버에 다운받아 압축을 풀면 모든 준비는 끝났습니다. 다운로드 및 설치 요약 # wegt 'https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.tar.gz' # tar -xvf ./logstash-5.5.0.tar.gz # cd ./logstash-5.5.0 # ls -al 합계 228 drwxr-xr-x. 12 root root 4096 2017-07-12 09:30 . dr-xr-x---. 35 root root 4096 2017-08-17 09:50 .. -rw-r--r--. 1 root root 111573 2017-07-01 08:51 CHANGELOG.md -rw-r--r--. 1 root root 2249 2017-07-01 08:51 CONTRIBUTORS -rw-r--r--. 1 root root 3874 2017-07-12 11:14 Gem

[Elasticsearch] Elasticsearch Mapping 설정과 2.x, 5.x버전별 차이점 정리

Mappings Elasticsearch에서 사용하는 Mapping를 대해 알아보도록 하겠습니다. 가장 기본적인 내용이면서 가장 중요한 내용입니다. 초기 Index 생성시 Mappings을 각 Field 용도에 맞춰 설계하는 것이 가장 중요합니다. Index 생성 시 Mappings를 설정하고 데이터를 색인하게 되면 그 이후로 Mppaings를 변경할 수 없습니다. 단, 추가는 언제든지 가능합니다. 그렇다고 절대로 Mapping를 변경할 수 없는 것은 아닙니다. Alias를 이용하여 백그라운드에서 데이터를 재인덱싱하여 변경하는 방법은 있지만, 이 내용은 여기서 다루지 않겠습니다. 자세한 내용이 궁금하신 분들은 아래 링크를 통해 확인하세요. https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping.html 기본적으로 Mapping를 설정하지 않아도 Elasticsearch에서 자동으로 설정을 해주지만 조금 더 효율적으로 사용하기 위해 자신이 원하는 Mapping를 설정하는 것이 가장 좋은 방법입니다. 현재 글을 쓰는 시점에는 Elasticsearch 5.5.2 버전이 릴리즈 된 상태입니다. Google에 Mapping 관련 내용 검색 시 대부분의 글들은 2.x 버전 기준의 글이 많아서 5.x 버전 기준으로 작성 후 2.x버전에서 변경된 내용도 함께 정리하겠습니다. Elasticsearch Document - Mapping 의 기본 분류 Field datatypes Meta-Fields Mapping parameters Dynamic Mapping Field datatypes string text and keyword Numeric datatypes long, integer, short, byte, double, float, half_float, scaled_float Date datatype date Boolean datatyp