[Elasticsearch] 디스크 기반 shard allocation

2019. 9. 2. 18:32Elasticsearch

디스크 용량 관련 shard allocation에 문제가 있어 관련 설정을 docs에서 찾아본 김에 포스팅

((https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html)

 

엘라스틱서치는 새로운 샤드를 어디에 할당할지 결정하기전에 노드의 사용 가능한 디스크 공간을 고려함

 

elasticsearch.yml 파일을 통해 수정하고 재시작하거나 cluster-update-setting API를 통해 live 상태의 클러스터도 변경할 수 있음

 

cluster.routing.allocation.disk.threshold_enable

 

디폴트로 true. 디스크 할당자(disk allocation decider) diasble하려면 false

cluster.routing.allocation.disk.watermark.low


디폴트로 85%. 디스크가 85% 이상 사용중이면 해당 노드에 샤드를 할당하지 않겠다는 의미
500mb와 같이 절대값 바이트로 설정할 수도 있음

 

cluster.routing.allocation.disk.watermark.high


디폴트로 90%. 해당 노드의 디스크 사용량이 90% 이상이면 샤드를 relocate한다는 의미
watermark.low와 마찬가지로 500mb와 같이 절대값 바이트로 설정할 수도 있음

 

cluster.routing.allocation.disk.watermark.flood_stage


디폴트로 95%. 사용량이 95%를 넘는 디스크를 가진 노드에 할당된 하나 이상의 샤드를 가진 모든 인덱스를 read-only로 block(index.blocks.read_only_allow_delete)
노드에 디스크 공간이 부족하지 않도록 방지하는 최후의 수단
인덱싱을 계속하기 위해 이렇게 block된 인덱스는 사용 가능한 공간을 마련한 뒤 아래와 같이 수동으로 풀어줘야함

curl -X PUT "localhost:9200/twitter/_settings?pretty" -H 'Content-Type: application/json' -d'
{
  "index.blocks.read_only_allow_delete": null
}
'


※ 위의 설정들에 대해 퍼센트값과 절대값 바이트를 섞어서 쓸 수는 없음
※ 백분율값은 사용된 디스크 공간을 의미, 바이트값은 사용 가능한 디스크 공간을 의미하므로 혼란스러울 수 있으니 유의해서 사용
ex. watermark.low = 100GB, watermark.high = 50GB, watermark.flood_stage = 10GB 정도로 설정하는 것이 합리적

 

cluster.info.update.interval


디폴트로 30초. 엘라스틱서치가 클러스터 내 각 노드에 디스크 사용량을 체크하는 간격

 

cluster.routing.allocation.disk.include_relocations


디폴트로 true. 엘라스틱서치가 노드의 디스크 사용량을 계산할 때 해당 노드로 현재 relocate 중인 샤드도 고려한다는 의미