Elastic Search上的连接被拒绝错误

时间:2015-07-28 13:20:29

标签: elasticsearch

当我尝试使用连接到Elastic Search时 curl http://localhost:9200它工作正常。

但是当我运行curl http://IpAddress:9200时,它会抛出错误connection refused port 9200

如何解决此错误?

25 个答案:

答案 0 :(得分:68)

默认情况下,它应绑定到所有本地地址。因此,假设您没有防火墙的网络层问题,我可以考虑检查的唯一ES设置是network.bind_host,并确保它未设置或设置为0.0.0.0::0或网络的正确IP地址。

更新:根据ES 2.3中的评论,您应该设置network.host

答案 1 :(得分:67)

修改/etc/elasticsearch/elasticsearch.yml并添加以下行:

network.host: 0.0.0.0

这将"未设置"此参数将允许来自其他IP的连接。

答案 2 :(得分:23)

尝试了此页面上的所有内容,只有来自here的说明有帮助。

<{1>}中的

,请确保这些内容未被注释:

/etc/default/elasticsearch

确保START_DAEMON=true ES_USER=elasticsearch ES_GROUP=elasticsearch LOG_DIR=/var/log/elasticsearch DATA_DIR=/var/lib/elasticsearch WORK_DIR=/tmp/elasticsearch CONF_DIR=/etc/elasticsearch CONF_FILE=/etc/elasticsearch/elasticsearch.yml RESTART_ON_UPGRADE=true 归elasticsearch用户所有:

/var/lib/elasticsearch

答案 3 :(得分:19)

在我看来,弹性搜索已经开始了。 但仍然有

curl: (7) Failed to connect to localhost port 9200: Connection refused

以下命令不成功

sudo service elasticsearch restart

为了让它起作用,我不得不改为运行

sudo systemctl restart elasticsearch

然后一切都很好。

答案 4 :(得分:15)

为什么不从这个命令行开始:

$ sudo service elasticsearch status

我做到了并得到:

"There is insufficient memory for the Java Runtime..."

然后我编辑了/etc/elasticsearch/jvm.options文件:

...

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

################################################################

...

这就像一个魅力。

答案 5 :(得分:13)

这里提出的解决方案都不适用于我,但最终得到它的工作是将以下内容添加到elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

之后,我重新启动了该服务,现在我可以在VM内部和外部curl进行此操作。出于某些奇怪的原因,我必须在VM运行之前在 VM内部尝试curl调用的几个不同变体:

curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200

注意:我在Ubuntu 14.04上使用Elasticsearch 5.5

答案 6 :(得分:12)

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

确保服务器已启动。当我的虚拟机内存太小而无法启动时,我已经看到了这个问题。

sudo systemctl status elasticsearch

上面将告诉你es是否确实在运行。

答案 7 :(得分:7)

对于这个问题,我不得不使用: sudo /usr/share/elasticsearch/bin/elasticsearch start

能够在端口9200/9300上获取某些内容(sudo netstat -ntlp)并回复:

curl -XGET http://localhost:9200

答案 8 :(得分:3)

我在拒绝9200端口上的连接时遇到了同样的问题。 使用命令sudo service elasticsearch status检查elasticsearch服务状态。如果它出现错误并且您阅读了与Java相关的任何内容,那么问题可能就是您的jvm内存。您可以在/etc/elasticsearch/jvm.options中对其进行修改。对于亚马逊环境中的1GB RAM内存机器,我保留了以下配置:

-Xms128m
-Xmx128m

设置并重新启动elasticsearch服务后,它就像一个魅力。 Nmap和UFW(如果使用本地防火墙)检查也应该有用。

答案 9 :(得分:2)

elasticsearch 文件夹下打开 Dockerfile ,然后使用&#34; network.host = 0.0.0.0&#34; >&#34; network.host = 127.0.0.1&#34; 即可。然后重启容器。用curl检查你的连接。

$ curl http://docker-machine-ip:9200
{
  "name" : "vI6Zq_D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhyB_Wa4QwSX6zZd1F894Q",
  "version" : {
    "number" : "5.2.0",
    "build_hash" : "24e05b9",
    "build_date" : "2017-01-24T19:52:35.800Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.0"
  },
  "tagline" : "You Know, for Search"
}

答案 10 :(得分:2)

我遇到了类似的问题。

这是我解决的方式

运行以下服务命令以启动 ElasticSearch

sudo service elasticsearch start

OR

sudo systemctl start elasticsearch

如果仍然出现错误

  

卷曲:(7)无法连接到本地主机端口9200:连接被拒绝

运行以下服务命令以检查 ElasticSearch

的状态
sudo service elasticsearch status

OR

sudo systemctl status elasticsearch

如果您收到如下所示的响应(活动:活动(正在运行)),则您 ElasticSearch 处于活动并正在运行

  

●elasticsearch.service-Elasticsearch      已加载:已加载(/usr/lib/systemd/system/elasticsearch.service;已禁用;供应商预设:已启用)      有效:有效(运行中),自WAT 2019-09-21 11:22:21; 3秒前

然后您可以使用以下命令向本地主机上的端口9200发送HTTP请求,以测试 Elasticsearch 节点是否正在运行:

curl http://localhost:9200

