본문 바로가기

Elasticsearch (ELK)/Elasticsearch

3-1. Elasticsearch 시스템 구조 - 클러스터 구성

여러 서버에 하나의 클러스터로 실행

일반적으로 1개의 물리 서버마다 하나의 노드를 실행하는것을 권장한다.

 

각 서버마다 하나의 노드를 돌리는 클러스터
하나의 서버에 여러개의 노드를 돌리는 클러스터

물리적인 구성과 상관 없이 여러 노드가 하나의 클러스터로 묶이기 위해서는 클러스터명 cluster.name 설정이 묶여질 노드들 모두 동일해야 합니다. 같은 서버나 네트워크망 내부에 있다 하더라도 cluster.name이 동일하지 않으면 논리적으로 서로 다른 클러스터로 실행이 되고, 각각 별개의 시스템으로 인식이 됩니다.

 

하나의 서버에서 여러 클러스터 실행 

더보기

참고로 클러스터 상태를 보는 명령어는 curl -X GET http://192.168.179.81:9200/_cluster/health?pretty

 

elasticsearch.yml를 수정하여 변경

#각 상황에 맞게 input 변경
cluster.name: es-cluster-1
node.name: "node-1"

Command를 통해 실행

$ bin/elasticsearch -Ecluster.name=es-cluster-1 -Enode.name=node-1
$ bin/elasticsearch -Ecluster.name=es-cluster-1 -Enode.name=node-2
$ bin/elasticsearch -Ecluster.name=es-cluster-2 -Enode.name=node-3

 

이와같이 실행을 한다면 node-1과 node-2는 같은 클러스터 이므로 데이터 교환이 일어난다.

예를들어 node-1으로 입력된 데이터는 node-2에서도 읽을 수 있다.

하지만 node-3는 다른 클러스터를 가지고 있으므로 node-1 또는 node-2에 입력된 데이터를 읽을 수 없다.

 

디스커버리 

노드가 처음 실행 될 때 같은 서버, 또는 discovery.seed_hosts: [ ] 에 설정된 네트워크 상의 다른 노드들을 찾아 하나의 클러스터로 바인딩 하는 과정을 디스커버리 라고 합니다. 디스커버리는 다음과 같은 순서로 이루어집니다.

  1. discovery.seed_hosts 설정에 있는 주소 순서대로 노드가 있는지 여부를 확인

    • 노드가 존재하는 경우 > cluster.name 확인

      • 일치하는 경우 > 같은 클러스터로 바인딩 > 종료

      • 일치하지 않는 경우 > 1로 돌아가서 다음 주소 확인 반복

    • 노드가 존재하지 않는 경우 > 1로 돌아가서 다음 주소 확인 반복

  2. 주소가 끝날 때 까지 노드를 찾지 못한 경우

    • 스스로 새로운 클러스터 시작