1 minute read

바로 이전 포스팅에서 unassigned shard 를 처리하는 몇가지 방법에 대해 알아보았다.

그중 4번째, 클러스터에 샤드 데이터가 더이상 존재하지 않는 경우 에서 말한것 처럼 Cluster reoute API 에는 완전히 새로운 shard 로 교체하는 방법외에도 다른 reroute 방법을 제공한다.

그럼 한번 알아보도록 하자.

Cluster reroute API

클러스터 안의 샤드 할당을 변경하는 API.

POST /_cluster/reroute?metric=none

reroute 명령어를 사용하면, 클러스터 안의 개별 shard 들을 수동으로 변경할 수 있다.

에로 API 를 사용하면 아래와 같은 일들을 할 수 있는데,

  • shard 간의 노드 변경
  • shard의 할당 취소
  • unassigned shard 를 특정 노드에 명시적으로 할당 하는것들이 가능하다.

reroute 명렬어를 처리 한후 Elasticsearch는 균형을 유지하기 위해 (cluster.routing.rebalance.enable 과 같은 설정 값을 고려하여) 정상적으로 재조정을 한다.

만약 특정 shard가 node1 에서 node2로 이동한다면, 이것은 node2에서 node1으로 shard 이동이 발생하여, 균등하게 처리될수 있다는점이다.

dry_run Parameter

dry_run URI query parameter 또는 body에 값을 dry_run: true 값을 reroute 명령어에 추가하여 사용할 수 있다. 이 Parameter를 적용하면, 현재 cluter 상태에 적용한 결과가 계산되고, 명령이 적용되고 re-balancing이 완료된 후의 cluster 상태가 반환되지만, 실제 요청은 반영되지 않는다.

index.allocation.max_retries

cluster는 shard가 allocation 될때, 실패하더라도 바로 unassigned 상태로 만드는것이 아닌, index.allocation.max_retries에 설정된 값(Default: 5) 번 만큼 할당 시도를 한다. 이러한 시나리오는 모든 Node에 존재하지 않고 일부에만 존재하는 Stopword 파일을 참조하는 Analyzer가 있는 것과 같은 구조적인 문제로 인해 발생할 수 있다. (나는 plugin 이 특정 노드에 설치가 안되어 있어서 발생했음,, 요러한 구조 문제)

문제들이 해결된다면, route API의 retry_failed URI query parameter 를 통해 수동으로 allocation을 재시도할 수 있다. 이러한 경우 이러한 샤드에 대하여 단 한 번의 재시도 된다.

Query Parameter

  • dry_run
    • (Optional, Boolean) 값이 true 라면, Request를 시뮬리테이팅 ㅎ여 결과 상태를 리턴해준다.
  • explain
    • (Optional, Boolean) 값이 true 라면, Response에 실행에 대한 설명 또는 실행이 불가한 설명이 포함된다.
  • retry_failed
    • (Optional, Boolean) 값이 true 라면, 연속된 할당 실패로 인해 차단된 shard 할당을 다시 시도한다.
  • master_timeout
    • (Optional, time units) 마스터 Node에 대한 연결을 기다리는 기간, 시간이 만료되기 전에 응답을 받지 못하면, 요청이 실패하고 오류를 바환한다.
    • 기본값 30초