Lỗi Elasticsearch: cluster_block_exception [FORBIDDEN / 12 / index read-only / allow delete (api)], vượt quá hình mờ đĩa giai đoạn lũ


107

Khi cố gắng đăng tài liệu lên Elasticsearch như bình thường, tôi gặp lỗi này:

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

Tôi cũng thấy thông báo này trên nhật ký Elasticsearch:

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

Tôi chỉ gặp vấn đề này khi bạn đặt câu hỏi này. ES thảo luận về việc giải phóng bộ nhớ
Abhijith S

Câu trả lời:


212

Điều này xảy ra khi Elasticsearch cho rằng đĩa sắp hết dung lượng nên nó tự chuyển sang chế độ chỉ đọc.

Theo mặc định, quyết định của Elasticsearch dựa trên phần trăm dung lượng ổ đĩa trống, vì vậy trên các ổ đĩa lớn, điều này có thể xảy ra ngay cả khi bạn có nhiều GB dung lượng trống.

Hình mờ giai đoạn ngập lụt là 95% theo mặc định, vì vậy trên ổ đĩa 1TB, bạn cần ít nhất 50GB dung lượng trống hoặc Elasticsearch sẽ tự chuyển sang chế độ chỉ đọc.

Để biết tài liệu về hình mờ giai đoạn ngập lụt, hãy xem https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html .

Giải pháp phù hợp phụ thuộc vào bối cảnh - ví dụ môi trường sản xuất so với môi trường phát triển.

Giải pháp 1: Giải phóng dung lượng ổ đĩa

Giải phóng đủ dung lượng ổ đĩa sao cho hơn 5% ổ đĩa trống sẽ giải quyết được vấn đề này. Tuy nhiên, Elasticsearch sẽ không tự động thoát khỏi chế độ chỉ đọc khi đủ đĩa trống, bạn sẽ phải làm điều gì đó như sau để mở khóa các chỉ số:

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

Giải pháp 2: Thay đổi cài đặt hình mờ giai đoạn lũ lụt

Thay đổi "cluster.routing.allocation.disk.watermark.flood_stage"cài đặt thành một cái gì đó khác. Nó có thể được đặt thành phần trăm thấp hơn hoặc thành giá trị tuyệt đối. Dưới đây là một ví dụ về cách thay đổi cài đặt từ tài liệu :

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"
  }
}

Một lần nữa, sau khi thực hiện việc này, bạn sẽ phải sử dụng lệnh curl ở trên để mở khóa các chỉ số, nhưng sau đó chúng sẽ không chuyển sang chế độ chỉ đọc nữa.


8
Chào. Nhưng tôi gặp lỗi này, ngay cả khi có đủ dung lượng trống trong hệ thống của tôi. Có những lý do nào khác có thể báo cáo vấn đề này không?
Sankalpa Timilsina

Tôi gặp vấn đề tương tự, mặc dù tôi có 82,43% đĩa. Tôi sửa nó bằng lệnh curl nhưng sau một vài ngày, tôi vẫn nhận được như vậy.
manu

@SankalpaTimilsina bạn đã nhận được câu trả lời chưa, tôi đang gặp phải vấn đề tương tự.
Malik Faiq

52

Theo mặc định, Elasticsearch được cài đặt sẽ chuyển sang chế độ chỉ đọc khi bạn có ít hơn 5% dung lượng đĩa trống. Nếu bạn thấy các lỗi tương tự như sau:

Elasticsearch :: Transport :: Transport :: Errors :: Forbidden: [403] {"error": {"root_cause": [{"type": "cluster_block_exception", "reason": "bị chặn bởi: [FORBIDDEN / 12 / chỉ mục chỉ đọc / cho phép xóa (api)]; "}]," loại ":" cluster_block_exception "," lý do ":" bị chặn bởi: [FORBIDDEN / 12 / index read-only / allow delete (api)]; " }, "trạng thái": 403}

Hoặc trong /usr/local/var/log/elasticsearch.log, bạn có thể thấy các nhật ký tương tự như:

Đã vượt quá hình mờ đĩa giai đoạn lũ [95%] trên [nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / local / var / lib /asticsearch / node / 0] free: 15.3gb [4.1%], tất cả các chỉ số trên nút này sẽ được đánh dấu là đã đọc -chỉ có

Sau đó, bạn có thể sửa nó bằng cách chạy các lệnh sau:

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}'

Điều này hoạt động tốt
Java Main

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

TỪ

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


Tôi nhận được {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist"lệnh của bạn, có ý kiến ​​gì không?
Cyril Duchon-Doris

1
Cảm ơn! Đĩa của tôi đã hết dung lượng. Ngay cả sau khi tôi giải phóng một số không gian, vấn đề vẫn còn. Lệnh này đã giải quyết vấn đề của tôi!
Fred

Đây là giải pháp chính xác cho các phiên bản Elasticsearch hiện đại. Tuy nhiên, nó không hoạt động với _all. Tôi đã phải áp dụng nó cho từng chỉ mục theo cách thủ công.
rubik

@rubik bạn có thể vui lòng đề cập đến cách bạn "áp dụng nó cho từng chỉ mục theo cách thủ công" không? Tôi là người mới trên Elasticsearch và đang gặp phải vấn đề tương tự trong đó _all không hoạt động.
rom

@rom Chắc chắn. Chỉ cần thay thế _allbằng tên chỉ mục và lặp lại yêu cầu cho từng chỉ mục.
rubik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.