엘라스틱서치의 용어 및 클러스터/노드 관계
- Coding/Elasticsearch
- 2020. 12. 20.
엘라스틱서치의 용어
- 1) 인덱스
엘라스틱서치는 하나의 인덱스에 하나의 타입만이 구성 가능하다. 인덱스(index)는 데이터 저장 공간으로, 하나의 노드에는 여러 개의 인덱스를 생성할 수 있다. 하나의 인덱스는 여러 노드에 분산 저장되어 관리된다.
엘라스틱서치의 인덱스 생성시 기본 구조
5개의 프라이머리(Primary) 샤드 + 1개의 레플리카(Replica) 샤드
- 2) 샤드
색인된 문서는 하나의 인덱스에 저장되고, 인덱스 내부에 색인된 데이터는 여러개의 파티션으로 나뉘어 구성된다. 이때의 파티션을 '샤드(Shard)'라고 한다.
- 3) 타입
인덱스의 논리적 구조이다. 데이터베이스에서 이와 같은 개념으로는 테이블이 있다.
- 4) 문서
데이터가 저장되는 최소 단위이다. 데이터베이스에서 이와 같은 개념으로는 행이 있다. 하나의 문서는 다수의 필드로 구성되어있고, 각 필드는 데이터 타입(Data Type)으로 정의되어있다. 문서는 중첩 구조가 가능하여 계층적인 구조를 이룰 수 있다.
- 5) 필드
엘라스틱서치는 데이터베이스의 컬럼보다 좀더 동적인 데이터 타입을 갖는다. 이러한 문서를 구성하기 위한 속성을 필드라고 한다. 필드는 다수의 데이터타입을 가질 수 있다.
- 6) 매핑
문서의 필드와 필드의 데이터타입을 정의하고 그에 따른 색인 방법을 정의하는 프로세스다.
엘라스틱서치의 노드
하나의 클러스터는 여러개의 노드로 구성되어있다. 엘라스틱서치는 분산 처리를 위해 여러개의 노드들을 조합해서 클러스터를 구성하고, 해당 클러스터가 모든 노드의 검색과 색인 작업을 관리한다.
- 1) 마스터노드
하나의 클러스터가 구성하는 여러개의 노드 중 단 1개만이 마스터 노드로 선출되어 동작한다. 클러스터를 관리하고, 노드 추가/제거 같은 클러스터의 전반적인 관리를 담당하기 때문에 속도가 빠른 노드를 마스터 노드로 선정해야 한다.
- 2) 데이터 노드
데이터가 실제로 저장되는 공간인 샤드가 배치되는 노드이다. 실질적인 데이터를 저장하고, 검색과 통계 같은 데이터 관련 작업을 수행한다.
- 3) 코디네이팅 노드
사용자의 요청만 받아서 처리한다. 들어온 요청을 단순히 라운드로빈 방식(시간단위)으로 분산시켜주는 노드이다.
- 4) 인제스트 노드
문서의 전처리 작업을 담당하고 인덱스 생성 전 문서의 형식을 다양하게 변경할 수 있다.
클러스터와 노드의 관계
엘라스틱서치에서 하나의 클러스터는 여러개의 노드가 존재하고, 하나의 노드에는 여러개의 인덱스가 존재한다. 인덱스에 저장될 데이터는 여러개의 샤드에 분산 저장된다. 참고로, 샤드의 개수는 인덱스를 생성할때만 설정할 수 있다.
클러스터 A
노드 A, 노드 B
인덱스 A, 인덱스 B
클러스터 A에는 노드 A, 노드 B가 존재한다.
노드 A에는 인덱스A, 인덱스 B가 존재한다.
노드 B에는 인덱스A, 인덱스 B가 존재한다.
노드 A의 인덱스 A에는 샤드1, 샤드 2가 존재한다.
노드 A의 인덱스 B에는 샤드3이 존재한다.
노드 B의 인덱스 A에는 샤드3, 샤드4가 존재한다.
노드 B의 인덱스 B에는 샤드1, 샤드2가 존재한다.
위 상황을 보면, 인덱스 A의 여러개의 샤드들이 노드 A, 노드 B에 분산 저장되어있다. 엘라스틱서치의 클러스터는 인덱스의 문서를 조회할 때 마스터 노드를 통해 2개의 노드를 모두 조회하여 각 데이터를 취합하여 결과를 하나로 합쳐서 제공한다.
샤드
샤드는 분산된 데이터에 따라 순차적인 번호를 가진다. 위에서 엘라스틱서치는 기본 구성이 프라이머리 샤드 5개 + 레플리카 샤드 1개라고 하였다. 여기서 레플리카 샤드는 프라이머리 샤드의 복제본이다. 엘라스틱서치에 장애가 발생하면 레플리카 샤드를 프라이머리 샤드로 승격 시키거나 또는 데이터를 재분배함으로써 서비스 중단 없는 복구를 실행한다.
인덱스에 샤드를 설정하면 설정한 개수 만큼 노드에 분산되어 저장소를 만든다.
3개의 노드와 5개의 샤드가 구성되도록 설정했을 경우
노드 A : 샤드 2개
노드 B : 샤드 2개
노드 C : 샤드 1개
노드 A, B, C 중에 노드 A가 다운되었을 경우
노드 A가 다운되어 노드 A를 조회할 수 없을 경우 데이터 손실이 발생할 수 있겠지만, 엘라스틱서치는 이를 미리 방지하기위해 프라이머리 샤드의 복제본인 레플리카 샤드를 두는 것이다.
노드 A : 샤드 2개 + 노드 B의 레플리카 샤드
노드 B : 샤드 2개 + 노드 C의 레플리카 샤드
노드 C : 샤드 1개 + 노드 A의 레플리카 샤드
이렇게 구성함으로써 노드 A가 다운되었을 경우 노드 C에 있는 노드 A의 레플리카 샤드를 프라이머리 샤드로 승격시키거나 데이터를 재분배하는 것이다.
'Coding > Elasticsearch' 카테고리의 다른 글
엘라스틱서치 검색 방법 (URI, Request Body) (1) | 2021.01.20 |
---|---|
엘라스틱서치의 매핑 (0) | 2020.12.20 |
엘라스틱서치의 기본개념 및 장점/단점 (3) | 2020.12.20 |