Es clustering
Elasticsearch의 노드들은 클라이언트와의 통신을 위한 http 포트(9200~9299), 노드 간의 데이터 교환을 위한 tcp 포트 (9300~9399) 총 2개의 네트워크 통신을 활용한다.
한 서버에 여러개의 노드를 실행시키는 것도 가능하나 일반적으로 1개의 물리 서버마다 하나의 노드를 실행하는 것을 권장한다.
물리적인 구성과 상관 없이 여러 노드가 하나의 클러스터로 묶이기 위해서는 클러스터명 cluster.name
설정이 묶여질 노드들 모두 동일해야 함.
같은 서버나 네트워크망 내부에 있다 하더라도 cluster.name
이 동일하지 않으면 논리적으로 서로 다른 클러스터로 실행이 되고, 각각 별개의 시스템으로 인식된다.
디스커버리 (Discovery)
노드가 처음 실행 될 때 같은 서버 또는 discovery.seed_hosts: [ ]
에 설정된 네트워크 상의 다른 노드들을 찾아 하나의 클러스터로 바인딩 하는 과정을 디스커버리 라고 한다.
디스커버리는 다음과 같은 순서로 수행된다.
-
discovery.seed_hosts
설정에 있는 주소 순서대로 노드가 있는지 여부를 확인-
노드가 존재하는 경우 >
cluster.name
확인-
일치하는 경우 > 같은 클러스터로 바인딩 > 종료
-
일치하지 않는 경우 > 1로 돌아가서 다음 주소 확인 반복
-
-
노드가 존재하지 않는 경우 > 1로 돌아가서 다음 주소 확인 반복
-
-
주소가 끝날 때 까지 노드를 찾지 못한 경우
-
스스로 새로운 클러스터 시작
-
클러스터에 노드가 무수히 많아도 보통 discovery.seed_hosts
설정에는 처음에 탐색할 노드 3~5 개 정도만 설정 하면 큰 문제 없이 클러스터가 바인딩된다.
보통은 마스터 후보 노드들을 지정하게 되며 처음 탐색하는 대상 노드는 반드시 먼저 가동중이어야 한다.
Split brain
Elasticsearch clustering 구성 간 master-eligible 노드를 복수로 구성할 때 그 수는 반드시 홀수여야 한다.
그 이유는 master-eligible 노드가 짝수로 존재할 때 네트워크가 각 master-eligible 노드가 동률인 상황으로 분리된 경
각자 다른 클러스터로 구성하여 동작을 지속하다가 네트워크가 복구되면 데이터 무결성에 문제가 생기게 되는데 이러한 현상을 split brain이라고 한다.
'Elasticsearch' 카테고리의 다른 글
Elasticsearch replica shard (0) | 2020.12.11 |
---|---|
Elasticsearch shard (0) | 2020.12.11 |
Elasticsearch restart issue (0) | 2020.12.11 |
Elasticsearch clustering 구현 (0) | 2020.12.08 |