Elasticsearch Python -在初始嗅探尝试中没有发现任何可行节点

zfciruhq  于 2023-01-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(307)

我有一个运行在不同AWS EC2示例上的Elasticsearch节点集群。它们通过AWS内的网络进行内部连接,因此它们的网络和发现地址设置在此内部网络中。我想使用python elasticsearch库从外部连接到这些节点。EC2示例附加了静态公共IP地址。并且弹性示例允许从任何地方进行https连接。连接工作正常,即我可以通过浏览器和Python elasticsearch库连接到示例。但是,现在我想设置嗅探,所以我设置了Python代码如下:

self.es = Elasticsearch([f'https://{elastic_host}:{elastic_port}' for elastic_host in elastic_hosts],
                                sniff_on_start=True, sniff_on_connection_fail=True, sniffer_timeout=60,
                                sniff_timeout=10, ca_certs=ca_location, verify_certs=True,
                                http_auth=(elastic_user, elastic_password))

如果我删除了嗅探参数,就可以很好地连接到示例,但是,使用嗅探后,启动时会立即得到elastic_transport.SniffingError: No viable nodes were discovered on the initial sniff attempt
elasticsearch.yml配置中的http.publish_host设置为EC2计算机的公共IP地址,/_nodes/_all/http端点返回公共IP作为publish_address(即x.x.x.x:9200)。
在使用其他微服务进行进一步测试之后,我们将这个问题定位到elasticsearch-py库,这些微服务可以毫无问题地执行嗅探。

pxiryf3j

pxiryf3j1#

在对我们的其他微服务进行测试后,我们发现这个问题与elasticsearch-py库有关,而不是我们的elasticsearch配置,因为我们的其他微服务基于golang,可以毫无问题地执行嗅探。
经过进一步的研究,我们将这个问题与elasticsearch-py库上的这个公开问题联系起来:https://github.com/elastic/elasticsearch-py/issues/2005.
问题是授权标头没有正确传递给向Elasticsearch发出的发现节点的请求。据我所知,目前还没有不涉及改变库本身的修复方法。然而,错误消息显然具有误导性。

相关问题