背景
之前应用和ES同在阿里云,连es没有任何问题
最近因需将应用从阿里云迁移到其他云,ES暂时保留在阿里云
迁移之后发现应用连阿里云ES偶发connection reset by peer问题
分析
遇到这种问题首先想到的是通过抓包分析
在客户端抓包
只看到请求就被reset了
服务端因为用的是阿里云的es云服务,所以没法抓包
解决
因为从抓包分析和日志告警来看基本每隔十几分钟会有被reset情况,而我们又不能从阿里云的es抓包,不太清楚具体整个链路是哪个环节主动断开了,既然这样,我们就在应用层来设置keepalive时间,这里设置了3分钟。具体代码如下:
将修改后的代码发布后,reset问题得到解决。
RestClientBuilder builder = RestClient.builder(httpHosts.toArray(new HttpHost[0]));
// 超时时间
builder.setRequestConfigCallback(
new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectTimeout(elasticsearchProperties.getConnectTimeout())
.setSocketTimeout(elasticsearchProperties.getSocketTimeout());
}
});
//
builder.setHttpClientConfigCallback(requestConfig -> requestConfig.setKeepAliveStrategy(
(response, context) -> TimeUnit.MINUTES.toMillis(3)));
RestHighLevelClient client = new RestHighLevelClient(builder);
- Elasticsearch Connection 解决方案 错误 方案elasticsearch connection解决方案 错误 socketexception connection finshell解决方案 connection解决方案connect refused connection available解决方案 方案 elasticsearch7 elasticsearch解决方案 方案 elasticsearch深度 方案 数据 解决方案 错误 代码 方案 prettier解决方案 错误 方案 elasticsearch解决方案 方案debian elasticsearch解决方案 方案10000