-
Elasticsearch : 시스템 구조 (2/2)Elasticsearch 2021. 4. 13. 16:27728x90
Cluster
1.
Elasticsearch는 대용량 데이터의 증가를 처리하기 위한 scale-out과 데이터의 무결성을 유지하기 위한 클러스터링 기능을 지원한다.
2.
여러 개의 노드를 하나의 물리 서버에 구성하는 것도 가능하다.
하지만 일반적으로, 물리 서버 1개 당 노드 1개를 실행하는 것을 권장한다.
3.
물리적인 구성을 떠나서, 여러 개의 노드를 하나의 클러스터로 묶을 때에는, 클러스터 이름을 지정하는 데에 주의해야 한다.
클러스터는 '이름'으로 구분되기 때문이다.
Discovery
1.
노드가 처음 실행 될 때, 같은 서버의 다른 노드들을 찾아, 하나의 클러스터로 바인딩하는 과정을 디스커버리라고 한다.
2.
이 때, discovery.seed_host : [] 배열을 순회하며 바인딩할 노드들을 찾는다.
Index & Shards
1.
DB에서의 record 개념은 elasticsearch에서 document라고 한다.
document의 집합을 index라고 한다.
** index라는 용어는 많은 개발 분야에서 사용되고, 때문에 의미가 모호해질 수 있으므로 다음과 같이 정의한다.
** 데이터를 elasticsearch에 저장하는 행위 : 색인
** document의 집합 : 인덱스(index)
2.
인덱스는 샤드(shard)라는 단위로 분리되고 각 노드에 분산되어 저장, 관리된다.
3.
샤드는 루씬의 단일 검색 인스턴스이다.
Primary Sharad & Replica
1.
인덱스를 생성할 때, 별도의 추가 과정을 거치지 않았다면, 1개의 인덱스는 1개의 샤드로 구성된다.
(단, 6.xx 이하의 버전에서는 1개의 인덱스는 5개의 샤드로 구성된다)
2.
처음 생성된 샤드를 프라이머리 샤드(primary shard)라고 한다.
샤드의 복제본을 리플리카(replica)라고 한다.
만약 프라이머리 샤드가 유실되었다면, 새로운 프라이머리 샤드가 생성되는 것이 아니라, 기존의 다른 샤드가 프라이머리 샤드로 승격되고, 다른 노드에 의해 새로운 복제본이 생성된다.
3.
샤드 A로부터 생성된 리플리카 A는 동일한 데이터를 가지고 있고, 반드시 서로 다른 노드에 저장된다.
4.
elasticsearch에서는 아무리 작은 클러스터라도, 데이터의 무결성과 가용성을 위해 최소 3개의 노드를 구성하는 것을 권장한다고 한다.
5.
샤드의 개수, 프라이머리 샤드의 개수는 색인 이전에 설정이 가능하다.
리플리카의 개수는 색인 이후에도 수정 가능하다.
Master Node
1.
클러스터는 1개 이상의 노드로 구성된다.
이 중, 마스터 노드(master node)는 클러스터 상태 정보를 관리하는 역할을 한다.
2.
클러스터 마다 1개의 마스터 노드가 존재한다.
마스터 노드가 없다면, 클러스터는 운영이 불가하다.
3.
대용량 데이터의 경우, 클러스터가 커져 노드와 샤드의 개수가 많아지게 되고, 이 때 마스터 노드는 이 모든 것을 관리하는 데에 부담이 될 수 있다.
이러할 경우, 마스터 노드를 설정하지 않고, 마스터 후보 노드(master eligible node)를 여러 개 설정하여 성능 향상을 기대할 수 있다.
Data Node
1.
데이터 노드(data node)는 실제로 색인된 데이터를 저장하고 있는 노드이다.
2.
마스터 노드는 클러스터 상태 정보를 관리함과 동시에 데이터 노드처럼 데이터를 저장할 수 있다.
만약, 마스터 노드와 데이터 노드의 역할을 완벽하게 분리하기 위해서는, yml파일을 수정하여 마스터 노드에는 데이터가 저장되지 않게하고, 데이터 노드에는 마스터 후보 노드로 지정되지 않게 한다.
이 경우, 마스터 노드는 관리에 상태 집중할 수 있고, 데이터 노드는 데이터 관리에 집중할 수 있게 된다.
Split Brain
1.
마스터 노드가 유실되면 클러스터의 운영이 중단되기 때문에, 이를 위한 fail-over 작업이 필수이다.
2.
위와 같이, 어떠한 이유로 인해 마스터 후보 노드인 node-1과 node-2가 서로 분리될 수 있고, 분리된 상태에서 데이터의 저장, 변경, 삭제가 이뤄진 후, 다시 하나의 노드로 합쳐졌을 때 데이터의 정합성 문제가 발생할 수 있다.
이러한 문제를 Split Brain이라고 한다.
3.
Split Brain을 해결하기 위해, 마스터 후보 노드들을 3개 이상의 홀수 개로 구성하여야 한다.
>> discovery.zen.minimum_master_nodes : (master_eligible_nodes / 2) + 1
4. 홀수 개인 이유 ?
- 위 사진과 같이 노드가 split된 후 다시 합쳐졌을 때, 데이터의 불일치가 발생된 경우, 쉽게 말해 투표가 진행된다.
- 투표를 통해 어느 한쪽으로 결정을 해야 하는데, 홀수 개여야만 결론이 나기 때문에, 항상 홀수 개로 구성해야 한다.
728x90'Elasticsearch' 카테고리의 다른 글
Elasticsearch : 데이터 색인과 텍스트 분석 (0) 2021.04.13 Elasticsearch : 검색 (0) 2021.04.13 Elasticsearch : 데이터 처리 (0) 2021.04.13 Elasticsearch : 시스템 구조 (1/2) (0) 2021.04.13 Elasticsearch : 시작하기 (0) 2021.04.02