ElasticSearch(ES) Connection reset by peer解决方案
最近使用ElasticSearch遇到一个坑,每天早上第一次使用ES的时候会报错,后面就正常了,去网上查了下资料,发现是因为ES底层用的HttpClient,它的keepalive设置成-1也就是用不断开,但服务器也是有超时时间的,如果这个连接一直没请求进来服务器就会断开该连接,这是在用HttpClient发请求就会报错。
# 查看超时时间(单位秒) cat /proc/sys/net/ipv4/tcp_keepalive_time
解决办法有两个,一是设置keepalive小于服务器的超时时间,这样HttpClient会自己断开连接,下次再重连,由于SpringBoot没有提供设置改属性的地方,配置起来有点小麻烦,可以参考以下链接
方案二是发送心跳,下面贴出代码
@Scheduled(fixedRate = 60 * 1000 * 5) public void heartbeatToES() { try { RequestOptions requestOptions = RequestOptions.DEFAULT.toBuilder().build(); boolean result = restTemplate.getClient().ping(requestOptions); log.info("es状态: {}", result); } catch (Exception e) { } }
上一篇:
JS实现多线程数据分片下载
下一篇:
ElasticSearch 常用命令大全