본문 바로가기

ELK스택

[Elasticsearch] 클러스터와 노드 바인딩

이번 글에서는 elasticsearch 클러스터 구성도와 다수의 노드가 차례대로 바인딩되는 과정을 보여드리려고 합니다.

elasticsearch 클러스터는 아래 링크를 참고하여 작성하였습니다.

https://esbook.kimjmin.net/03-cluster/3.1-cluster-settings

 

3.1 클러스터 구성

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍

esbook.kimjmin.net

 

  • 여러 서버에서 각 노드 실행

위와 같은 엘라스틱서치 구성은 실제 서버1개당 노드1개가 실행되고 있는 모습입니다.

엘라스틱 노드는 클라이언트 통신을 위한 http포트 9200~9299번을 사용하고 있고, 노드간의 데이터 통신을 위한 http포트 9300~9399번을 사용하고 있습니다. 일반적으로는 1개의 서버당 1개의 노드 실행을 권장한다고 합니다.

물론 하나의 서버에 2개의 노드를 실행하는 것도 가능합니다.

이런경우에는 노드1, 노드2는 9200, 9201포트 순으로 포트를 사용하게 되지만, 다른서버에 있는 노드3은 다시 9200번 포트를 사용하게 됩니다.

 

* 바인딩??

엘라스틱서치 노드가 같은 클러스터로 합쳐지는 것을 바인딩이라고 하는데 바인딩이 되려면 config파일안에 elasticsearch.yaml파일의 cluster.name을 맞춰주어야 합니다. (ex : cluster.name: "es-cluster-1")

cluster.name이 다르면 같은 서버에 있더라도 다른 시스템으로 간주하게 되어 노드간 통신이 불가능하게 됩니다.

 

  • 하나의 서버에서 각 노드 실행

위에서 말한 바인딩이라는 개념을 알아보기 위해 하나의 서버에서 node-1,2는 "es-cluster-1"라는 이름을 가진 같은 클러스터로 묶고 node-3은 "es-cluster-2"라는 이름을 가진 클러스터로 묶어서 실행해 보도록 하겠습니다.

1. node-1실행 (name : node - 1, cluster_name : cluster-1)

2. node-2실행 (name : node - 2, cluster_name : cluster-1)

curl localhost:9201번 명령어로 실행하였습니다. 짤렸네요 ㅠㅠ.

node-2노드를 실행 한 순간 node-1노드를 실행한 cmd창에 added {{node-2}} 로그가 찍히게 됩니다.

이것이 바로 위에서 설명한 바인딩이라는 개념입니다.

즉, node-2노드가 올라가면서 같은 클러스터네임을 가진 노드를 찾게되고, node-1노드와 node-2노드는 같은 클러스터네임을 가지고 있기 때문에 하나의 클러스터로 바인딩이 된 상황입니다.

3. node-1에 데이터 넣고 확인

그렇다면 바인딩이 되었다는 것을 확인하기 위해 node-1에 데이터를 넣고 조회를 해보도록 하겠습니다.

node-1노드는 9200번 포트를 사용하기 때문에 정상적으로 조회가 되는 것을 확인 할 수 있습니다.

node-2노드는 9201번 포트를 사용하지만, 같은 클러스터 네임을 사용하기때문에 하나의 클러스터로 묶여있는 상황입니다. 결론적으로 데이터를 가져 올 수 있다는 의미입니다.

 

4. node-3실행 (name : node - 3, cluster_name : cluster-2)

curl localhost:9202번 명령어로 실행하였습니다. 짤렸네요 ㅠㅠ.

node-1노드와 node-2노드는 클러스터네임을 cluster-1로 맞추어 바인딩이 되었지만, node-3노드는 클러스터네임을 cluster-2으로 맞추어 바인딩이 되지 않았습니다.

데이터는 cluster-1네임을 가진 node-1에 저장되어있기 때문에 cluster-2네임을 가진 node-3노드는 데이터에 접근 할 수 없는 결과가 나오고 있습니다.

 

디스커버리

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