Elasticsearch磁碟佔用大於95%時將所有索引置為只讀
阿新 • • 發佈:2019-01-03
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了。
再看專案,寫入已經正常,問題解決完畢。
在生產環境中,還是要確保磁碟的使用率不能過高,尤其是系統盤,資料的儲存還是儘量放到掛載的大硬碟下。