Elasticsearch에서 기본 샤드 수를 늘리는 방법
Elasticsearch의 split 및 reindex API를 사용하여 기본 샤드 수를 늘려 최적의 샤드 확장을 구현하는 방법을 알아보세요.
기존 인덱스의 기본 샤드 수는 늘릴 수 없으므로, 기본 샤드 수를 늘리려면 인덱스를 다시 생성해야 합니다. 이러한 상황에서 일반적으로 사용되는 메서드는 _reindex API와 _split API의 두 가지입니다.
split API는 _reindex API보다 더 빠른 방법인 경우가 많습니다. 두 작업 전에 인덱싱을 중지해야 하며, 그렇지 않으면 source_index와 target_index 문서 수가 달라집니다.

방법 1 - 분할 API 사용
분할 API는 설정을 복사하고 기존 인덱스를 매핑하여 원하는 기본 샤드 수로 새 인덱스를 생성하는 데 사용됩니다. 생성 시 원하는 기본 샤드 수를 설정할 수 있습니다. 분할 API를 구현하기 전에 다음 설정을 확인해야 합니다:
소스 인덱스는 읽기 전용이어야 합니다. 즉, 인덱싱 프로세스를 중지해야 합니다.
대상 인덱스의 기본 샤드 수는 소스 인덱스의 기본 샤드 수의 배수여야 합니다. 예를 들어, 소스 인덱스에 기본 샤드가 5개인 경우, 대상 인덱스 기본 샤드를 10,15,20 등으로 설정할 수 있습니다.
참고: 기본 샤드 번호만 변경해야 하는 경우, 재인덱스 API보다 훨씬 빠른 분할 API를 사용하는 것이 좋습니다.
분할 API 구현하기
테스트 인덱스를 만듭니다:
POST test_split_source/_doc
{
"test": "test"
}소스 인덱스는 읽기 전용이어야 분할할 수 있습니다:
PUT test_split_source/_settings
{
"index.blocks.write": true
}설정 및 매핑은 소스 인덱스에서 자동으로 복사됩니다:
POST /test_split_source/_split/test_split_target
{
"settings": {
"index.number_of_shards": 3
}
}진행 상황을 확인할 수 있습니다:
GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_total설정과 매핑은 소스 인덱스에서 복사되므로 대상 인덱스는 읽기 전용입니다. 대상 인덱스에 대한 쓰기 작업을 활성화해 보겠습니다:
PUT test_split_target/_settings
{
"index.blocks.write": null
}원본 인덱스를 삭제하기 전에 소스 및 대상 인덱스 docs.count를 확인하세요:
GET _cat/indices/test_split*?v&h=index,pri,rep,docs.count인덱스 이름과 별칭 이름은 같을 수 없습니다. 소스 인덱스를 삭제하고 소스 인덱스 이름을 대상 인덱스에 별칭으로 추가해야 합니다:
DELETE test_split_source
PUT /test_split_target/_alias/test_split_sourcetest_split_source 별칭을 test_split_target 인덱스에 추가한 후 이를 테스트해야 합니다:
GET test_split_source
POST test_split_source/_doc
{
"test": "test"
}방법 2 - 재인덱스 API 사용
리인덱스 API로 새 인덱스를 생성하면 기본 샤드 개수를 얼마든지 지정할 수 있습니다. 원하는 수의 기본 샤드로 새 인덱스를 생성한 후, 소스 인덱스의 모든 데이터를 이 새 인덱스로 다시 색인할 수 있습니다.
분할 API 기능 외에도, 재인덱스 AP의 ingest_pipeline을 사용하여 데이터를 조작할 수 있습니다. 수집 파이프라인을 사용하면 필터에 맞는 지정된 필드만 쿼리를 사용하여 대상 인덱스로 색인됩니다. 간편한 스크립트를 사용하여 데이터 콘텐츠를 변경할 수 있으며, 여러 인덱스를 단일 인덱스로 병합할 수 있습니다.
재색인 API 구현하기
테스트 재인덱스를 만듭니다:
POST test_reindex_source/_doc
{
"test": "test"
}소스 인덱스에서 설정 및 매핑을 복사합니다:
GET test_reindex_source설정, 매핑, 원하는 샤드 수로 대상 인덱스를 생성합니다:
PUT test_reindex_target
{
"mappings" : {},
"settings": {
"number_of_shards": 10,
"number_of_replicas": 0,
"refresh_interval": -1
}
}*주: number_of_replicas: 0, refresh_interval: -1로 설정하면 재인덱싱 속도가 빨라집니다.
재색인 프로세스를 시작합니다. requests_per_second=-1 및 slices=auto를 설정하면 재인덱스 속도가 조정됩니다.
POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{
"source": {
"index": "test_reindex_source"
},
"dest": {
"index": "test_reindex_target"
}
}재인덱스 API를 실행하면 task_id를 볼 수 있습니다. 이를 복사하여 _tasks API로 확인합니다:
GET _tasks/<task_id>재색인 작업이 완료된 후 설정을 업데이트합니다:
PUT test_reindex_target/_settings
{
"number_of_replicas": 1,
"refresh_interval": "1s"
}원본 인덱스를 삭제하기 전에 소스 인덱스와 대상 인덱스 docs.count를 확인하면 동일해야 합니다:
GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.count인덱스 이름과 별칭 이름은 같을 수 없습니다. 소스 인덱스를 삭제하고 소스 인덱스 이름을 대상 인덱스에 별칭으로 추가합니다:
DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_sourcetest_split_source 별칭을 test_split_target 인덱스에 추가한 후 다음을 사용하여 테스트합니다:
GET test_reindex_source요약
기존 인덱스의 기본 샤드 수를 늘리려면 새 인덱스에 대한 설정과 매핑을 다시 만들어야 합니다. 이를 위한 두 가지 주요 방법은 재색인 API와 분할 API입니다. 두 방법 중 하나를 사용하기 전에 활성 인덱싱을 중지해야 합니다.




