博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES写入找不到主节点问题排查
阅读量:4059 次
发布时间:2019-05-25

本文共 1938 字,大约阅读时间需要 6 分钟。

1.记一次线上es问题:写入找不到主节点

背景描述: 某天早上突然收到容器的流量告告警,network ingress usage high: 63289.54 KB/s 即网络入口使用量过高…开始还没在意,因为没发现影响到上线的业务…信息过少也不好排查。。。直到数据中心那边说每天定时小时级别写入数据到es集群的任务出现问题挂了…我才赶紧把运维拉了进来让运维帮忙分析…

首先数据的小伙伴抛出了一个异常信息出来:

Caused by: ClusterBlockException[blocked by: [SERVICE_UNAVAILABLE/2/no master];]        at org.elasticsearch.cluster.block.ClusterBlocks.globalBlockedException(ClusterBlocks.java:158)        at org.elasticsearch.cluster.block.ClusterBlocks.globalBlockedRaiseException(ClusterBlocks.java:144)        at org.elasticsearch.action.bulk.TransportBulkAction.executeBulk(TransportBulkAction.java:204)        at org.elasticsearch.action.bulk.TransportBulkAction.doExecute(TransportBulkAction.java:151)        at org.elasticsearch.action.bulk.TransportBulkAction.doExecute(TransportBulkAction.java:71)        at org.elasticsearch.action.support.TransportAction.doExecute(TransportAction.java:149)        at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:137)

可以看出应该是在执行批量写入的时候抛出了一个服务不可用没有master的异常信息

运维的大佬也抛出了一个master节点异常带宽流量的截图问题:

在这里插入图片描述

可以看出单台机器带宽都过3G了,运维让我排查是不是有什么大量查询的语句在执行,我赶紧取监控中心上看,确实有个qps=100的接口在调用,但是我本地连接es通过分组聚合发现每次查询出来的数据量非常少的。不应该产生这么大的带宽…问题就僵住了.后面运维通过抓包分析发现里面的信息都是集群状态相关的信息让我取排查业务逻辑有没有取频繁拉取集群状态的逻辑。。。

接口的逻辑很简单就是elasticsearchTemplate.indexExists判断索引是否存在和一个es查询接口…点进去看发现并没有获取集群状态的相关操作…唯一可疑的就是elasticsearchTemplate.indexExists但通过debug没有发现,后面发现有个aop的逻辑里面有个打点逻辑会调用下面这个api

elasticsearchTemplate.typeExists(stringBuffer.toString(),Constant.ES_DSL_LOG)	return client.admin().cluster().prepareState().execute().actionGet()				.getState().metaData().index(index).getMappings().containsKey(type);

果然通过debug发现每次都会获取集群的状态,并且每次返回的数据量都有35mb左右…调用一次就会从es集群拉取一次,很疑惑为什么没有缓存,后面通过百度了解可能和有关

即采用tcp来连接es集群:

优势:

​ 启动速度快,不需要像前者那么多的socket连接。

不足之处:

​ 因为它不想前者那样知道集群、索引、分片的这些信息,所以在分发数据和查询上没前者快,不能直接发送到指定的节点或直接从某个节点去取数据,需要ES在其中进行一些额外的转发才能完成。

推测:

​ 即tcp的连接方式不知道集群的状态信息,也就是不会加入到es集群当中取,也就是master节点更新集群状态信息时不会同步到应用服务器,如果缓存则会有不一致的问题。因此只能通过实时拉取

转载地址:http://jmkji.baihongyu.com/

你可能感兴趣的文章
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>