1. 现象:
问题如图片类似,后台启动ES集群,由三个节点组成,集群健康值为 yellow,节点只有主分片,副本状态为:Unassigned

2. 原因:
在ES磁盘分配分片控制策略中,为了保护数据节点的安全,ES对磁盘进行了限额,并会定时检查各节点数据目录的使用情况:
cluster.info.update.interval // 默认30秒
在达到
cluster.routing.allocation.disk.watermark.low // 默认85%
时,新索引分片就不会分配到这个节点上了。在达到
cluster.routing.allocation.disk.watermark.high // 默认 90%
时,就会触发该节点现存分片的数据均衡,把数据挪到其他节点上去。
通过shell 客户端执行 df -h ,查询到es集群所在的路径 /home/app 的磁盘使用率 Use%值为 86%,超过了最低值 85%,导致重启后,副本索引分片不会分配到es集群中的节点上。
3. 如何修改:
方案一:
删除es集群所在路径不必要大文件,如旧的日志文件,临时文件等,使 Use% 值小于 85%。
方案二:
修改 ES分片控制策略,提高cluster.routing.allocation.disk.watermark.low的值,该值大于当前 ES 集群所在路径 %Use的值。
修改示例:
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "90%",
"cluster.routing.allocation.disk.watermark.high": "95%"
}
}'
或使用postman

4. 参考:
elasticsearch问题解决之分片副本Unassigned: https://www.cnblogs.com/carryLess/p/9452000.html
《kibana中文指南》中ElasticSearch- 架构原理- shard的allocate控制 章节。
网友评论