问题

golang 使用 github.com/olivere/elastic 包进行连接 远程 es 或者docker搭建的es时(只要golang所在主机与es所在主机不同),报错信息如下

no active connection found: no Elasticsearch node available

原因

如果您elastic不禁用嗅探功能,则Golang客户端将在后台运行进程,该进程/_nodes每15分钟轮询一次API(上面的URL)并维护正常节点列表。如果没有健康的节点,则以该错误结束。

您的集群配置有私有IP时,也会发生这种情况(注意:我们在OP上进行了调试,我们调试了问题)(因此在/_nodesAPI输出中,您看到的是私有IP,而不是公共IP)。

具有嗅探功能的客户端开始轮询,获取节点列表并尝试连接到专用IP,但由于该节点无响应(甚至无法在客户端所在的网络中解决)而收到HTTP错误。因此,它标志着它已经死了并发展到另一个。

当群集中没有其他节点时,它将报告no active connection found: no Elasticsearch node available

解决方案

查看node信息

1
curl -s -XGET 'http://localhost:9200/_nodes/http?pretty=true'

可以看到对应信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
curl -s -XGET 'http://localhost:9200/_nodes/http?pretty=true’
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "docker-cluster",
"nodes" : {
"XSzTxWW9Q3OC9UWlfdncMw" : {
"name" : "XSzTxWW",
"transport_address" : "172.17.0.2:9300",
"host" : "172.17.0.2",
"ip" : "172.17.0.2",
"version" : "6.6.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "3bd3e59",
"roles" : [
"master",
"data",
"ingest"
],
"attributes" : {
"ml.machine_memory" : "2088206336",
"xpack.installed" : "true",
"ml.max_open_jobs" : "20",
"ml.enabled" : "true"
},
"http" : {
"bound_address" : [
"0.0.0.0:9200"
],
"publish_address" : "172.17.0.2:9200",
"max_content_length_in_bytes" : 104857600
}
}
}
}

发现 publish_address(172.17.0.2) 地址是一个内网地址,无法正常访问,所以 会报错上面的信息,无可用的node节点.

方案一

1
2
3
4
5
6
esClient, err := elastic.NewClient(
elastic.SetURL(hosts...),
elastic.SetBasicAuth(esUser, esSecret),
elastic.SetSniff(false),
elastic.SetMaxRetries(3),
)

新增参数 elastic.SetSniff(false), 用于关闭 Sniff

方案二

调整es node 的 publish_address 配置

新增 network.publish_host: 127.0.0.1, 整体配置文件如下:

[root@e33229400bf1 config]# cat elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
network.publish_host: 127.0.0.1 # 新增配置项

参考文章

原文链接:https://blog.csdn.net/m1126m/article/details/108751132

https://codingdict.com/questions/60304