이 글은 아래 블로그 글을 토대로 공부하면서 모르는 내용에 살을 붙여 정리한 글입니다.
1. Elasticsearch란?
Apache Lucene(아파치 루씬) 기반의 Java 오픈소스 분산 검색 엔진
방대한 양의 데이터를 거의 실시간 (NRT, Near Real Time)으로 저장, 검색, 분석할 수 있다.
데이터 분석 도구인 ELK 스택에서 데이터 분석 및 저장 기능을 담당하기도 하고 (L - Logstash : 수집기능 / K - Kibana : 시각화), 단독으로 사용되기도 한다.
모든 종류의 문서를 검색하는데 사용할 수 있으며, 분산 방식으로 데이터를 처리한다. 인덱스를 여러 샤드로 나눌 수 있으며 각 샤드는 복제물을 가질 수 있다. 각 노드는 하나 이상의 샤드를 관리하며 작업을 올바른 샤드로 할당시킨다. 리밸런싱이나 라우팅은 자동으로 수행된다.
1.1 ELK 간단 정리!
Logstash가 다양한 데이터 (로그 또는 트랜잭션 데이터 등)을 수집, 집계, 파싱하여 Elasticsearch로 전달한다.
Elasticsearch는 전달받은 데이터를 검색 및 집계하여 필요한 정보를 획득한다.
Kibana는 Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링한다.
2. Elasticsearch - RDB
Elasticsearch를 RDB에 대응시키면 아래와 같다.
- 테이블들을 가지고 있는 데이터베이스 = Index
- 컬럼과 로우들로 구성된 테이블 = Type
- 데이터 객체 하나의 속성들을 나타내는 컬럼 = Field
- 각 속성들로 이루어진 하나의 데이터 = Document
- 인덱스 = Analyze
- 테이블의 컬럼들 중에서 각 로우들을 구별하기 위해 사용되는 컬럼인 프라이머리키 = _id
- 물리적 파티션 = shared (샤드)
- 논리적 파티션 = Route
- relational = parent/child, nested
- SQL = Query DSL
3. Elasticsearch 용어
3.1 클러스터
Elasticsearch에서 가장 큰 시스템 단위, 최소 하나 이상의 노드로 이루어진 노드들의 집합
각 클러스터들은 독립적인 시스템으로, 서로의 데이터에 접근 및 교환할 수 없다. 여러 대의 서버가 하나의 클러스터를 구성할 수도 있고, 한 서버에 여러 개의 클러스터가 존재할 수도 있다.
3.2 노드
Elasticsearch를 구성하는 하나의 단위 프로세스
- 3.2.1 master-eligible node
클러스터를 제어하는 마스터로 선택할 수 있는 노드로 그 역할은 아래와 같다. 마스터 노드는 반드시 path.data 디렉토리를 가져야 하는데 이 디렉토리는 클러스터의 메타데이터가 저장되어있다. 클러스터 메타데이터는 데이터 노드에서 어떻게 데이터를 읽을지에 대한 정보를 가지고 있다.- 인덱스 생성, 삭제
- 클러스터 노드들 추적 관리
- 어떤 샤드가 어떤 노드에 들어가야할지 결정
- 3.2.1.1 dedicated master-eligible node
선택된 마스터 노드가 적확한 클러스터 메타데이터를 가지고 있어야 클러스터가 잘 동작할 수 있다. 그러기 위해선 모든 master-eligible 노드를 dedicated 하게 하면 된다. 이것은 오직 마스터 역할만 가지고 있는 노드를 의미하는 것으로, 클러스터를 관리하는데 초점을 맞추고, 그 이외의 역할은 하지 않는 것이다. dedicated로 설정하려면 아래와 같이 설정하면 된다.node.roles: [ master ]
- 3.2.1.2 voting-only master eligible node
master노드 선출에 참가한 master-node들을 말한다. master-eligible이라는 말이 들어가서 마치 마스터 노드가 될 수 있을 것처럼 보이지만 이것들은 사실 마스터 노드가 될 자격이 없고, 절대 될 수 없다. 다만 마스터 노드를 선택하는데 참가할 뿐이다. 즉, 모든 master-eligible 노드는 voting-only가 될 수 있지만 voting-only라고 해서 모두 master-eligible이 될 수 있는 것은 아니라는 말이다. - 3.2.2 data node
데이터와 관련된 CRUD작업과 관련있는 노드로 CPU, 메모리 등 자원을 많이 소모하여 모니터링이 필요하고, master노드와 분리되는 것이 좋다. 데이터 노드는 인덱싱한 documents(rows in RDB)를 포함하는 샤드를 가지고 있는 노드로, 데이터 CRUD, 검색, 집계를 한다.
데이터 노드는 특정 데이터를 특정 티어에 할당하기 위해 아래와 같이 그 역할을 분류할 수 있고, 각 노드는 여러 티어에 속할 수 있지만, specialized role에 속하면 그보다 상위의 generic role을 가질 순 없다.node.roles: [ data ]
- data_content : 사용자가 만든 콘텐츠를 보관하며 데이터 CRUD, 검색, 집계를 할 수 있는 노드다
node.roles: [ data_content ]
- data_hot : elasticsearch에 들어갈 때 time series 데이터가 저장된다. 반드시 빠르게 쓰고 읽을 수 있으야 하므로 하드웨어보다 빠른 SSD가 필요하다.
node.roles: [ data_hot ]
- data_warm : 웜데이터 노드는 더이상 자주 업데이트되진 않지만 여전히 쿼리되는 데이터들을 저장한다.
node.roles: [ data_warm ]
- data_cold : 접근 빈도가 낮은 read-only데이터들을 저장한다.소모되는 자원을 최소화할 수 있는 검색 가능한 스냅샷을 발생시키고 성능이 떨어지는 하드웨어를 사용한다.
node.roles: [ data_cold ]
- data_frozen : 이 티어는 부분적으로 데이터를 마운트한다.
node.roles: [ data_frozen ]
- data_content : 사용자가 만든 콘텐츠를 보관하며 데이터 CRUD, 검색, 집계를 할 수 있는 노드다
- 3.2.3 Ingest node
데이터 변환 등 전처리 파이프라인을 실행하는 노드node.roles: [ ingest ]
- 3.2.4 Coordination only node
로드밸런서와 비슷한 역할을 하는 노드로, 주로 대규모 클러스터에서 마스터 노드나 데이터 노드의 역할을 대신한다.node.roles: [ ]
4. Index / Shard / Replica
- Index = database in RDB
- shard : 데이터를 분산해서 저장하는 방법, index를 여러 shard로 쪼갠다. 기본적으로 1개 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 개수를 조정하기도 한다.
- replica : 또 다른 형태의 shard로 노드를 손실했을 경우, 데이터 신뢰성을 위해 샤드를 복제해두는 것. 따라서 replica는 서로 다른 노드에 존재하는 것을 권장한다.
5. Elasticsearch의 특징
- scale out : 샤드를 통해 규모가 수평적으로 늘어날 수 있음
- 고가용성 : replica로 데이터 신뢰성, 안정성 보장
- schema free : json 문서를 통해 데이터를 검색하기 때문에 스키마 개념이 없음
- restful : 데이터 crud 작업이 http restful api를 통해 수행됨
- select = get
- insert = put
- update = post
- delete = delete
- curl로 데이터를 넘겨줄 수도 있고, json 파일을 저장해서 데이터를 넘길 수도 있고, json형태로 query DSL(SQL in RDB)를 작성해서 api를 호출할 수 있음
- curl사용할 때 -d 옵션에 전달한 데이터를 json 포맷으로 전달하고 -H 옵션에 헤더를 명시하고 ?pretty 파라미터를 설정하면 결과를 예쁘게 받을 수 있음
- inverted index (역색인) : elasticsearch가 빠른 이유! elasticsearch는 텍스트를 파싱해서 검색어 사전을 만들어서 텍스트를 저장한다. 한 문장을 데이터로 받으면 그 문장을 모두 파싱해서 각 단어를 저장하는데 이때 toLowercase하고 유사어도 체크한다
References
'컴퓨터 공학 > 데이터베이스' 카테고리의 다른 글
정규화 Normalization (0) | 2022.01.07 |
---|---|
ERD (Entity Relationship Diagram) 기초 (0) | 2022.01.07 |
데이터 모델링의 이해 (0) | 2022.01.07 |
ELK) Logstash 기본 개념 (0) | 2021.12.27 |
데이터베이스) 데이터베이스 기초 : 개념, 모델링, ERD, DBMS, SQL, ... (0) | 2021.04.12 |