1. 程式人生 > >Elasticsearch磁碟佔用大於95%時將所有索引置為只讀

Elasticsearch磁碟佔用大於95%時將所有索引置為只讀

Elasticsearch解除索引只讀,取消只讀模式。

作者:草小誠
轉載請注原文地址:https://blog.csdn.net/cxcjoker7894/article/details/84504418

一個穩定執行的功能忽然收到報錯,查明原因是在向Elasticsearch中插入文件時報錯:

AuthorizationException: AuthorizationException(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];'
)

網上也有其他人報TransportError:

TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];')

看錯誤資訊大意是要操作的索引是隻讀的,不能進行插入或刪除。
可是這個索引自從建立,從來也沒有修改過配置,為什麼忽然報錯呢?
從stackoverflow上查到,當Elasticsearch所在磁碟佔用大於等於95%時,Elasticsearch會把所有相關索引自動置為只讀。(Elasticsearch官方文件有介紹

那麼檢視設定(以本機部署9200為例):

curl -GET 'localhost:9200/index_name/_settings?pretty'

返回資訊:

{
  "index_name" : {
    "settings" : {
      "index" : {
        "number_of_shards" : "5",
        "blocks" : {
          "read_only_allow_delete" : "true"
        },
        "provided_name" : "index_name",
        "creation_date"
: "1516454800021", "number_of_replicas" : "1", "uuid" : "6WjhtrARTOOjsEUaOqNzlw", "version" : { "created" : "6010199" } } } } }

發現確實這個索引的 read_only_allow_delete 屬性是 true,由此導致了無法再向其中插入文件。

解決方案有兩種:
1.清理磁碟,使佔用低於95%。
2.調整自動鎖閥值,官方文件中有詳盡方法

建議採用第一種,注意解決之後,需要手動把被鎖的索引的只讀模式關閉。

按照官檔去關閉只讀模式有坑,HTTP請求頭Content-Type如果不對會報錯:

curl -XPUT 'localhost:9200/index_name/_settings'  -d '{"index.blocks.read_only_allow_delete": null}'
{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}

所以自定一下Content-Type,返回成功:

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

再去檢視配置資訊:

{
  "index_name" : {
    "settings" : {
      "index" : {
        "creation_date" : "1516454800021",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "6WjhtrARTOOjsEUaOqNzlw",
        "version" : {
          "created" : "6010199"
        },
        "provided_name" : "index_name"
      }
    }
  }
}

已經OK了。
再看專案,寫入已經正常,問題解決完畢。

在生產環境中,還是要確保磁碟的使用率不能過高,尤其是系統盤,資料的儲存還是儘量放到掛載的大硬碟下。