Elasticsearch7.6解决报错Connection reset by peer【刨根问底完美解决】

这篇具有很好参考价值的文章主要介绍了Elasticsearch7.6解决报错Connection reset by peer【刨根问底完美解决】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

小编最近在生产上遇到一个问题,解决完后立马总结一下分享给大家,希望可以帮助到大家哈!

事情是这样的,奇怪的现象,公司搭建的ElasticSearch,本来是用来提高检索效率的,最近出现报错了!

版本配置什么都没变,奇怪的很!

问题:
每隔几个小时就会查询不到,与ElasticSearch连接不上,刷新后查询正常
报错为:java.io.IOException: Connection reset by peer

拿着条件去kibana是可以查询到的;

核心原因:

这是客户端是长链接,服务端过期后自动关闭链接,客户端继续用原来的链接导致错误的!

二、前因后果

小编ElasticSearch版本为7.6
下面我们来详细说一下报错原因和解决方案哈:

1. 报错信息

java.io.IOException: Connection reset by peer
	at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:828)
	at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248)
	at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235)
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454)
	at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:970)

2. 原因与解决方案

上面也是说了原因,但是不太详细,下面详细说一下原因哈!

ES会设置一个策略来进行链接时间的控制,设置此连接的空闲持续时间

我们可以看一下这个策略:

这是我们不配置会走这个策略,默认-1为长链接,可循环重复使用;

我们只需要把这个策略换成我们的即可

@Contract(threading = ThreadingBehavior.IMMUTABLE)
public class DefaultConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {

    public static final DefaultConnectionKeepAliveStrategy INSTANCE = new DefaultConnectionKeepAliveStrategy();

    @Override
    public long getKeepAliveDuration(final HttpResponse response, final HttpContext context) {
        Args.notNull(response, "HTTP response");
        final HeaderElementIterator it = new BasicHeaderElementIterator(
                response.headerIterator(HTTP.CONN_KEEP_ALIVE));
        while (it.hasNext()) {
            final HeaderElement he = it.nextElement();
            final String param = he.getName();
            final String value = he.getValue();
            if (value != null && param.equalsIgnoreCase("timeout")) {
                try {
                    return Long.parseLong(value) * 1000;
                } catch(final NumberFormatException ignore) {
                }
            }
        }
        return -1;
    }

}

服务器的TCP时间,我们可以查看一下:

cat /proc/sys/net/ipv4/tcp_keepalive_time

Elasticsearch7.6解决报错Connection reset by peer【刨根问底完美解决】

这里就是12分钟,我们需要让客户端的链接时间小于服务器的keepalive时间

这样客户端超过时间后就会重新获取新链接,确保不会报错哈!!

三、具体方案

编写ElasticsearchProperties ,获取nacos上的信息,方便修改!

@Data
@Component
@ConfigurationProperties(prefix = "spring.elasticsearch.rest")
public class ElasticsearchProperties {

    private String uris;

    private String username;

    private String password;

}

编写RestHighLevelClient配置类,使用我们的策略,看到其他教学还是使用以前的连接方式,现在RestClientBuilder 里的RestClientBuilder是自动构建连接的!

这里我们把RestClientBuilder 注入,继续放里面放新策略即可!

由于我们重写RestHighLevelClient,它又依赖RestClientBuilder ,原来RestClientBuilder 会自动获取用户名密码、连接地址,现在我们需要把用户名密码重新赋值一下哈!
这样就可以少一步输入地址的哈!

这里设置10分钟,没有超过12分钟!

@Configuration
public class ElasticsearchConfig {

    @Autowired
    private ElasticsearchProperties elasticsearchProperties;

    @Autowired
    private RestClientBuilder restClientBuilder;

    @Bean
    public RestHighLevelClient restHighLevelClient(){

        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchProperties.getUsername(), elasticsearchProperties.getPassword()));
        return new RestHighLevelClient(restClientBuilder.setHttpClientConfigCallback(requestConfig ->{
            requestConfig.setKeepAliveStrategy((response, context) -> TimeUnit.MINUTES.toMillis(10));
            requestConfig.setDefaultCredentialsProvider(credentialsProvider);
            return requestConfig;
        }));
    }

}

看一下配置文件:

Elasticsearch7.6解决报错Connection reset by peer【刨根问底完美解决】

方案二:

如果不介意的话可以把错误捕获起来,重新调用一下,第二次就会重新建立连接,这样就不会有问题了,不过这种不太建议!!

四、总结

这样就完美解决了,生产回复正常哈!

写作不易,大家给点支持,你的支持是我写作的动力哈!

对你有帮助,还请不要吝啬你的发财小手点点关注哈!

