ElasticSearch를 구성하는 주요 구성요소로 어떤 것이 있는지 다양한 개념들을 먼저 알아보자
[데이터(Data)]
ElasticSearch의 Data는 "인덱스","타입","문서","필드" 구조로 구성된다.
인덱스(Index)
데이터 저장 공간이다.
하나의 인덱스는 하나의 타입만 가지며, 하나의 물리적인 노드에 여러 개의 논리적인 인덱스를 생성할 수 있다.
검색시 인덱스 이름으로 문서 데이터를 검색하며, 여러 개의 인덱스를 동기에 검색하는것도 가능하다.
(인덱스 이름은 모두 소문자여야 하며, 추가,수정,삭제,검색은 RESTful API로 수행가능하다. 만약 인덱스가 없는데 데이터가 추가되면? 인덱스가 자동생성된다)
ES를 분산 환경으로 구성하면, 하나의 인덱스가 여러 노드에 분산 저장되어 관리된다.
따라서, 분산 처리에 따른 여러 이점을 누릴 수 있다.
샤드(Shard)
인덱스 내부에 색인된 데이터를 여러 개의 파티션으로 나뉘어 구성되는데, 이를 샤드라고 부른다.
ES는 다수의 샤드로 문서를 분산하고 있어 데이터 손실 위험을 최소화 할 수 있다.
Default 인덱스 생성시 5개의 Primary 샤드와 1개의 Replica 샤드로 세트를 생성한다.
(샤드 수는 변경 가능하다)
타입(Type)
인덱스의 논리적 구조를 의미하며, 인덱스당 하나의 타입만 사용할 수 있다.
문서(Document)
Document는 ES에서 데이터가 저장되는 최소단위 이다.
기본적으로 JSON 형태로 데이터가 저장된다.
하나의 문서는 다수의 필드로 구성되는데, 각 필드는 데이터의 형태에 따라 용도에 맞는 데이터 타입을 정의해야 한다.
필드(Field)
Field는 문서를 구성하기 위한 속성이라고 할 수 있다.
하나의 필드는 목적에 따라 다수의 데이터 타입을 가질 수 있다.
Ex) 영화 정보를 담아둔 문서에 제목 필드가 그렇다. 제목을 검색할때, 매칭 검색 or 초성을 이용한 검색이 모두 지원되도록 제목 필드는 2개의 데이터 타입을 가질 수 있다.
매핑(Mapping)
Mapping은 문서의 필드와 필드의 속성을 정의하고 그에 따른 색인 방법을 정의하는 프로세스이다.
[노드(Node)]
노드의 종류
클러스터는 물리적인 노드 인스턴스 들의 모임이라 할 수 있다.
ES의 경우 다수의 서버에 다양한 형태의 노드를 분산에서 조합할 수 있다. 그렇기 때문에 대용량 데이터를 처리 할 수 있다.
기본적으로 마스터 노드가 전체적인 클러스터를 관리하고, 데이터 노드가 실제 데이터를 관리한다.
마스터노드(Master Node) - 클러스터를 관리한다. - 인덱스를 생성 및 삭제 - ex) 노드 추가와 제거같은 클러스터 관리 |
데이터노드(Data Node) - 실제 데이터를 저장한다. - 검색과 통계 같은 데이터 관련 작업 수행 |
코디네이팅 노드(Coordinating Node) - 사용자 요청만 받아서 처리한다. - 클러스터 관련은 마스터노드에게 전달, 데이터 관련은 데이터노드에 전달 |
인제스트 노드(Ingrest Node) - 문서의 전처리 작업 담당 - 인덱스 생성 전 문서의 형식을 다양하게 변경 할 수 있다. |
노드별 주의사항
마스터노드 : 다수의 마스터 노드를 설정 할 수 있지만, 결과적으로 1개의 노드만 마스터 노드로 선출
데이터노드 : 색인 작업은 CPU,MEM,Disk등 리소스를 많이 소모하므로, 리소스 모니터링이 필요하다.
코디네이팅 노드 : 들어온 요청을 단순 분산시켜주는 노드
인제스트 : 데이터 포멧 변경 등 가능.
1개 클러스터, 2개 노드
ES 클러스터는 인덱스 문서를 조회할 때, 마스터 노드를 통해 2개의 노드를 모두 조회해서 데이터를 취합한 후 결과를 하나로 합쳐서 제공한다.
ES는 장애시 Replica 샤드를 통해 복구한다.
따라서, 그림처럼 Primary 샤드와 Replica 샤드를 서로 다른 노드에 배치한다.
그로인해, 1개의 물리적인 노드가 죽더라도 나머지 2개가 전체 데이터를 복수 할 수 있다.
그리고 장애가 발생하면, 마스터노드는 데이터를 재분배하거나 or Replica 샤드를 Primary 샤드로 승격하여 서비스 중단 없는 복구가 가능해진다.
책 : 엘라스틱서치 실무 가이드 (위키북스)
'IT Knowledge > ElasticSearch' 카테고리의 다른 글
Elasticsearch 안정적인 클러스터 운영 노하우 (32) | 2024.08.06 |
---|---|
ElasticSearch 대용량 처리를 위한 시스템 최적화. (0) | 2024.08.06 |
ElasticSearch Cluster 구성 고려사항 (0) | 2024.05.28 |
ElasticSearch 인덱스(Index)란? (0) | 2024.05.28 |
ElasticSearch 샤드의 최적화 (0) | 2024.05.28 |
댓글