[2021.06.15] 인턴 +106 elasticsearch Cluster & Node Binding Concept
https://esbook.kimjmin.net/03-cluster/3.1-cluster-settings-
-> 해당 위의 링크의 내용으로 게시글을 작성하였다.(이미지도 포함)
해당 게시글에서는, elasticsearch에서 아래와 같은 방법들을 알아보기위해 작성하였다.
* 여러 서버에서 각 노드 실행하는 방법
* 하나의 서버에서 여러 노드를 실행하는 방법
<여러 서버에 하나의 클러스터로 실행>
-> Elasticsearch의 노드들은 클라이언트와의 통신을 위한 http 포트(9200~9299), 노드 간의 데이터 교환을 위한 tcp 포트 (9300~9399) 총 2개의 네트워크 통신을 열어둠
* 일반적으로 1개의 물리 서버마다 하나의 노드를 실행하는 것을 권장
<하나의 물리적인 서버 안에서 여러 개의 노드를 실행>
-> 서버1에는 두개의 노드가 있기 때문에 서버 1의 두번째 노드는 실행되는 http, tcp 포트가 각각 9201, 9301 로 실행
* 물리적인 구성과 상관 없이 여러 노드가 하나의 클러스터로 묶이기 위해서는 클러스터명 cluster.name 설정이 묶여질 노드들 모두 동일해야함
* 노드를 모두 동일하게 설정해야 되는 이유는?
-> 같은 서버나 네트워크망 내부에 있다 하더라도 cluster.name이 동일하지 않으면 논리적으로 서로 다른 클러스터로 실행 및 별개의 시스템으로 인식하기 때문에
* elasticsearch node가 서로 합쳐지는 것을 바인딩(binding) == 같은 클러스터가 합쳐지는 것을 바인딩(binding)
* 같은 클러스터로 바인딩 되기 위해선, 클러스터 이름이 같아야함.
<하나의 물리 서버에서 서로 다른 두 개의 클러스터 실행>
-> es-cluster-1 , es-cluster-2
일단 노드를 3개 준비해야함(사진 X, 말로 풀어다 씀)
즉, elasticsearch를 총 3번 깔아야함
1. 첫 번째 elasticsearch를 설치 한 후, 폴더명을 node-1로 설정
-> elasticsearch.yml에서 cluster.name: "elk-cluster-1", node.name: "node-1" 로 설정
2. 두 번째 elasticsearch를 설치 한 후, 폴더명을 node-2로 설정
-> elasticsearch.yml에서 cluster.name: "elk-cluster-1", node.name: "node-2" 로 설정
3. 세 번째 elasticsearch를 설치 한 후, 폴더명을 node-3로 설정
-> elasticsearch.yml에서 cluster.name: "elk-cluster-2", node.name: "node-3" 로 설정
* 이렇게 했을 때, node-1에 값을 넣으면, node-1과 node-2가 바인딩 되어 있기 때문에 정보를 공유함
* 하지만, node-1에 넣었던 값을 출력하기 위해 node-3에서 시도하면 출력되지 않음(독립적=클러스터이름이 다르기 때문)
* 디스커버리란?
-> 노드가 서로 다른 노드를 찾아가면서, 같이 한 클러스터로 구성되는 과정
<디스커버리 하는 과정을 그림으로 표현>
* discovery.seed_hosts 설정에는 처음에 탐색할 노드 3~5 개 정도만 설정 하면 큰 문제 없이 클러스터가 바인딩 됨
* 보통은 마스터 후보 노드들을 지정하게 되며, 처음 탐색하는 대상 노드는 반드시 먼저 가동중이어야 함
댓글