1、集群存儲資源高水位 異常
Caused by: org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177)
at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:653)
at org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:628)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:535)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:508)
at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:348)
at com.cy.es.connection.ClientProxy.index(ClientProxy.java:118)
at com.cy.es.connection.CyESClient.index(CyESClient.java:91)
at
當Elasticsearch集群中有節點掛掉,我們可以去查看集群的日志信息查找錯誤,不過在查找錯誤日志之前,我們可以通過elasticsearch的cat api簡單判斷下各個節點的狀態,包括磁盤,heap,ram的使用情況,先做初步判斷。
查看集群資源使用情況
get /_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master
eg:
localhost:9200/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master
返回:
http version jdk disk.total disk.used disk.avail disk.used_percent heap.current heap.percent heap.max ram.current ram.percent ram.max master
10.0.0.4:9200 6.3.1 1.8.0_181 29gb 3.3gb 25.6gb 11.72 254mb 7 3.3gb 6.2gb 92 6.8gb -
10.0.0.5:9200 6.3.1 1.8.0_181 29gb 3.3gb 25.6gb 11.71 195.5mb 5 3.3gb 6.2gb 91 6.8gb -
10.0.0.6:9200 6.3.1 1.8.0_181 29gb 3.4gb 25.6gb 11.74 293.6mb 8 3.3gb 6.2gb 92 6.8gb *
此處的disk占用,heap使用量等都是監測集群狀態的關鍵參數,更多參數可以官網cat node api參考此處。
說明: 磁盤空間大於95%時,es會啟動保護機制,設置成只讀模式,導致es自動關閉了索引的寫功能,只能進行讀取或者刪除。
需要手動擴容或者刪除沒必要數據;集群正常后,需要對指定索引執行如下命令
PUT /index/_settings
{
"index.blocks.read_only_allow_delete": null
}
或者:
PUT /index/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
全部索引:
PUT /*/_settings
{
"index.blocks.read_only_allow_delete": null
}
或者
PUT _settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
全部索引:
指定索引:
一旦在存儲超過95%的磁盤中的節點上分配了一個或多個分片的任何索引,該索引將被強制進入只讀模式,所以新產生的日志不能入庫,也不能清除。
2、系統資源配置問題
問題:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決辦法:
1. 修改配置sysctl.conf
sudo vi /etc/sysctl.conf
添加如下配置:
vm.max_map_count=655360
執行命令:
sudo sysctl -p
重新啟動elasticsearch,即可啟動成功。
=====================================================
問題:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
原因:普通用戶執行問題
解決:切換到root用戶,編輯
/etc/security/limits.conf
添加,重啟永久生效
# (elasticsearch 是用戶名)
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536
=====================================================
問題:
max number of threads [1024] for user [elk] is too low, increase to at least [2048]
原因:普通用戶執行操作數低
解決:切換到root用戶,進入limits.d目錄下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下內容:
* soft nproc 1024
#修改為
* soft nproc 2048
或者
切換到root用戶,編輯limits.conf 添加類似如下內容
vi /etc/security/limits.conf
添加如下內容:(針對所有用戶生效)
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
要重新登錄生效