IT/elasticsearch

elasticsearch disk watermark 란 ? 그리고 사용방법

할일없는라이프 2023. 9. 3. 08:35

안녕하세요 elasticsearch에는 Disk watermark 기능입니다.
이 기능은 ElasticSearch의 노드 디스크가 100%가 되는것을 막기 위한 ElasticSearch의 주요 기능입니다.  
특히 모니터링 시스템에 elasticsearch를 사용하다 보면 들어오는 로그보다 ILM에서 삭제되는 로그보다 많아서 디스크가 생각보다 빠르게 증가합니다. 그리고 노드 중에 하나라도 일정 수치 이상이 넘어가면 watermark 가 동작합니다. 

disk watermark 

디스크 워터마크에 여러 가지 설정이 있지만 쓴이가 사용하는 옵션은 보통 세 가지 정도를 사용합니다.  

정책(기본값) 설명
disk.watermark.low(85%) 노드에 추가 샤드의 생성을 중지합니다.
disk.watermark.high(90%) 노드에 있는 샤드를 다른 노드로 이동하려고 시도합니다. 
disk.watermark.flood_stage(95%) 모든 노드의 인덱싱을 read-only로 변경합니다.

위에 표처럼 ElasticSearch의 watermark는 3단계 low, high flood_stage로 나눠집니다. 

LOW

특정 노드가 low영역까지 디스클 사용하단다면 추가도 더 이상의 샤드를 배정받지 않습니다. (신규, allocation 동일) ,
기존에 새성된 샤드에 데이터는 ILM조건의 의해 변경되기 전까지 동작합니다. 

HIGH

그리고 샤드가 high의 영역에 들어가면 해당 노드의 shard를 ElasticSearch의 다른 노드로 이동시키려고 시도합니다. 

FLOOD_STAGE

노드의 사용량이 flood_stage이상 사용하다면  ElasticSearch의 모든 인덱스는 리드온니 상태가 되어서 더 이상의 추가 인덱싱 작업이 발생할 수 없게 됩니다. 
flood_stage상태가 되면 보통 서버의 장애로 인식되며 조치를 치해야 합니다. (인덱스 삭제, 설정 변경, 강제리드온니 종료) flood_stage의 경우 disk의 용량이 high가 되면 걸렸던 lock가 해지하게 됩니다. 

해결방법

보통 API를 통해 인덱스를 삭제하거나, ILM에 의해서 일부 인덱스가 삭제되면 해결이 되나 
빠른 처리를 위해서는 보통 일부 용량 확보후 명령어로 lock을 풀게 됩니다. 

PUT */_settings
{
  "index.blocks.read_only_allow_delete": null
}

그리고 보통 노드의 디스가 많이 적을경우에는 watermark정책을 변경하는 경우도 있으며 
워터마크 설정 변경을 위해서는 아래 설정 방법을 적용하면 됩니다. 

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "80%",
    "cluster.routing.allocation.disk.watermark.high": "85%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "98%"
   }

}