问题描述

某现网ElasticSearch 故障,很长时间unassgined_shards的数量都不减少。

ElasticSearch 7.x现网运行问题汇集3-LMLPHP

原因分析与解决方案:

先了解整体状态,使用Postman请求,如下几个请求命令:

  1. GET /_cat/indices
  2. GET /_cat/shards
  3. GET /_cluster/health
  4. GET /_cat/nodes?v
  5. GET /_cat/health?v
  6. GET /_cluster/allocation/explain
    ElasticSearch 7.x现网运行问题汇集3-LMLPHP
  7. POST /_cluster/reroute?retry_failed=true
    ElasticSearch 7.x现网运行问题汇集3-LMLPHP
    恢复了部分,但是还是有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里的内容:

{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

第二步
systemctl stop elasticsearchkill {es的pid},注意不是kill -9
这时候要等,通过ps -ef | grep elasticsearch看进程结束没。
进程结束后,再进入第三步。

第三步
systemctl start elasticsearchsu - esuser进入elasticsearch的bin目录,执行./elasticsearch -d命令

观察es的日志,直到它加入集群,再重启下一台。

重复2、3两步,全部节点重启完成后执行
第四步

PUT  /_cluster/settings
{
   "transient" : {
       "cluster.routing.allocation.enable" : "all"
   }
 }
01-26 01:53