티스토리 뷰
1. Elasticsearch
- Apache Luecene 기반의 Java 오픈소스 분산 검색 엔진이다.
- 방대한 양의 데이터를 신속하게 거의 실시간으로 저장, 검색, 분석이 가능.
- ELK (Elasticsearch / Logstash / Kibana) 스택을 구성할 수 있다.
- Inverted Index 방식으로 조회가 빠르다.
2. ELK (Elasticsearch / Logstash / Kibana)
- Logstatsh
- 다양한 소스의 로그 또는 트랜잭션 데잉터를 수집, 집계 파싱하여 Elasticsearch로 전달 - Elasticsearch
- Logstash 로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득 - Kibana
- Elasticsearch 의 빠른 검색을 통해 데이터를 시각화 및 모니터링
ELK Architecture
https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html
3. 관계형 DB 와 비교
RDBMS | Elasticsearch | Content |
Databasse | Index | - 인덱스는 RDBMS 에서 database 과 같은 개념. - 하나의 인덱스는 하나의 타입만 가질 수 있음. |
Table | Type | - 인덱스 하나 당 하나의 타입을 가질 수 있음. - 큰 의미가 없으며 v7.0에서는 타입은 완전히 사라짐. - 인덱스가 데이터베이스와 테이블의 역할 두개를 동시에 하게 되었음. |
Row | Document | - 문서는 Elasticsearch 데이터의 최소 단위. - Json Object 의 1개 이다. - 중첩 구조를 지원하여 문서 내부에 문서가 들어 갈 수 있음. |
Column | Field | - 어떤 문서에 들어 가는 데이터의 타입을 정의. - 하나의 필드가 여러 개의 데이터 타입을 가질 수도 있음. |
Index | Analyze | |
Primary key | _id | |
Schema | Mapping | - 문서와 데이터를 가지고 있ㄴ느 필드가 어떻게 저장되고 색인 될지에 대한 프로세스. - 필드와 필드의 속성을 정의하고 색인 방법을 정의합니다. - 여러가지 데이터 타입 지정이 가능하지만 필드명 자체는 중복이 불가능. |
Phygical partition | Shard | |
Logical partition | Route | |
Relational | Parent/Child, Nested | |
SQL | Query DSL |
4. Cluster Architecture
5. 용어 정리
- 클러스터 (cluseter)
- Elasticsearch 에서 가장 큰 시스템 단위를 의미함.
- 최소 하나 이상의 노드로 이루어진 노드들의 집합이다.
- 서로 다은 클러스터는 데이터 접근, 교환을 허용하지 않는 독립적인 시스템을 유지
- 여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터를 구성할 수 있다. - 노드 (node)
- Elasticsearch 를 구성하는 하나의 단위 프로세스를 의미함.
- 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있다.
1) Master-eligible node
- 마스터를 제어하는 마스터로 선택할 수 있는 노드.
- 인덱스 생성, 삭제
- 클러스터 노드들의 추적, 관리
- 데이터 입력시 어느 샤드에 할당할 것인지 구분
- 네트워크 속도가 빠른 노드를 마스터 노드로 설정하는 것을 권장
- 여러 개의 마스터 노드를 설정하면 하나만 마스터 노드로 작동
- 설정하고 싶다면 elasticsearch.yml 내부에서 node.master: true 로 설정
2) Data node
- 데이터와 관련된 CRUD 작업과 관련있는 노드.
- 데이터가 분산 저장되는 물리적 공간인 샤드가 배치되는 노드
- CPU, Memory 등 자원을 많이 소모하므로 모니터링이 필요.
- Master 노드와 분리되는 것이 좋음.
- 설정하고 싶다면 elasticsearch.yml 내부에서 node.data: true 로 설정
3) Ingest noe
- 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할을 함.
- 스크립트로 전처리 파이프라인 구성, 실행하여 데이터 포맷 변경 가능.
- 설정하고 싶다면 elasticsearch.yml 내부에서 node.ingest: true 로 설정
4) Coordination only node
- data node 와 master-eligible node 의 일을 대신하는 해줌.
- 대규모 클러스터에 큰 이점이 있음.
- 로드밸런서와 비슷한 역할.
- 사용자의 요청만 받음.
- 설정하고 싶다면 elasticsearch.yml 내부에서 노드 종류 관련 옵션 전부 false 로 설정 - 샤드 (Shard)
- 샤딩은 데이터를 분산해서 저장하는 방법을 의미
- 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 함.
- Primary Shard 는 데이터 원본의 공간
- Replica Shard 는 장애극복(fail-over)을 위한 복제의 공간 - 복제 (Replica)
- 복제는 또 다른 형태의 shard 라고 할 수 있음.
- 복제는 서로 다른 노드에 존재할 것을 권장.
간단 용어 정리
이름 | 내용 |
클러스터 ( Cluster ) | Elasticsearch 서버 그 자체, 노드의 모음. |
노드 ( Node ) | 클러스터의 구성요소. 다양한 형태 존재 (master, data, ingest, coordination) |
인덱스 ( Index ) | 관계형 데이터베이스의 데이터베이스 이면서 테이블 (타입) |
샤드 ( Shard ) | 쪼개진 인덱스 |
문서 ( Document ) | Elasticsearch 데이터의 최소 단위 |
필드 ( Field ) | 문서를 구성하기 위한 속성 |
매핑 ( Mapping ) | 필드와 필드속성, 색인 방법 정의 하는 프로세스 |
인덱스와 샤드
https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards
5. Elasticsearch 특징
- Scale out
- 샤드를 통해 규모가 수평적으로 늘어날 수 있음 - 고가용성
- Replica 를 통해 데이터의 안정성을 보장 - Schema Free
- Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없음. - Restful API
Data CRUD | ES Restful | example |
select | get | curl -XGET localhost:9200/parffa/blog/1?pretty |
insert | post | curl -XPOST localhost:9200/paraffa/blog/1?pretty -d {"a": "a", "b": "b"} -H 'Content-Type: application/json' |
update | put | curl -XPUT |
delete | delete | curl -XDELET |
-d : 추가할 데이터를 json 포맷으로 전달
-H : 헤더를 명시
?pretty : 결과를 예쁘게 보여주도록 요청
paraffa: 인덱스명 위치
blog: 타입명 위치
6. Elasticsearch 장점
- 데이터베이스 대용으로 사용 가능
- NoSQL 이며 분산 처리를 통해 거의 실시간에 가깝게 데이터 검색이 가능. - 대량의 비정형 데이터 보관 및 검색 가능
- 비정형 데이터 검색이 가능하며 전문 검색(full text search)과 구조 검색을 모두 지원.
- 기본적으로 MongoDB나 Hbase처럼 대용량 스토리지로 사용 가능. - 오픈소스 검색엔진
- 아파치 루씬 기반 오픈소스 검색엔진으로 무료로 사용 가능.
- 오픈 소스라 버그가 발생하면 빠르게 해결됨. - 통계 분석
- 비정형 로그 데이터를 수집하고 한 곳에 모아서 통계 분석이 가능하다.
- 키바나를 이용하면 시각화 또한 가능합니다. - 스키마리스 (Schemaless)
- 관계형이 아닌 비정형의 다양한 형태의 문서도 자동으로 색인, 검색이 가능. - Restful API
- 외부 API 통신으로 여러 다양한 플랫폼에서 응용 가능. - Multi-tenancy
- 인덱스는 데이터베이스와 같은 개념
- 서로 다른 인덱스에서도 검색할 필드명만 같으면 여러개의 인덱스에서 한번에 조회 가능 - Document-Oriented
- 여러 계층의 데이터를 Json 형식의 구조화된 문서로 인덱스에 저장이 가능.
- 계층 구조로 문서도 한 번의 쿼리로 쉽게 조회 가능 - 역색인 (Inverted-Index)
- 가장 최근에 인덱싱된 데이터를 조회하므로 빠름. - 확장성과 가용성
- 매우 많은 데이터가 존재할 때, 분산 시스템 구성으로 병렬적인 처리가 가능.
- 분산 환경에서는 데이터가 샤드(Shard)라는 단위로 나누어 제공.
- 인덱스 생성 시마다 샤드의 수 조정이 가능.
- 데이터의 종류와 성격에 따라 데이터를 분산하여 빠르게 처리 가능.
7. Elasticsearch 단점
- 실시간(Real Time) 처리는 불가능
- 데이터 색인의 특징 때문, 색인된 데이터는 1초 뒤에나 검색이 가능.
- 내부적으로 commit, flush 와 같은 과정을 거치기 때문.
- 공식 홈페이지에서는 NRT (Near Real Time) 라고 표현. - 트랜잭션 (Transaction), 롤백 (Rollback) 등의 기능을 제공하지 않음
- 분산 시스템의 구성의 특징 때문, 시스템적으로 비용 소모가 큰 롤백, 트랜잭션을 지원안함.
- 데이터 관리에서 유의해야 함. - 전정한 의미릐 업데이트를 지원하지 않는다.
- 업데이트 명령은 있지만 실제로는 데이터를 삭제했다가 다시 만드는 과정으로 업데이트 함.
- 이러한 특성은 나중에 불변성 (Immutable) 이라는 이점을 제공
김종민 가이드 북 https://esbook.kimjmin.net/
'도움받기' 카테고리의 다른 글
ELK(ElasticSearch, Logstash, Kibana) Stack 이란? (0) | 2019.07.22 |
---|---|
Netflix Hystrix (0) | 2019.07.22 |
Spring Event + Async + AOP 적용해보기 (0) | 2019.07.22 |
Spring Boot Logging과 Profile 전략 (0) | 2019.07.22 |
Spring Cache 장애 대응 방안 (0) | 2019.07.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- Web Development Tutorial
- 월간 깃헙 트렌드
- List of Useful Node.js Modules
- Vue Style Guide
- NAVER Tech Talk: FE devtalk
- Do it! Vue.js 입문 저자 블로그
- Eva Icons - 오픈소스 아이콘
- awesome-nodejs
- Node.js Documentation
- Pretty Awesome Lists
- 김정환블로그 - Node.js 코드랩
- TOAST UI - JavaScript UI libra…
- The Vue.js Cheat Sheet
- 1인 크리에이터 콘텐츠 연구소
- The Modern Javascript Tutorial
- Hacker News readers as PWA
- Awesome Vue.js
TAG
- 레인가드
- 투어버디
- AWS
- pm2
- nodejs
- 자동테스트
- intellij
- 게임음악
- tourbuddy
- 음악듣기
- CI
- 추억
- portainer
- CD
- OST
- gitlab
- 자돌빌드
- maven
- 자동배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함