영우
엘라스틱서치란 뭘까? 본문
엘라스틱서치란 뭘까?
- ELK스택의 중심에 있는 분산된 검색 및 분석엔진입니다 ELK스택은 아래에서 다시 설명하겠습니다.
- 모든 유형의 데이터에 대해 거의 실시간 검색 및 분석을 제공합니다. 구조화된 데이터이든, 구조화되지 않은 데이터이든 빠른 검색을 지원하는 방향으로 효율적으로 저장하고 인덱싱합니다.
- 단순한 데이터 검색을 넘어 데이터의 추세와 패턴을 발견할 수 있습니다.
주요 사용사례
- 웹사이트 검색
- 로깅 및 로그분석
- 인프라 지표 및 컨테이너 모니터링
엘라스틱서치로 할 수 있는일
- 실시간으로 1초이내에 인덱스가 생성되고 매우 빠른 전문검색을 할 수 있습니다.
- REST API로 쉽게 데이터 인덱싱과 검색이 가능합니다.
- 실시간으로 데이터를 분석하고 시각화 할 수 있습니다.
- 문서를 분산해 저장합니다. 데이터가 증가함에따라 수평확장할 수 있습니다.
ELK 스택
- 어떤방식으로 동작하나요?
- Logstash는 데이터를 수집 및 변환하고 올바른 노드에게 전달합니다.
- 엘라스틱서치는 수집된 데이터를 인덱싱하고 분석하고 검색합니다.
- Kibana는 분석결과를 시각화 할 수 있습니다.
- Logstash
- 사용자가 데이터 소스나 유형에 관계없이 데이터를 쉽게 수집할 수 있도록 도와줍니다.
- 사전 구축된 필터로 사용자가 일일이 정의하지 않고도 쉽게 쿼리할 수 있게함
- 비정형 데이터를 쉽게 수집가능하게 도와줌
- 엘라스틱서치
- 데이터를 분석하고 저장합니다.
- 빠른 검색을 지원합니다.
- Kibana
- 로그, 애플리케이션 모니터링 같은 사례에 사용되는 데이터 시각화 및 탐색도구입니다.
- 히스토그램, 선형 그래프, 원형 차트같은 사용하기 쉬운 기능을 제공합니다.
- 대시보드와 보고서를 쉽게 설정하고 다른사람과 공유가능합니다.
inverted index
- 엘라스틱서치는 데이터를 저장할때 의미있는 단어를 추출해 해당 단어들로 inverted index를 생성합니다.
- inverted index란 단어와 해당 단어를 사용하는 document를 매핑하는 index입니다. 특정 단어를 검색했을때 이를 사용하는 문서를 빠르게 찾을 수 있습니다.
- 읽는다, 읽었다, 읽다 처럼 같은 의미가 같은 말을 형태소 분석을 통해 ‘읽다’로 통일해 인덱싱합니다.
엘라스틱서치 용어정리
- document
- 실제 데이터를 저장하는 단위입니다.
- JSON형태입니다.
- RDB의 레코드와 비슷합니다
- shard
- 인덱싱할때 node 내부에 논리적으로 데이터 저장공간을 나누어 shard를 만듭니다. 그리고 나누어진 공간에 동시에 데이터를 처리할 수 있습니다.
- shard가 기본값인 5개라면 하나의 index에서 5개의 shard가 생깁니다.
- node가 두개라면 두개의 node에 나누어 1번 node에 3개의 shard, 2번 node에 2개의 shard 처럼 나누어서 생성됩니다.
- index
- 서로 관련되어있는 document를 저장하는 공간입니다.
- 물리적으로 한공간에 있지 않고 논리적으로 모아놓습니다.
- index내부에 inverted index 자료구조를 저장합니다.
- node
- node 1개는 엘라스틱 서비스가 설치되어있는 PC 1개입니다.
- Master node
- index 생성/삭제, shard할당 등 전반적으로 인덱스, 노드를 관리하는 노드입니다.
- 단일 노드로 클러스터가 구성된 경우가 아니라면 마스터노드는 보통 데이터가 저장되지 않습니다.
- Master-eligible node
- 마스터가 장애가 생겼을때 마스터로 선출될 수 있는 노드입니다.
- Data node
- 데이터에 대해 CRUD를 수행하는 노드입니다.
- Ingest node
- Logstash, REST API등을 통해 데이터를 받은 뒤 데이터를 저장하기 전, 전처리를 전문적으로 수행하는 노드
- Coordinate node
- 요청에 대해 로드밸런싱 해주는 node입니다.
- aggregation(집계) 쿼리를 받으면 Data node에 요청을 하고 이를 취합해 aggregation을 수행합니다.
- cluster
- node를 여러개 묶어서 하나의 엘라스틱 서비스를 제공하는 묶음 입니다.
- replica
- replica는 원본인 primary의 복제본을 저장합니다. 장애가 생겼을때 replica가 primary가 되어 복구할 수 있으며 검색의 경우 replica로 대신하여 성능을 향상시킬 수 있습니다.
- replica가 기본값인 1개라면 하나의 index에서 1개의 replica가 생긱빈다.
- node 두개에서 index 5개를 사용하고 replica가 1개라면 아래와 같이 사용해 장애상황을 대비합니다.
- node1
- 0, 1, 2 primary
- 3, 4 replica
- node2
- 3, 4 primary
- 0, 1, 2 replica
- node1
출처
https://jaemunbro.medium.com/elastic-search-기초-스터디-ff01870094f0
https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html
https://medium.com/@eshwar.koride7/everything-about-elasticsearch-a8f36757457e
https://medium.com/velotio-perspectives/elasticsearch-101-fundamentals-core-components-a1fdc6090a5e
https://aws.amazon.com/ko/what-is/elk-stack/
'CS > 데이터베이스' 카테고리의 다른 글
RealMySQL 8.0 스터디 회고 (0) | 2024.04.05 |
---|---|
이중화(DB) (1) | 2024.03.29 |
DB replication은 언제 사용할까요? (0) | 2024.03.22 |
데이터 베이스에 완전한 한글 문자만 저장하는 방법이 있을까?(’ㅇ’, ‘ㅏ’ 같은 문자는 저장하기 싫음!) (0) | 2024.03.15 |
MySQL Full-Text Search (0) | 2024.03.08 |