ES常见问题整理
1、集群状态red、yellow处理方法
1.red表示主分片数据不完整,通常时由于某个索引的主分片为分片unassigned,找出这个分片未分配的原因,解决即可;
curl -XGET http://{ESIP}:9200/_cluster/health?level=indices
2.yellow表示所有主分片可用,但副本分片不完整,最常见的情景是单节点时,由于es默认是有1个副本,主分片和副本不能在同一个节点上,所以副本就是未分配unassigned;
2、elasticsearch出现unassigned shards的原因排查
1.原因:造成未分配的分片原因有很多,具体看每一次未分配的具体情况,ES使用 Cluster Allocation Explain API,会返回集群为什么不分配分片的详细原因,照返回的结果,进行有针对性的解决。
2.举例:ES集群出现unassigned shards,导致集群变黄,执行Cluster Allocation Explain API,返回结果如下:
"reason" : "CLUSTER_RECOVERED","explanation" : "too many shards [6] allocated to this node for index [bot-audio-upload-2020.02.10], index setting [index.routing.allocation.total_shards_per_node=6]"
从返回我们看到集群默认index.routing.allocation.total_shards_per_node=6,意思是单个节点上最大能分配的分片是6个,导致此节点上无法分配额外的分片,副本分片缺失,集群变黄。
3.以下是官方给的reason分类
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 :确定更好的副本位置被标定使用,导致现有的副本分配被取消,出现未分配。
3、ES集群磁盘高低水位问题
1.es根据磁盘使用情况来决定是否继续分配shard,有两个重要的设置:
cluster.routing.allocation.disk.watermark.low:控制磁盘最小使用率。默认85%.说明es在磁盘使用率达到85%的时候将会停止分配新的shard。
cluster.routing.allocation.disk.watermark.high:控制磁盘的最大使用率。默认90%.说明在磁盘使用率达到90%的时候es将会relocate shard去其他的节点。
2.如果集群中所有data节点的磁盘使用率都达到90%,此时集群将拒绝写入,可以通过API动态调整高低水位值,例如低水位90%,高水位95%
curl -H 'Content-Type:application/json' -XPUT 'http://10.12.24.77:9202/_cluster/settings' -d'{"transient" : {"cluster.routing.allocation.disk.watermark.low" : “90%","cluster.routing.allocation.disk.watermark.high" : “95%"}}'
4、bulk、index 报错EsRejectedExcutionException[rejected execution(queue capacity 200) on.......
思路:找出拒绝bulk、index的data节点,默认bulk队列是200,调整成2000,然后查此节点磁盘、CPU,确认在报错时间点是否繁忙。
1.通过API查看下thread pool配置,默认index、bulk线程池大小与cpu核数保持一致,bulk、index queue_size默认是200,生产环境后期部署均给2000,发现是默认的200,可以调整到2000;
curl -XGET http://10.35.50.42:9201/_nodes/thread_pool?pretty
thread_pool.bulk.queue_size: 2000
2.通过cat thread_pool API查看各节点index、bulk拒绝数量统计,找出拒绝bulk、index请求的data节点;
curl -XGET http://10.35.50.42:9201/_cat/thread_pool?pretty
3.排查data节点在报错时间是否有IO、CPU繁忙的问题存在,如果集群中所有data节点均有拒绝,说明集群写入出现瓶颈,需要扩容或者更换性能更好的SSD盘。
5、缓解data节点IO wait高导致的CPU Load高的情况
1.当IO wait出现时,表明节点IO出现瓶颈,出现这种情况的同时,通常伴随着大量的数据写入,先判断如果是日志或对搜索实时性要求不是很高的场景,可以尝试修改索引settings
通常修改两处(可以动态修改),保证数据异步落盘,减少段合并频率,释放IO压力
"refresh_interval": "60s",
"translog": {
"flush_threshold_size": "500mb",
"sync_interval": "60s",
"durability": "async"
},
2.如果IO wait依然很高,可以考虑下掉副本,但这样索引数据的高可用就无法保证,需要看具体场景,同时和业务方确认;
3.给集群扩容data节点,或更换性能更高的SSD盘。
6、缓解JVM Heap使用率高的情况
1.先看JVM Heap已使用容量高会导致哪些问题:
1)写入性能查,index buffer缺少一定的内存空间用缓冲文档数据;
2)查询或搜索性能异常,缺少一定的数据缓存空间,导致查询超时或中断;
3)严重情况下出现内存溢出异常,节点宕机,java.lang.OutOfMemoryError: Java heap space
2.解决方法:
1)确认data节点的JVM配置大小,生产环境一般给30G;
2)关闭或删除过期的索引数据,释放出空间;
3)给集群扩容,并平衡分片。
7、当前查询加载数据会报”breaker.CircuitBreakingException: [parent] Data too large, data for [<http_request>] would be [1454565650/1.3gb], which is larger than the limit of...";
1.问题原因:fielddata缓存占用大量JVM Heap空间,其他索引无法分配更多的内存,所以当前查询加载数据会报错;
通过API可以查看fielddata缓存占用的内存大小;GET /_stats/fielddata?pretty
2.解决方法:
1)通过设置indices.fielddata.cache.size值来修改单个索引占用缓存的大小,如果超出这个值,该数据将被逐出,设置方法有两种,一种是更新配置文件后重启生效,另一种是API动态修改
indices.fielddata.cache.size: 20% _cluster/settings { "persistent" : { "indices.breaker.fielddata.limit" : "20%" }}
2)清理fielddata缓存,清理后并确认;
curl localhost:9200/index/_cache/clear?pretty&field_data=true
3)给当前集群扩容data节点。
ES常见问题整理的更多相关文章
- Maven使用常见问题整理
Maven使用常见问题整理 1.更新eclipse的classpath加入新依赖 1.在dependencyManagement里面加入包括版本在内的依赖信息,如: <dependenc ...
- LoadRunner常见问题整理(转)
首先要感谢群友的无私分享,才能得到这篇好的学习资料,整理得太好了,所以收藏保存,方便以后学习. 一:LoadRunner常见问题整理 1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消 ...
- [转]LoadRunner脚本录制常见问题整理
LoadRunner脚本录制常见问题整理 1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面 ...
- [转帖]kubernetes 常见问题整理
kubernetes 常见问题整理 https://www.cnblogs.com/qingfeng2010/p/10642408.html 使用kubectl 命令报错 报错: [root@k8s- ...
- LR常见问题整理
1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. LR11 无法弹出ie浏览 ...
- Git 常见问题整理
在学习git的过程中,遇到如下问题,特整理如下: 1 error:src refspec master does not match any 问题产生 a git服务器使用如下命令新建一个项目 $ c ...
- web标准常见问题整理
1.超链接访问过后hover样式就不出现的问题 2.FF下如何使连续长字段自动换行 3.ff下为什么父容器的高度不能自适应 4. IE6的双倍边距BUG 5. IE6下绝对定位的容器内文本无法正常选择 ...
- Microsoft Mole原理及常见问题整理
Moles与Moq(Rhino.Mocks)比较 作用范围 Moq与Rhino.Mocks这类的Mock是对Interface或AbstractClass做Mock, 而Moles是Mock整个 ...
- 手机移动端web前端常见问题整理
移动端常见问题及解决方案 一.meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="w ...
随机推荐
- P2P平台疯狂爆雷后,你的生活受到影响了吗?
最近这段时间P2P爆雷的新闻和报道一直占据着各大财经和科技媒体的重要位置.而据网贷之家数据显示,截至2018年7月底,P2P网贷行业累计平台数量达到6385家(含停业及问题平台),其中问题平台累计为2 ...
- JavaScript学习笔记 - 入门篇(3)- DOM操作
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...
- Oauth2.0详解及安全使用
引言:刚刚参加工作的时候接到的第一个任务就是接入新浪的联合登录功能,当时新浪用的还是oauth1.0协议.接入的时候没有对oauth协议有过多的了解,只是按照开放平台的接入流程进行开发,当时还在想这么 ...
- dubbo配置文件加载顺序
JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口. XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效 ...
- lambda concurrent List<Map> to Map
Object c = Stream.of( CompletableFuture.supplyAsync(() -> { Map m = new HashMap(); try { Thread.s ...
- Different Gene Frequencies in the Two Sexes
I.7 Different Gene Frequencies in the Two Sexes 假设存在一种基因仅在第一代亲代的不同性别之间的概率有区别,比如,A 在male中频率是Pm,a是(1-P ...
- jmeter接口自动化测试,数据驱动玩法
总体思路:excel管理测试数据,判断不同的接口请求方法,取登陆token值为全局变量方便后面接口调用,预期结果断言: 1.设置获取excel数据源: 2.设置取token以及设置为全局变量: 3.i ...
- redis day02
Redis -带过期时间的key 如何删除掉的? 在redis内部有个 过期字典,所有带过期时间的都有过期字典 默认情况下 redis每秒会进行着10次过期字典的扫描,在每一次扫描过程里,执行如下 ...
- 20)PHP,数组的遍历
然后开始使用这2个函数和while循环结构来实现数组遍历: 形式: reset($arr1); while ( list ($key, $value ) = each( $arr1) ) //从数组$ ...
- L3-016 二叉搜索树的结构 (30 分)
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...