본문으로 바로가기

Elasticsearch Reindex 성능 개선

category ELK 2023. 6. 12. 16:11
반응형

사내에서 10억 건에 상품 정보를 Reindex 하고 있습니다.

클러스터는 마스토 노드 2개와 16개 데이터 노드로 구성되어 있고 해당 상품 인덱스 샤드는 프라이머리 24개, 레플리카 1개로 설정되어 있습니다.

10억 건, 3TB 용량을 가진 인덱스를 Reindex 하려면 꽤 오랜 시간이 걸립니다.

그 시간 동안에는 동적색인을 큐에 적재하기 때문에 실시간 정보가 반영이 되지 않아 이 시간을 최소화하기 위해 사용했던 설정입니다.

 

2022.10.14 - [ELK] - Elasticsearch Reindex를 사용해 신규 index 생성

 

Reindex 명령어

POST /_reindex?wait_for_completion=false&slices=auto
{
  "source": {
    "size": 1000,
    "index": "source-index"
  },
  "dest": {
    "index": "target-index"
  }
}

 

1. 샤드 수 조절하기

노드 몇대에 샤드는 몇개일때가 성능이 좋다 라는 가이드라인이 없어 여러번 변경해서 최적화 해보는게 좋습니다.
Reindex 샤드 설정

성능을 최대화하기 위한 이상적인 샤드 수는 4n+/-1이며 여기서 n은 노드 수 입니다.

 

2. Slice 수 조절하기

Slice는 병렬로 작업할 수를 결정합니다. 

샤드 개수와 같을 때 성능이 가장 높으며, 이는 auto로 설정하는 것과 같습니다.

 

3. replica 비활성화

reindex target dest는 검색 트래픽을 제공하지 않는 인덱스이기 때문에 완료 후 동적으로 생성시에 성능에 더 좋습니다.

PUT target-index/_settings
{
  "refresh_interval": "-1",
  "number_of_replicas": "0"
}

 

 

4. 새로 고침 비활성화 refresh_interval -1 

새로 고침 간격을 비활성화 합니다.

새로운 문서가 들어왔을 때 인덱싱을 하고 그 결과를 세그먼트 단위로 저장 후 생성하는 것을 refresh라고 합니다.

(세그먼트를 생성하는 주기를 refresh_interval이라고 함.)

 

5. bulk size 늘리기

batch 당 인덱싱할 문서 수를 설정합니다. (기본으로 1000개를 사용)

 

관련 문서 참조

https://opster.com/blogs/improve-elasticsearch-reindex-performance/

 

Tips to Improve your Elasticsearch Reindex Performance

Learn how to reindex Elasticsearch more efficiently and improve Elasticsearch reindexing performance by following these tips.

opster.com

반응형