文章目录
1. 情况
ES分片有一些未分配成功,集群状态处于黄色
我们可以通过以下api查看分片情况
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason
通过返回值可以看到分片未分配的原因,一般有以下几个:
- INDEX_CREATED:由于创建索引的API导致未分配。
- CLUSTER_RECOVERED :由于完全集群恢复导致未分配。
- INDEX_REOPENED :由于打开open或关闭close一个索引导致未分配。
- DANGLING_INDEX_IMPORTED :由于导入dangling索引的结果导致未分配。
- NEW_INDEX_RESTORED :由于恢复到新索引导致未分配。
- EXISTING_INDEX_RESTORED :由于恢复到已关闭的索引导致未分配。
- REPLICA_ADDED:由于显式添加副本分片导致未分配。
- ALLOCATION_FAILED :由于分片分配失败导致未分配。
- NODE_LEFT :由于承载该分片的节点离开集群导致未分配。
- REINITIALIZED :由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。
- REROUTE_CANCELLED :作为显式取消重新路由命令的结果取消分配。
- REALLOCATED_REPLICA :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。
2. 继续深究
我的错误是NODE_LEFT和REPLICA_ADDED,NODE_LEFT很明显是节点挂掉了,但是REPLICA_ADDED等其他原因具体是什么呢,这就要借助官方API一探究竟。
Cluster allocation explain API
GET /_cluster/allocation/explain?pretty
这个API会返回未分配索引每个节点的详情,其中就有未分配的原因
explanation
the shard cannot be allocated on host address 21.21.21.21,where it already exists on node[--gtasdasd7tRY#sd], set cluster setting [cluster.routing.allocation.same_shard.host] to false to allow multiple nodes on the same host to hold the same shard copies
翻译
不能在主机地址21.21.21.21上分配分片,分片已经存在于节点[——gtasdasd7tRY#sd]上,设置集群设置[cluster.routing.allocation.same_shard]。允许同一主机上的多个节点持有相同的碎片副本
这就很明显告诉你怎么解决这个错误了。
- cluster.routing.allocation.same_shard.host: 是否启用对同一分片在同一个主机上出现多个分配实例的检测。默认false。这个选项只有在同一个node上启动多个es实例的情况下才有意义。
3. 解决此问题用到的知识
干货 | Elasticsearch 集群健康值红色终极解决方案
elasticsearch【cat API,系统数据】指令汇总
项目推荐
IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。开源项目,持续更新中,喜欢请 Star~