[elasticsearch] Elasticsearch 오류 : cluster_block_exception [FORBIDDEN / 12 / 인덱스 읽기 전용 / 삭제 허용 (api)], 플러드 단계 디스크 워터 마크 초과

Elasticsearch에 문서를 정상적으로 게시하려고 할 때 다음 오류가 발생합니다.

cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)];

Elasticsearch 로그에도 다음 메시지가 표시됩니다.

flood stage disk watermark [95%] exceeded ... all indices on this node will marked read-only



답변

이는 Elasticsearch가 디스크 공간이 부족하다고 판단하여 읽기 전용 모드로 전환 될 때 발생합니다.

기본적으로 Elasticsearch의 결정은 여유 디스크 공간 의 백분율 을 기반으로 하므로 대용량 디스크에서는 여유 공간이 많은 경우에도 발생할 수 있습니다.

플러드 단계 워터 마크는 기본적으로 95 %이므로 1TB 드라이브에서는 최소 50GB의 여유 공간이 필요합니다. 그렇지 않으면 Elasticsearch가 자체적으로 읽기 전용 모드로 전환됩니다.

홍수 단계 워터 마크에 대한 문서는 https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html을 참조 하십시오 .

올바른 솔루션은 컨텍스트에 따라 달라집니다 (예 : 프로덕션 환경과 개발 환경).

해결 방법 1 : 디스크 공간 확보

디스크의 5 % 이상을 사용할 수 있도록 충분한 디스크 공간을 확보하면이 문제가 해결됩니다. Elasticsearch는 충분한 디스크가 사용 가능 해지면 자동으로 읽기 전용 모드에서 벗어나지 않습니다. 인덱스를 잠금 해제하려면 다음과 같이해야합니다.

$ curl -XPUT -H "Content-Type: application/json" https://[YOUR_ELASTICSEARCH_ENDPOINT]:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

해결 방법 2 : 홍수 단계 워터 마크 설정 변경

"cluster.routing.allocation.disk.watermark.flood_stage"설정을 다른 것으로 변경하십시오 . 더 낮은 백분율 또는 절대 값으로 설정할 수 있습니다. 다음 은 문서 에서 설정을 변경하는 방법의 예입니다 .

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "100gb",
    "cluster.routing.allocation.disk.watermark.high": "50gb",
    "cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
    "cluster.info.update.interval": "1m"
  }
}

이 작업을 수행 한 후에는 위의 curl 명령을 사용하여 인덱스를 잠금 해제해야하지만 그 후에는 다시 읽기 전용 모드로 전환되지 않아야합니다.


답변

기본적으로 설치된 Elasticsearch는 사용 가능한 디스크 공간이 5 % 미만인 경우 읽기 전용 모드로 전환됩니다. 다음과 유사한 오류가 표시되는 경우 :

Elasticsearch :: Transport :: Transport :: 오류 :: 금지 : [403] { “error”: { “root_cause”: [{ “type”: “cluster_block_exception”, “reason”: “차단 자 : [FORBIDDEN / 12 / 인덱스 읽기 전용 / 삭제 허용 (api)]; “}],”type “:”cluster_block_exception “,”reason “:”차단 자 : [FORBIDDEN / 12 / index read-only / allow delete (api)]; ” }, “상태”: 403}

또는 /usr/local/var/log/elasticsearch.log에서 다음과 유사한 로그를 볼 수 있습니다.

[nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib / elasticsearch / nodes / 0]에서 플러드 단계 디스크 워터 마크 [95 %] 초과 : 15.3GB [4.1 %],이 노드의 모든 인덱스는 읽기로 표시됩니다. -뿐

그런 다음 다음 명령을 실행하여 수정할 수 있습니다.

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'


답변

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

에서

https://techoverflow.net/2019/04/17/how-to-fix-elasticsearch-forbidden-12-index-read-only-allow-delete-api/


답변