ElasticSearch 데이터 구조 이해하기

김종하·2022년 7월 18일
0

ELK

목록 보기
2/2
  • ElasticSearch 의 시스템 및 데이터 구조
  • Alias, Rollover, API
  • Datastream
  • Integrations, Elastic Agent, Fleet
  • 데모

ElasticSearch 시스템 구조
클러스터 - 독립된 ElasticSearch 시스템 환경. 1개 이상의 노드로 구성
노드 - 실행중인 ElasitcSearch 시스템 프로세스
도큐먼트 - 저장된 단일 데이터 단위
인덱스 - 도큐먼트의 논리적 집합. 1개 이상의 샤드로 구성
샤드 - 색인 & 검색을 진행하는 작업 단위

샤드는 기본저으로 프라이머리 샤드와 복제본으로 구성
갹 샤드들은 클러스터 내의 노드들에 분산되어 저장
같은 프라이머리 샤드와 복제본은 같은 데이터셋을 담고 있으며 반드시 다른 노드에 저장
데이터 노드가 1개인 경우 복제본은 생성되지 않음

복재본을 통해 무결성을 유지
노드가 유실되면 남아있는 샤드의 데이터를 다른 노드로 복사

각 인덱스 별로 프라이머리 샤드와 복제본 세트 수 설정

PUT books
{ 
 "settings" : {
   "index" : {
   	 "number_of_shards" : 5, 
     "number_of_replicas" : 1
    }
  }
}

프라이머리 샤드는 처음 인덱스를 생성하는 시점에 설정 이후 변경 불가능

사용자는 어떤 도큐먼트가 어떤 샤드에 적재되는지 알 수 없음 (알 필요 없음)

검색 시, 요청을 받은 노드 (= coordinate node) 는 해당되는 모든 샤드에 검색 명령 전달
-> 검색은 샤드별로 분산되어 실행 된 후 결과는 coordinate node 에서 취합되어 클라이언트로 전달

Alias API

  • Alias 하나에 여러개의 인덱스 연결 가능
  • 여러개의 인덱스가 연결된 경우 조회만 가능
  • alias 와 인덱스가 1:1 인 경우 색인 가능
  • 입력은 색인 alias, 검색은 조회 alias 로 하면 클라이언트 설정 변경 필요 X

Rollover API

  • 날짜를 기준으로 인덱스를 나눌 경우 샤드 용량에 최적화 해서 사용하지 못함
  • _rollover API 를 이용해 인덱스를 용량을 기준으로 새로 나누어 생성 가능
  • 인덱스가 아닌 alias 또는 datastream 을 대상으로 실행
POST _aliases
{
 "actions" : [
   {
   	 "add" : {
       "index" : "my-log-0000",
       "alias" : "my-logs" 
     }
   }
 ]
}


POST my_logs/_rollover
{ 
 "conditions" : {
  "max_age" : "7d",
  "max_docs" : 1000,
  "max_size" : "10gb"
 }
}

Rollover 는 조건에 만족될 떄 자동 생성이 아니라 POST 명령을 입력해야 생성됨
-> ILM (index lifecycle management) 로 제어하는 것이 바람직

Datastream

  • 색인은 입력 alias, 검색은 조회 alias ... -> 복잡하네?
  • 원래 인덱스 쓰던 것 처럼 한군데서 하면 안되나?
  • 자동화하기 위해 나온 것인 datastream
  • 데이터가 계속 추가(append) 되는 시계열 (로그, 메트릭) 데이터에서 사용
  • 일반 인덱스를 사용하 듯 데이터스티림을 대상으로 데이터 색인, 검색 가능
  • 데이터스트림 뒤에 하나 이상의 숨겨진 인덱스들을 자동으로 구성, 확장
  • 반드시 기준이 되는 date, date_nanos 타입의 @timestamp 필드 필요

0개의 댓글