Elasticsearch 인덱스, 그리고 설정하기

CHEESE·2024년 2월 27일

Elasticsearch

목록 보기
5/5
post-thumbnail

인덱스

엘라스틱서치의 인덱스는 아주 세부적인 부분까지 설정으로 제어할 수 있다.
그 말인 즉슨, 설정에 따라 동작과 특성이 매우 달라지기 때문에 인덱스 설계가 중요하다 !

설정하기

number_of_shards

인덱스가 데이터를 몇 개의 샤드로 쪼갤 것인지 지정한다. (기본값: 1)

한 번 지정하면 특별한 작업(ex: reindex 등 인덱스를 통째로 재색인)을 수행하지 않는 한 바꿀 수 없으니 주의한다.

너무 많으면...

  • 샤드 하나마다 루씬 인덱스가 하나씩 더 생성된다.
  • 주 샤드 하나당 복제본 샤드도 늘어난다.
  • 클러스터에 샤드가 너무 많아지면 클러스터 성능이 떨어진다. (색인 성능 감소)

너무 적으면...

  • 샤드 하나의 크기가 커진다.
  • 샤드의 크기가 지나치게 크면 장애 상황에서 샤드 복구가 오래 걸린다. (안정성 감소)

number_of_replicas

주 샤드 하나당 복제본 샤드를 몇 개 둘 것인지 지정한다.

엘라스틱서치 클러스터에 몇 개의 노드를 붙일지, 어느 정도의 고가용성을 제공할 것인지를 고려해서 지정한다.
인덱스 생성 후에도 동적으로 변경이 가능하다.

refresh_interval

엘라스틱서치가 해당 인덱스를 대상으로 refresh를 얼마나 자주 수행할지 지정한다. (얼마나 자주 검색 대상을 추가할 것인지) (기본값: 1s)

-1로 지정하면 주기적인 refresh를 수행하지 않는다.
마지막으로 검색 쿼리가 들어온 시각을 확인하여 30초 이상 검색 쿼리가 들어오지 않는다면 다음 첫 검색 쿼리가 들어올 때까지 refresh하지 않는다. index.search.idle.after 설정을 변경하여 30초 대기 시간을 변경할 수 있다.

설정 변경

number_of_replicas, refresh_interval 같은 설정은 동적으로 변경할 수 있다.
request

PUT [인덱스 이름]/_settings
{
	"index.number_of_replicas": 0,
    "index.refresh_interval": "1s"
}

response

{
  "acknowledged": true
}

설정 변경 요청이 성공하면 응답에 acknowledged 값으로 true를 받는다.

설정 조회

request

GET [인덱스 이름]/_settings

response

{
	"my_index": {
      "settings": {
        "index": {
          "creation_date": [timestamp],
          "number_of_shards": "1",
          "number_of_replicas": "1",
          "uuid": [uuid],
          "version": {
            "created": "7080223"
          },
          "provided_name": "my_index",
          "routing": {
            "allocation": {
              "include": {
                "_tier_preference": "data_content"
              }
            }
          }
        }
      }
    }
}

설정을 지정하여 인덱스 생성하기

자동으로 생성된 인덱스(ex: 인덱스가 없을 때 문서 색인을 요청한 경우)는 모든 주요 인덱스 설정이 기본값으로 지정된다. 실무 환경에서는 이런 방식의 운영은 적절하지 않으므로 인덱스 설정을 이해하고 직접 적절하게 지정해서 인덱스를 생성해야 한다.

생성하기

request

PUT [인덱스 이름]
{
  "settings": {
    [인덱스 설정]
  }
}

response

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": [인덱스 이름]
}

0개의 댓글