关注小编的微信公众号,一起交流学习!文章首发看哦!文章来源地址https://www.toymoban.com/news/detail-408442.html

到了这里,关于Elasticsearch7.6解决报错Connection reset by peer【刨根问底完美解决】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决ssh_exchange_identification: read: Connection reset by peer

    linux远程免密登陆出现上述报错 1、先在远程机器上 在里面写入 先允许所有ip连到这台机器 然后按 esc ,输入 :wq 保存 2、在远程机器上重启sshd服务 3、在本机上尝试远程连接 也可以使用 查看登陆的详细信息 4、如果此时本机能连接进远程服务器,在 连接后的终端里 输入 查看

    2024年02月07日
    浏览(32)
  • 有关 java.io.IOException: Connection reset by peer 解决问题方法之一

    有很多大佬已经终结出现这个错误的原因有一下几种 1. 服务器在接受处理用户请求时,自身的cpu、io、内存、线程等资源都是有最大限制的。当并发请求超过服务器的承载量时,服务器会停掉一些请求。(但是要注意如果实际的并发数量没有超过服务器的承载量,可能中了木

    2024年02月22日
    浏览(53)
  • 解决ssh_exchange_identification:read connection reset by peer 原因

    服务器改了密码,试过密码多次后出现: 1 ssh_exchange_identification: read: Connection reset by peer 可以通过ssh -v查看连接时详情 OpenSSH_6.6.1, OpenSSL 1.0.1k-fips 8 Jan 2015 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 56: Applying options for * debug1: Connecting to xxx [xx] port 22. de

    2024年01月20日
    浏览(30)
  • curl: (56) Recv failure: Connection reset by peer问题汇总和解决方案

    这两天正在学习用docker制作tomcat镜像,有一个问题困扰了我3天,可能大家在学习时也会遇到,于是我就单独发一篇文章来解决这个问题。 解决办法我在上一篇文章 Docker进阶篇之DockerFile制作Tomcat镜像,教你如何发布镜像到DockerHub和阿里云 已经详细说明了,这里再说明一次。

    2024年02月01日
    浏览(46)
  • HTTP接口调用时报错 java.io.IOException: Connection reset by peer解决办法

    在接口调用时,遇到如下报错: Caused by: java.io.IOException: Connection reset by peer         at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_241]         at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_241]         at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_241]  

    2024年04月26日
    浏览(50)
  • SSH访问报错:ssh_exchange_identification: read: Connection reset by peer、Permission denied (publickey,key

    ssh_exchange_identification: read: Connection reset by peer 原因: 一般是因为源地址限制导致的 Permission denied (publickey,keyboard-interactive,hostbased). 原因: 客户端和服务端认证方法不匹配,最后定位因为是server端使用了keyboard-interactive认证方法,而客户端只有password,publickey。 解决: 修改ser

    2024年02月02日
    浏览(48)
  • 解决kali虚拟机连接github问题,git/‘: Recv failure: Connection reset by peer

    直接使用ssh连接方式,以下终端全部为kali虚拟机的终端 1、在终端中执行以下命令,将你的电子邮件地址替换为GitHub帐户关联的电子邮件地址。          ssh-keygen -t ed25519 -C \\\"youremail@example.com\\\"         这会在默认目录(通常是 ~/.ssh/ )中生成一个新的SSH密钥对 遇到输入

    2024年01月17日
    浏览(43)
  • 关于无法使用SSH连接远程服务器“Connection reset by peer Connection reset by ip”

    刚开始辗转反侧在各个国内搜索引擎处,处理方法均是打开端口,关闭防火墙,但是毕竟华为云是一台新的服务器,按道理应该什么都没有,所以不可能存在防火墙的问题,而且自己在服务器的安全配置入口都打开了各个端口,在本地mac端发现也可以ping通,但是死活就是无法

    2024年02月16日
    浏览(28)
  • reset Offset 与connection reset by peer

    某次生产线上,从KafkaManager监控页面,发现还剩几十万未消费数据量,过了几分钟之后,监控页面发现未消费数据量达到了几千万。 定位生产日志,发现消费端 出现日志 reset offset , 结合上下文日志,发现在切换broker leader之后,提交的偏移量在新leader上面找不到,之后根据消

    2024年02月16日
    浏览(36)
  • connection-reset-by-peer问题定位

    有同事报客户端请求某核心服务出现大量connection reset by peer。线上故障,赶紧高优定位处理。 no.1 及时止损 看现象是个别实例集中出现,不是全部实例出现,那就和运行环境、流量、或者某个资源有关系。按照及时止损的原则,首先验证重启能否恢复,验证重启可以恢复,联

    2024年02月05日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包