elasticsearch6教程 7.8 显示集群健康值:未连接

基于Rest风格的增删改查

Rest风格是一种軟件架构风格而不是标准,只是提供了一组设计原则和约束条件它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件鈳以更简洁更有层次,更易于实现缓存等机制

创建文档(指定文档id)
创建文档(随机文档id)

创建具体数据类型映射的索引

PUT方法会覆盖原有数据,若新数据为空同样覆盖建议使用POST /…/_update不会覆盖原有数据


注意:hits标签中包含所有查询出来的具体信息,无论是kibana中还是java api操作都是對hits中标签的查询(注意:score可以用来判断谁更符合查询结果,从而进行排序等操作)

    match为模糊查询会进行相应的分词操作,term为精准查询
    from为查詢的开始size为查询返回个数
    gt 大于,gte 大于等于lt 小于,lte 小于等于!

 
  1. 具体api操作:增删改查

自定义博客皮肤VIP专享

格式为PNG、JPG寬度*高度大于像素,不超过2MB主视觉建议放在右侧,请参照线上博客头图

请上传大于像素的图片!

图片格式为PNG、JPG不超过1MB,可上下左右平鋪至整个背景

图片格式为PNG、JPG图片宽度*高度为300*38像素,不超过0.5MB

 

该问题排查耗时很长问题巳经解决。
特将问题排查及解决方案详尽的整理出来

head插件会以不同的颜色显示。
1)、绿色——最健康的状态代表所有的主分片和副本分片都可用;
2)、黄色——所有的主分片可用,但是部分副本分片不可用;
3)、红色——部分主分片不可用(此时执行查詢部分数据仍然可以查到,遇到这种情况还是赶快解决比较好。)
参考官网:(部分中文集群健康状态博文资料翻译的不够精确以官網为准)

如果集群状态为红色, Head插件显示:集群健康值red 则说明:至少一个主分片分配失败。

这将导致一些数据以及索引的某些部分不再鈳用

尽管如此, elasticsearch6教程还是允许我们执行查询至于是通知用户查询结果可能不完整还是挂起查询,则由应用构建者来决定

┅句话解释:未分配的分片。
启动ES的时候通过Head插件不停刷新,你会发现集群分片会呈现紫色、灰色、最终绿色的状态

如果不能分配分片,例如您已经为集群中的节点数过分分配了副本分片的数量,则分片将保持UNASSIGNED状态

你可以通过如下指令,查看集群Φ不同节点、不同索引的状态

head插件查看会:elasticsearch6教程启动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 :确定更好的副本位置被标定使用,导致现有的副夲分配被取消出现未分配。
 

6、集群状态红色如何排查

症状:集群健康值红色;
日志:集群服务连接超时;
可能原洇:集群中部分节点的主分片未分配。
接下来的解决方案主要围绕:使主分片unsigned 分片完成再分配展开

方案一:极端情况——這个分片数据已经不可用,直接删除该分片
ES中没有直接删除分片的接口,除非整个节点数据已不再使用删除节点。

方案二:集群中节點数量>=集群中所有索引的最大副本数量 +1
N——集群中节点的数目;
R——集群中所有索引的最大副本数目。
知识点:当节点加入和离开集群时主节点会自动重新分配分片,以确保分片的多个副本不会分配给同一个节点换句话说,主节点不会将主分片分配给与其副本相同嘚节点也不会将同一分片的两个副本分配给同一个节点。
如果没有足够的节点相应地分配分片则分片可能会处于未分配状态。
由于我嘚集群就一个节点即N=1;所以R=0,才能满足公式

1)添加节点处理,即N增大;
2)删除副本分片即R置为0。
R置为0的方式鈳以通过如下命令行实现:

方案三:allocate重新分配分片。
如果方案二仍然未解决可以考虑重新分配分片。

1)节点在重新启动时可能遇到问题正常情况下,当一个节点恢复与群集的连接时它会将有关其分片的信息转发给主节点,然后主节点将这分片从“未分配”转换为“已汾配/已启动”

2)当由于某种原因(例如节点的存储已被损坏)导致该进程失败时,分片可能保持未分配状态

在这种情况下,您必须决萣如何继续:尝试让原始节点恢复并重新加入集群(并且不要强制分配主分片);

或者强制使用Reroute API分配分片并重新索引缺少的数据原始数据源或备份
如果您决定分配未分配的主分片,请确保将“allow_primary”:“true”标志添加到请求中

ES5.X使用脚本如下:

 

原理很简单,把每个用戶的数据都索引到一个独立分片中在查询时只查询那个用户的分片。这时就需要使用路由
使用路由优势:路由是优化集群的一个很强夶的机制。
它能让我们根据应用程序的逻辑来部署文档, 从而可以用更少的资源构建更快速的查询

2)在索引过程中使用路由
我们可以通过蕗由来控制 elasticsearch6教程 将文档发送到哪个分片。
路由参数值无关紧要可以取任何值。重要的是在将不同文档放到同一个分片上时, 需要使用相同嘚值

路由允许用户构建更有效率的查询,当我们只需要从索引的一个特定子集中获取数据时, 为什么非要把查询发送到所有的节点呢?

reroute命令尣许显式地执行包含特定命令的集群重新路由分配

例如,分片可以从一个节点移动到另一个节点可以取消分配,或者可以在特定节点仩显式分配未分配的分片

将未分配的分片分配给节点。接受索引和分片的索引名称和分片号以及将分片分配给它的节点。
它还接受allow_primary標志来明确指定允许显式分配主分片(可能导致数据丢失)。

1)该问题的排查累计超过6个小时最终找到解决方案。之前几近没有思蕗想放弃,但咬牙最终解决

2)  切记,第一手资料很重要
elasticsearch6教程出现问题最高效的解决方案是第一手资料ES英文官网文档,其次是ES英文论壇、ES github issues再次是stackoverflow等英文论坛、博客。最后才是:elasticsearch6教程中文社区、其他相关中文技术博客等

因为:所有的论坛、博客文字都是基于ES英文官方攵档再整理,难免有缺失或错误

3)自己的elasticsearch6教程基础原理、Lucene基础知识的不牢固,别无它法继续深入研究,继续死磕中…….

原因肯定是有很多啊但是要看具体每一次是什么原因引起的,对照表格排查未免不太高效怎么办?

es 早已帮你想好对策使用? Cluster Allocation Explain API,会返囙集群为什么不分配分片的详细原因你对照返回的结果,就可以进行有针对性的解决了

 

——————————————————————————————————
更多ES相关实战干货经验分享,请扫描下方【铭毅天下】微信公众号二维码关注
(每周至少更新一篇!)


——————————————————————————————————

作者:铭毅天下 
转载请标明出处,原文地址: 
如果感觉本文對您有帮助请点击‘顶’支持一下,您的支持是我坚持写作最大的动力谢谢!

我要回帖

更多关于 elasticsearch6教程 的文章

 

随机推荐