ElasticSearch
ElasticSearch란?
- Elastic Stack에서 가장 중요한 역할을 담당하는 풀텍스트 검색 및 분석 오픈소스
- 공식 홈페이지에서는 Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진으로 분산형 및 개방형을 특징을 가진 검색 및 오픈소스라고 정의 되어 있다
- Apache Lucene( 아파치 루씬 ) 기반의 Java 오픈소스 분산 검색 엔진
• Elastic Search 구성 및 용어 정리
1) 클러스터( cluseter )
- 클러스터란 Elasticsearch에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드들의 집합
- 서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며,
여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터가 존재할수도 있다.
2) 노드( node )
• 하나의 서버를 의미하며 N개의 노드로 클러스터를 구성할 수 있다.
2-1) Master node
- 클러스터를 제어하는 마스터로 선택할 수 있는 노드
• master 노드의 역할
1. 인덱스 생성, 삭제
2. 클러스더 노드들의 추적, 관리
3. 데이터 입력 시 어느 샤드에 할당할 것인지 정해줌
2-2) Data node
- 데이터와 관련된 CRUD 작업과 관련있는 노드
- 해당 노드는 자원을 많이 소모하며, 클러스터는 1개의 마스터노드와 N개의 Data node로 구성될 수 있다.
2-3) Ingest node
- 데이터를 변환하는 등 사전 처리 파이프라인을 실행
2-4) Coordination only node
- data node와 Masternode의 일을 대신하는 이 노드는 로드밸런서와 비슷한 역할을 해주는 node로 써대규모 클러스터에서 큰 이점이 있습니다.
3) 인덱스( index ) / 샤드( Shard ) / 복제본( Replica )
3-1) 인덱스(index, indices)
- Elasticsearch에서 index(indices)는 RDBMS에서 database와 대응하는 개념입니다.
- 인덱스 및 인덱시스라고 불리우며
3-2) 샤딩 (sharding)
- Elasticsearch에서 스케일 아웃을 위해 index를 여러 shard로 쪼개어 데이터를 관리하는 방법
- 기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 합니다.
3-3) 복제본 (replica)
- replica는 shard가 생성될 때 shard의 복제본이 같이 생성되어 나온 것
- 노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하여 데이터의 신뢰성을 보장한다.
- 따라서 replica는 서로 다른 노드에 존재할 것을 권장