[ElasticSearch] 샤드 (Shard) & 인덱싱 (Indexing)

2024. 11. 1. 18:24·Data Enginnering/Elastic

 

Shard 

여러 노드를 효율적으로 사용하기 위해 노드에선느 데이터를 샤드라는 단위로 분산 저장한다.

샤드 하나의 크기는 10~40GB 정도로 관리하는 것이 좋다고 권고된다.

노드 수에 비해 샤드가 너무 많으면 필요 이상으로 리소스를 소비하게되고, 인덱스 검색을 위해서는 모든 샤드에 접근해야하기에 성능에 좋지 않습니다.

Primary Shard 는 문서가 저장되는 원본 샤드이다.

색인과 검색 성능에 모두 영향을 준다.

Replica Shard 는 복제 샤드로써 문제가 생기면 Primary Shard 로 승격된다.

 

Primary Shard 의 개수가 성능에 영향을 준다.

PS 3 에 장애가 발생하면 RS 3 을 PS 3 으로 승격한다.

새로운 PS 3 이 RS 3 을 생성한다.

PS 1 은 Replica를 잃었기 떄문에 RS 1 을 새롭게 만들어준다.

PUT /movie
{
  "settings": {
    "number_of_shards" : 5,
    "number_of_replicas" : 2
  }
}

위와 같은 방식으로 샤드를 설정할 수 있다.

이 때 movie 인덱스의 총 샤드 개수는 

number_of_shard * (number_of_replicas + 1) = 15

각 노드당 3개의 샤드를 가지게 된다.

 

샤드 라우팅

샤드 라우팅은 문서가 샤드에 저장되는 방법 및 순서를 의미한다.

Routing Rule = (문서의 id) % (프라이머리 샤드의 개수) 

Routing Rule에 따라 문서가 샤드에 저장되므로 샤드의 개수가 바뀐다면 문서가 저장되는 규칙이 완전히 바뀌게 된다.

아래와 같이도 표현할 수 있고 한다.

shard = hash(_routung) % 프라이머리 샤드 수

 

샤드와 노드의 관계

클러스터에서 데이터를 효율적으로 분산하고 처리하기 위해

큰 데이터 인덱스를 여러 샤드로 나눌 수 있다. 가장 작게는 segment 로 만들 수 있다.

노드는 이 샤드를 담는 서버 단위이다. 클러스터 내에거 각 노드는 여러 개의 샤드를 가질 수 있고, PS(primary shard)와 RS(replica shard)를 포함할 수 있다.

 

인덱스가 다 만들어진 뒤에 Kibana 의 모니터링 기능으로 shard 가 노드에 고르게 분배되었는지 확인한다.bㅋ

 

번외 정보) 어떻게 정보를 주고받을 수 있을까?

노드들은 클리언트와 통신을 위해 http 포트 (9200~9299) 를 사용

노드끼리는 통신을 위해 tcp 포트 (9300~9399) 를 사용

 

 


인덱싱 (Indexing)

데이터를 저장하여 검색할 수 있는 구조로 만들려면 어떻게 해야 할까?

 

인덱스 생성

인덱스를 먼저 생성하고, 인덱스에 포함될 문서의 필드와 설정을 정의한다.

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { "type": "text" },
      "author": { "type": "keyword" },
      "date": { "type": "date" }
    }
  }
}

위에서 봤던 것처럼 샤드의 개수와 필드의 타입을 설정한다.

문서를 인덱스(DB에서는 table)에 추가하기 위해서는 인덱싱해야 한다.

mappings의 형식대로 저장을 한다.

인덱싱된 문서는 역 인덱스러 저장되어 Elasticsearch 가 빠르게 검색할 수 있게 준비된다.

 

인덱싱 방법

Logstash 를 실행한다.

$ ./bin/logstash -f [config파일명]

Logstash 는 데이터를 다양한 소스에서 받아서 처리하며, 필요한 정보만 남기거나 변환한 후, ES 와 같은 분석 플랫폼으로 전달하여 쉽게 분석할 수 있게 해준다.

플러그인 기반의 파이프라인을 사용한다.

Input : 데이터 소스에서 데이터를 가져온다

Filter : 데이터의 변환 및 정제 작업을 수행한다

Output : 최종 데이터를 ES 나 다른 저장소에 보낸다.

 

검색 방법

검색에 필요한 쿼리 내용을 JSON 파일로 정의하여 사용합니다.

 

JSON 파일 내에서 sort와 range 쿼리를 사용하여 특정 필드 기준으로 정렬하고 범위를 지정해 문서를 조회합니다. 예를 들어, rdate1과 rdate2 필드를 기준으로 내림차순 정렬하고, 지정된 범위의 데이터만 조회할 수 있습니다.

 

검색 결과는 took(검색에 걸린 시간), timed_out(시간 초과 여부), _shards(성공, 실패한 샤드 수), hits(조회된 문서 수 및 배열) 등의 정보를 포함하며 출력됩니다​

 

 


참고문헌1 ( 샤드 )

https://goodbyeanma.tistory.com/145?category=1002623

참고문헌2 ( 노드와 샤드)

https://jaykos96.tistory.com/37

'Data Enginnering > Elastic' 카테고리의 다른 글

[ElasticSearch] Logstash 와 Elasticsearch / 디스크 I/O 병목  (0) 2024.11.24
[ElasticSearch] 성능 최적화의 해석  (0) 2024.11.24
[Elasticsearch] 샤딩(Sharding), kBwrtn/s vs kBread/s 비교  (0) 2024.11.05
[ElasticSearch] 검색 성능 최적화  (1) 2024.11.04
[ElasticSearch] 데이터 처리, 검색 성능 최적화  (5) 2024.11.02
'Data Enginnering/Elastic' 카테고리의 다른 글
  • [ElasticSearch] 성능 최적화의 해석
  • [Elasticsearch] 샤딩(Sharding), kBwrtn/s vs kBread/s 비교
  • [ElasticSearch] 검색 성능 최적화
  • [ElasticSearch] 데이터 처리, 검색 성능 최적화
Ctrl_engineer
Ctrl_engineer
Ctrl 키는 혼자일 때보다 다른 키와 함께할 때 진짜 힘을 발휘합니다. 데이터도, 사람도 마찬가지입니다. 연결되고 흐를 때, 세상은 더 나은 방향으로 움직입니다. 저는 데이터의 흐름을 설계하고, 신뢰를 심는 엔지니어가 되고자 합니다. 이곳은, 그 여정의 작은 흔적들을 기록하는 공간입니다.
  • Ctrl_engineer
    Ctrl the flow
    Ctrl_engineer
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Research (8)
        • Raspberry Pi (8)
      • Data Enginnering (24)
        • Cloud (3)
        • Elastic (6)
        • Database (9)
        • Pipeline (3)
      • CS STUDY (0)
        • Computer Science (0)
        • DataStructure & Algorithm (0)
      • Programming (13)
        • Python (13)
      • Mathematics and Statistics (10)
      • Data Science (3)
        • Data Insight (2)
        • Learning (0)
        • ML & DL (0)
      • DIARY (0)
      • TIL (Today I Learned) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Khan Academy
    Khan
    3blue1brown
    Statistics and Probability
    elasticSearch
    spark
    티스토리챌린지
    ssh 비밀번호 없이 접속
    라즈베리파이 네트워크 설정
    py4e
    heap size
    linear algebra
    오블완
    climb-mates
    부스트코스
    라즈베리파이5
    SQL
    indexing
    proxyjump 설정
    점프투파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Ctrl_engineer
[ElasticSearch] 샤드 (Shard) & 인덱싱 (Indexing)
상단으로

티스토리툴바