Elasticsearch集群某一节点分片数为0

Elasticsearch集群某节点索引分片为0问题

一、问题描述

接手公司一个Elasticsearch集群,平时使用没啥问题,今天查看自己配置的索引生命周期是否正确,通过kibana发现某一节点的分片数为0,如图

从图中可以看出最后一个节点分片数为0,也就是集群中有一个节点一直没有写入数据;
所以,我打开了elasticsearch-head直观的看一下,如图:

二、问题分析

其实在图一中,就能看出问题。问题节点的磁盘使用率达到了96%,根据Elasticsearch官网的说明:

当磁盘使用率达到95%,该节点将被设置为只读节点,也就是无法写入数据,因此也就不会有ES的分片分配到该节点上。
查看磁盘使用情况:

  • elasticsearch.yml查看数据存放磁盘路径:

path.data: /elk/elasticsearch

  • 查看所在目录磁盘使用情况:
    • 看到/vdata磁盘只用97G的空间;
    • /vdata/promdata 占用了96G,也就是其他应用的数据存储目录和es指定到同一目录,并且占用了大量的磁盘空间,因此留给/vdata/elasticsearch的空闲空间就很小了,此处就是该节点为什么没有分片的原因;

三、解决办法

此处的解决办法可能存在一下几种
(1)修改elasticsearch集群参数"cluster.routing.allocation.disk.watermark.flood_stag"95%的上限比例;
(2) 扩展/vdata的大小;
(3) 将该节点的数据存储目录配置到其他空闲的目录
因为自己发现在该节点没有任何数据,所以选择了方案三,将数据目录修改到其他磁盘目录。

四、验证

修改完该节点的磁盘目录,重启服务,发现其他节点将分片重新迁移到该节点,分片迁移后分片和副本均匀的分配到三个节点了,如图:

五、总结

(1)在部署应用的时候,要熟悉知道每个应用的数据大小;
(2)不同应用的数据存储目录分开指定,避免不同应用相互影响,并且方便后续针对应用做磁盘空间的扩容。

posted @ 2021-03-17 17:22  星星满天  阅读(869)  评论(0编辑  收藏  举报