来源:互联网 更新时间:2026-08-23 07:32
Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现
如下集群健康值:red,红色预警状态,同时部分分片都成为灰色。

查看Elasticsearch启动日志会发现如下:
集群服务超时连接的情况。
bserver: timeout notification from cluster service. timeout setting [1m], time since start [1m] 该问题排查耗时很长,问题已经解决。
特将问题排查及解决方案详尽的整理出来。
head插件会用不同颜色来标识集群状态。
1)、绿色——这是最理想、也最健康的状态,说明所有主分片和副本分片都处于可用状态;
2)、黄色——表示所有主分片都正常可用,但仍有一部分副本分片暂时不可用;
3)、红色——说明已经有部分主分片不可用。(这时候去查数据,仍然可能查到一部分结果,但问题已经比较严重了,最好尽快处理。)
参考官网:http://t.cn/RltLEpN(有些中文资料在翻译“集群健康状态”这部分时并不够准确,建议还是以官网说明为准)
如果集群状态为红色, Head插件显示:集群健康值red 。则说明:至少一个主分片分配失败。
这将导致一些数据以及索引的某些部分不再可用。
尽管如此, ElasticSearch还是允许我们执行查询,至于是通知用户查询结果可能不完整还是挂起查询,则由应用构建者来决定。
一句话解释:未分配的分片。
启动ES的时候,通过Head插件不停刷新,你会发现集群分片会呈现紫色、灰色、最终绿色的状态。
如果不能分配分片,例如,您已经为集群中的节点数过分分配了副本分片的数量,则分片将保持UNASSIGNED状态。
其错误码为:ALLOCATION_FAILED。
你可以通过如下指令,查看集群中不同节点、不同索引的状态。
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason head插件查看会:Elasticsearch启动N长时候后,某一个或几个分片仍持续为灰色。
1)INDEX_CREATED:由于创建索引的API导致未分配。2)CLUSTER_RECOVERED :由于完全集群恢复导致未分配。3)INDEX_REOPENED :由于打开open或关闭close一个索引导致未分配。4)DANGLING_INDEX_IMPORTED :由于导入dangling索引的结果导致未分配。5)NEW_INDEX_RESTORED :由于恢复到新索引导致未分配。6)EXISTING_INDEX_RESTORED :由于恢复到已关闭的索引导致未分配。7)REPLICA_ADDED:由于显式添加副本分片导致未分配。8)ALLOCATION_FAILED :由于分片分配失败导致未分配。9)NODE_LEFT :由于承载该分片的节点离开集群导致未分配。10)REINITIALIZED :由于当分片从开始移动到初始化时导致未分配(例如,使用影子shadow副本分片)。11)REROUTE_CANCELLED :作为显式取消重新路由命令的结果取消分配。12)REALLOCATED_REPLICA :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。 接下来的解决方案主要围绕:使主分片unsigned 分片完成再分配展开。
ES中没有直接删除分片的接口,除非整个节点数据已不再使用,删除节点。
curl -XDELETE ‘localhost:9200/index_name/’
N> = R + 1
其中:
N——集群中的节点数量;
R——集群里所有索引的最大副本数。
这里有个关键点:当节点加入或离开集群时,主节点会自动重新分配分片,目的很明确,就是保证同一个分片的多个副本不会落到同一台节点上。说得更直白一点,主节点不会把主分片和它的副本分配到同一个节点上,也不会把同一分片的两个副本放在同一个节点上。
一旦节点数量不够,无法完成对应的分片分配,那么分片就可能处于未分配状态。
由于这里的集群只有一个节点,也就是 N=1,因此只有 R=0,公式才能成立。
问题就转嫁为:
R置为0的方式,可以通过如下命令行实现:
root@tyg:/# curl -XPUT "http://localhost:9200/_settings" -d' {"number_of_replicas" : 0 } '{"acknowledged":true} 如果方案二仍然未解决,可以考虑重新分配分片。
可能的原因:
1)节点在重新启动时可能遇到问题。正常情况下,当一个节点恢复与群集的连接时,它会将有关其分片的信息转发给主节点,然后主节点将这分片从“未分配”转换为“已分配/已启动”。
2)当由于某种原因(例如节点的存储已被损坏)导致该进程失败时,分片可能保持未分配状态。
在这种情况下,您必须决定如何继续:尝试让原始节点恢复并重新加入集群(并且不要强制分配主分片);
或者强制使用Reroute API分配分片并重新索引缺少的数据原始数据源或备份。
如果您决定分配未分配的主分片,请确保将“allow_primary”:“true”标志添加到请求中。
ES5.X使用脚本如下:
NODE="YOUR NODE NAME"IFS=$''for line in $(curl -s 'localhost:9200/_cat/shards' | fgrep UNASSIGNED); doINDEX=$(echo $line | (awk '{print $1}'))SHARD=$(echo $line | (awk '{print $2}'))curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ "commands": [{" allocate_replica ": {"index": "'$INDEX'","shard": '$SHARD',"node": "'$NODE'","allow_primary": true}}]}'done ES2.X及早期版本,将 allocate_replica改为 allocate,其他不变。
脚本解读:
步骤1:定位 UNASSIGNED 的节点和分片
curl -s 'localhost:9200/_cat/shards' | fgrep UNASSIGNED 步骤2:通过 allocate_replica 将 UNASSIGNED的分片重新分配。
原理很简单,把每个用户的数据都索引到一个独立分片中,在查询时只查询那个用户的分片。这时就需要使用路由。
使用路由优势:路由是优化集群的一个很强大的机制。
它能让我们根据应用程序的逻辑来部署文档, 从而可以用更少的资源构建更快速的查询。
我们可以通过路由来控制 ElasticSearch 将文档发送到哪个分片。
路由参数值无关紧要,可以取任何值。重要的是在将不同文档放到同一个分片上时, 需要使用相同的值。
路由允许用户构建更有效率的查询,当我们只需要从索引的一个特定子集中获取数据时, 为什么非要把查询发送到所有的节点呢?
指定路由查询举例:
curl -XGET 'localhost:9200/documents/_search?pretty&q=*:*&routing=A' reroute命令允许显式地执行包含特定命令的集群重新路由分配。
例如,分片可以从一个节点移动到另一个节点,可以取消分配,或者可以在特定节点上显式分配未分配的分片。
分配unassigned的分片到一个节点。
将未分配的分片分配给节点。接受索引和分片的索引名称和分片号,以及将分片分配给它的节点。。
它还接受allow_primary标志来明确指定允许显式分配主分片(可能导致数据丢失)。
1)该问题的排查累计超过6个小时,最终找到解决方案。之前几近没有思路,想放弃,但咬牙最终解决。
2) 切记,第一手资料很重要!
Elasticsearch出现问题,最高效的解决方案是第一手资料ES英文官网文档,其次是ES英文论坛、ES github issues,再次是stackoverflow等英文论坛、博客。最后才是:Elasticsearch中文社区、其他相关中文技术博客等。
因为:所有的论坛、博客文字都是基于ES英文官方文档再整理,难免有缺失或错误。