否则,如果您得到不同的响应,则可能需要进一步调试以修复它,但是运行下面的命令将帮助您检测从一开始就持有 ElasticSearch 服务的注意事项

sudo service elasticsearch status

OR

sudo systemctl status elasticsearch

如果要停止 ElasticSearch 服务,只需运行下面的service命令;

sudo service elasticsearch stop

OR

sudo systemctl stop elasticsearch

N / B:每次遇到错误时,您可能必须运行命令sudo service elasticsearch status OR sudo systemctl status elasticsearch,以告知 ElasticSearch 服务的状态。

这也适用于基巴纳语,每次遇到错误时都运行命令sudo service kibana status OR sudo systemctl status kibana,以告知状态 Kibana 服务

仅此而已。

我希望这会有所帮助。

答案 11 :(得分:1)

在这种情况下,首先需要使用以下命令检查java版本:

update-alternatives --config java

运行此命令后,您将得到以下内容:

  

java版“1.7.0_51”   OpenJDK运行时环境(rhel-2.4.5.5.el7-x86_64 u51-b31)   OpenJDK 64位服务器VM(内置24.51-b03,混合模式)

然后使用此命令:

curl -XGET http://127.0.0.1:9200

并选择以下版本

  

* + 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java      2 /usr/java/jdk1.8.0_73/jre/bin/java

输入以保留当前选择[+]或类型选择号:2

getLocation

答案 12 :(得分:1)

我的2美分,

我只是按照Digital Ocean上的安装程序,显然repos中的可用包不是最新的,我删除了所有内容并直接从Elastic Search跟随安装程序,现在一切正常,基本上是开箱即用的行为是在一个指向9200的本地主机上。与Kibana相同的事情/问题,我的解决方案也是,删除所有内容并按照他们的程序,希望这可以节省两个小时的人(我花时间弄清楚如何设置ELK !)

答案 13 :(得分:1)

如果遇到拒绝连接错误,只需运行以下命令以检查ElasticSearch服务的状态

sudo service elasticsearch status

这将帮助您解密ElasticSearch服务的状态及其处理方法。

答案 14 :(得分:1)

将network.bind更改为0.0.0.0,将http:port更改为9200。绑定地址0.0.0.0表示本地计算机上的所有IPv4地址。如果主机有两个IP地址192.168.1.1和10.1.2.1,并且主机上运行的服务器侦听0.0.0.0,则这两个IP都可以访问。

答案 15 :(得分:1)

编辑elasticsearch.yml并添加以下行

http.host: 0.0.0.0

network.host: 0.0.0.0不适用于

答案 16 :(得分:0)

对于那些在GCP(Google Cloud Platform)的虚拟机上安装ELK的用户,请确保您创建了Ingress类型的防火墙规则(即,用于传入VM流量)。您可以在规则中一次指定多个端口,方法是用逗号分隔5000,5044,5601,9200,9300,9600

在该规则中,您可能需要指定一个标签(根据您的喜好选择标签的名称,例如docker-elk,该标签将以您的VM为目标(“目标”列): enter image description here

在VM的“设置”页面上,将该标签分配给您的VM:

enter image description here

这样做之后,我可以通过端口9200在浏览器中访问Elasticsearch。而且我也不必编辑elasticsearch.yml文件。

答案 17 :(得分:0)

对于比 6.8 (7.x) 更高的版本,您需要做两件事。

1。更改网络主机以在公共接口上进行监听。

在配置文件elasticsearch.yml中(对于 debian 及其衍生版本-> /etc/elasticsearch/elasticsearch.yml)。

  • network.hostnetwork.bind_host设置为:
...
network.host: 0.0.0.0
...

或者必须到达的界面

2。在进行生产之前,有必要设置重要的发现和集群形成设置。

根据elastic.co:
v6.8->应该设置的发现设置。
通过例如

...
# roughly means the same as 1
discovery.zen.minimum_master_nodes: -1
...

v7.x->应该设置的发现设置。
一个节点

discovery.type: single-node
#OR set discovery.seed_hosts : 127.0.0.1:9200

必须配置[ discovery.seed_hosts discovery.seed_providers cluster.initial_master_nodes ]中的至少一个。

答案 18 :(得分:0)

就我而言,问题出在Java版本,我之前安装过open-jdk 11。这就是在启动服务时造成的问题。我更改了它open-jdk 8,它开始起作用

答案 19 :(得分:0)

我的问题是我无法使用localhost,我需要将其设置为本地主机的IP地址

network.bind_host: 127.0.0.1

答案 20 :(得分:0)

禁用SELinux对我有用,尽管我不建议这样做-我只是为PoC做的

答案 21 :(得分:0)

请确保在我的情况下打开的端口9200是一个亚马逊实例,因此当我在安全组中打开该端口时,curl命令就起作用了。

答案 22 :(得分:0)

将您的jdk更新为弹性搜索的最新最低版本。

答案 23 :(得分:0)

为了补充一点,我通过谷歌找到了许多文档,说要将network.host设置为localhost。

这样做让我拒绝了臭名昭着的连接。您必须使用IP地址(127.0.0.1),而不是FQDN。

杰夫

答案 24 :(得分:0)

在使用上面的一些答案之后,不要忘记在apt安装之后,可能需要完全重新启动。