एलियस्टिक्स खोज त्रुटि: क्लस्टर_ब्लॉक_एक्सिटेशन [FORBIDDEN / 12 / index read-only / allow delete (api)], बाढ़ चरण डिस्क वॉटरमार्क पार


107

जब मैं यह त्रुटि प्राप्त कर रहा हूं, तो सामान्य रूप से एलिस्टिक्स के लिए डाक पोस्ट करने की कोशिश कर रहा हूं:

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

मैं भी इस संदेश को एलेस्टिक्स खोज लॉग पर देखता हूं:

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

जब आप यह प्रश्न रखेंगे तो मैं इस समस्या में भाग गया। ES ने स्मृति को मुक्त करते हुए चर्चा की
अभिजीत S

जवाबों:


215

यह तब होता है जब एलेस्टिक्स खोज को लगता है कि डिस्क अंतरिक्ष पर कम चल रही है इसलिए यह खुद को केवल-पढ़ने के लिए मोड में रखता है।

डिफ़ॉल्ट रूप से एलिटेसर्च का निर्णय डिस्क स्थान के प्रतिशत पर आधारित है जो मुफ़्त है, इसलिए बड़े डिस्क पर यह तब भी हो सकता है जब आपके पास बहुत सारे गीगाबाइट मुक्त स्थान हो।

बाढ़ चरण वॉटरमार्क डिफ़ॉल्ट रूप से 95% है, इसलिए 1TB ड्राइव पर आपको कम से कम 50GB खाली स्थान की आवश्यकता होती है या एलीस्टेसर्च खुद को रीड-ओनली मोड में डाल देगा।

बाढ़ चरण वॉटरमार्क के बारे में डॉक्स के लिए https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html देखें

सही समाधान संदर्भ पर निर्भर करता है - उदाहरण के लिए उत्पादन वातावरण बनाम विकास का वातावरण।

समाधान 1: डिस्क स्थान खाली करें

पर्याप्त डिस्क स्थान खाली करना ताकि डिस्क का 5% से अधिक मुक्त होना इस समस्या को हल करेगा। काफी समय से डिस्क मुक्त होने के बाद, एलियटसर्च अपने आप ही रीड-ओनली मोड से बाहर नहीं निकलेगा, हालांकि इंडेक्स को अनलॉक करने के लिए आपको कुछ इस तरह करना होगा:

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

फिर, ऐसा करने के बाद आपको सूचकांकों को अनलॉक करने के लिए ऊपर दिए गए कर्ल कमांड का उपयोग करना होगा, लेकिन इसके बाद उन्हें फिर से रीड-ओनली मोड में नहीं जाना चाहिए।


8
नमस्ते। लेकिन मुझे यह त्रुटि मिल रही है, तब भी जब मेरे सिस्टम में पर्याप्त खाली जगह है। क्या अन्य कारण हैं जो इस मुद्दे की रिपोर्टिंग कर सकते हैं?
संकल्प तैमिलिना

मेरे पास एक ही मुद्दा है, हालांकि मेरे पास 82.43% डिस्क उपलब्ध है। मैं इसे कर्ल कमांड के साथ ठीक करता हूं, लेकिन कुछ दिनों के बाद मुझे वही मिल रहा है।
मनुज

@SankalpaTimilsina क्या आपको जवाब मिला, मैं उसी मुद्दे का सामना कर रहा हूं।
मलिक फिक

52

डिफ़ॉल्ट रूप से, स्थापित की गई एलेस्टिक्स खोज केवल-पढ़ने के लिए मोड में होती है जब आपके पास 5% से कम मुक्त डिस्क स्थान होता है। यदि आप इसके समान त्रुटियां देखते हैं:

Elasticsearch :: परिवहन :: परिवहन :: त्रुटियां :: निषिद्ध: [403] {"त्रुटि": {"root_cause": [{"प्रकार": "क्लस्टर_ब्लॉक_एक्सप्शन", "कारण": "द्वारा अवरुद्ध: FORBIDDEN / 12 / index read-only / allow delete (api)]; "}]," टाइप ":" क्लस्टर_ब्लॉक_एक्ससेप्शन "," कारण ":" द्वारा अवरुद्ध: [FORBIDDEN / 12 / index read-only / allow delete (api]; " }, "स्थिति": 403}

या /usr/local/var/log/elasticsearch.log में आप लॉग के समान देख सकते हैं:

बाढ़ चरण डिस्क वॉटरमार्क [95%] [nCxquc7PTxKvs6hLkfonvg] [nCxquc7] [/ usr / स्थानीय / var / lib / elasticsearch / nodes / 0] मुक्त: 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}'

23
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/


मुझे {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [null] and no indices exist"आपकी आज्ञा से, कोई विचार मिल रहा है?
सिरिल डचोन-डोरिस

1
धन्यवाद! मेरी डिस्क अंतरिक्ष से बाहर चल रही थी। मैंने कुछ जगह खाली करने के बाद भी, समस्या अभी भी बनी हुई है। इस कमांड ने मेरी समस्या हल कर दी!
फ्रेड

यह आधुनिक इलास्टिक्स खोज संस्करणों के लिए सही समाधान है। हालाँकि, इसके साथ काम नहीं किया _all। मुझे इसे प्रत्येक सूचकांक पर मैन्युअल रूप से लागू करना था।
रूबिक

@rubik क्या आप उल्लेख कर सकते हैं कि आप "इसे प्रत्येक सूचकांक में मैन्युअल रूप से कैसे लागू करते हैं"? मैं एलीटसर्च पर नया हूं और उसी मुद्दे का सामना कर रहा हूं जहां _all काम नहीं कर रहा है।
रोम

@rom ज़रूर। बस _allइंडेक्स नाम के साथ बदलें , और प्रत्येक इंडेक्स के लिए अनुरोध दोहराएं।
माणिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.