3)自己的Elasticsearch基础原理、Lucene基础知识的不牢固,别无它法,继续深入研究,继续死磕中…….
1、官网文档地址:http://t.cn/RlttuVY
2、Elasticsearch unassigned shards 应急处理方案 :http://t.cn/Rlwub5s
3、解决Unassigned Shards大探讨:http://t.cn/RlwuVFn
4、快照&重新存储数据方案:http://t.cn/RlwuXmm
elasticsearch出现unassigned shards根本原因?
medcl https://elasticsearch.cn/question/4136回复:
原因肯定是有很多啊,但是要看具体每一次是什么原因引起的,对照表格排查未免不太高效,怎么办?
es 早已帮你想好对策,使用 Cluster Allocation Explain API,会返回集群为什么不分配分片的详细原因,你对照返回的结果,就可以进行有针对性的解决了。
实验一把:
GET /_cluster/allocation/explain{"index": "test","shard": 0,"primary": false,"current_state": "unassigned","unassigned_info": {"reason": "CLUSTER_RECOVERED","at": "2018-05-04T14:54:40.950Z","last_allocation_status": "no_attempt"},"can_allocate": "no","allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes","node_allocation_decisions": [{"node_id": "ikKuXkFvRc-qFCqG99smGg","node_name": "test","transport_address": "127.0.0.1:9300","node_decision": "no","deciders": [{"decider": "same_shard","decision": "NO","explanation": "the shard cannot be allocated to the same node on which a copy of the shard already exists [[test][0], node[ikKuXkFvRc-qFCqG99smGg], [P], s[STARTED], a[id=bAWZVbRdQXCDfewvAbN85Q]]"}]}]} ——————————————————————————————————
更多ES相关实战干货经验分享,请扫描下方【铭毅天下】微信公众号二维码关注。
(每周至少更新一篇!)

和你一起,死磕Elasticsearch!
腾讯ima怎么把微信内容一键导入知识库?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
腾讯ima怎么创建共享知识库?
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
WorkBuddy微信版怎么获得积分?
比特币 2025 年价格预测:BTC 的未来走势
车载冰箱重置到出厂设置几步?
5000元起的鼠标哪个最值得入手?
管线机怎么接云米净水器
短剧《史上最强洪荒修为》剧情介绍
结婚家电首选:Leader懒人三筒Ultra热泵洗烘一体
kimi提示词专家使用方法新手指南
Aptos(APT)2026-2032年价格预测与历史走势梳理
笔记本移动电源推荐哪款?
短剧《仙人跳获透视,古玩玉器我全拿捏》剧情介绍
腾讯ima知识库怎么分类管理?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc