问题描述
某现网ElasticSearch 故障,很长时间unassgined_shards的数量都不减少。
原因分析与解决方案:
先了解整体状态,使用Postman请求,如下几个请求命令:
-
GET /_cat/indices
-
GET /_cat/shards
-
GET /_cluster/health
-
GET /_cat/nodes?v
-
GET /_cat/health?v
-
GET /_cluster/allocation/explain
-
POST /_cluster/reroute?retry_failed=true
恢复了部分,但是还是有shards没恢复,取回/_cluster/allocation/expain的response,才发现日志显示:"disk_threshold","the node is above the low watermark cluster setting [cluster.routing.allocation.disk.watermark.low=85%], using more disk space than the maximum allowed [85.0%], actual free: [12.239612269812415%]"
确认了分片无法指向的原因是节点磁盘使用率超过85%,即安排磁盘扩容,然后再重启ES集群解决。具体操作重启步骤:
第一步 :PUT /_cluster/settings
Body里的内容:
json
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
第二步 :
systemctl stop elasticsearch
或kill {es的pid}
,注意不是kill -9
这时候要等,通过ps -ef | grep elasticsearch
看进程结束没。
进程结束后,再进入第三步。
第三步 :
systemctl start elasticsearch
或su - esuser进入elasticsearch的bin目录,执行./elasticsearch -d命令
观察es的日志,直到它加入集群,再重启下一台。
重复2、3两步,全部节点重启完成后执行
第四步:
json
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}