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)不同应用的数据存储目录分开指定,避免不同应用相互影响,并且方便后续针对应用做磁盘空间的扩容。