Infra & Devops/ElasticSearch
[ElasticSearch] cluster.routing.allocation.disk.watermark.low / cluster.routing.allocation.disk.watermark.high / cluster.routing.allocation.disk.watermark.flood_stage
겸둥이xz
2023. 3. 7. 19:30
반응형
cluster.routing.allocation.disk.watermark.low
- 기본값은 85%이며, 디스크 사용량 85%를 초과하는 노드에 샤드를 할당하지 않는다.
- 비율 값(예: 0.85)으로도 설정 가능하며, 절대 byte 값(예: 500MB)으로 설정도 가능.
- 새로 생성된 primary shards에는 영향을 주진 않고, replica가 할당되는 것을 방지한다.
- 모든 노드가 low watermark를 초과하면 새로운 shards 할당 불가.
cluster.routing.allocation.disk.watermark.high
- 기본값은 90%이며, 디스크 사용량 90%를 초과하는 노드에서 일부 shards를 다른 노드로 이동시킴.
- low watermark처럼 비율 값, 절대 값으로 설정 가능.
cluster.routing.allocation.disk.watermark.flood_stage
- 기본값은 95%이며, 디스크 사용량 95%를 초과하는 노드에 할당된 모든 인덱스를 read-only 상태로 만듦.
- read-only 상태가되면 아래와 같은 에러가 발생하며 인덱싱을 멈춤.
Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]
- 디스크 공간을 확보하고, 아래 명령어를 통해 read-only 를 해제 가능.
# 모든 read-only 인덱스에 대하여
curl -XPUT -H "Content-Type: application/json" \
localhost:9200/_all/_settings \
-d '{"index.blocks.read_only_allow_delete": false}'
# 특정 read-only 인덱스에 대하여
curl -XPUT -H "Content-Type: application/json" \
localhost:9200/${INDEX}/_settings \
-d '{"index.blocks.read_only_allow_delete": false}'
예시 : watermark.low 를 초과한 경우
# watermark.low : 90%로 설정되어 있음
{
"persistent" : {
"cluster.routing.allocation.disk.threshold_enabled" : "true",
"cluster.routing.allocation.disk.watermark.high" : "95%",
"cluster.routing.allocation.disk.watermark.low" : "90%",
...
..
.
},
# 모든 노드 디스크 사용량 91%로 watermark.low : 90%를 초과
xxx-data01 91% (1606/1776GB)
xxx-data02 91% (1605/1776GB)
xxx-data03 91% (1604/1776GB)
xxx-data04 91% (1605/1776GB)
# 새로운 replica shards 할당 불가
xxx-index 3 r UNASSIGNED
xxx-index 2 r UNASSIGNED
xxx-index 1 r UNASSIGNED
xxx-index 0 r UNASSIGNED
해결 방법
- 오래된 인덱스를 제거.
- ILM(Index Lifecycle Management) 등을 이용하여 데이터 보관 주기 조정.
- 데이터 노드 추가.
- 그 외 여러가지 방법...
반응형