Elasticsearch: 未能连接到本地主机端口9200-连接被拒绝

当我尝试使用 curl http://localhost:9200运行良好。

但是当我运行 curl http://IpAddress:9200时,它抛出一个错误说明

连接到本地主机端口9200失败: 连接被拒绝

如何解决此错误?

331178 次浏览

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

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

编辑 /etc/elasticsearch/elasticsearch.yml并添加以下代码行:

network.host: 0.0.0.0

This will "unset" this parameter and will allow connections from other IPs.

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

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

sudo systemctl status elasticsearch

以上将显示您是否确实运行。

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

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

下面的命令不成功

sudo service elasticsearch restart

为了让它运作起来,我不得不逃跑

sudo systemctl restart elasticsearch

然后一切顺利。

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

java -version

在运行这个命令之后,您会得到如下结果:

Java 版本“1.7.0 _ 51” OpenJDK 执行期函式库(rhel-2.4.5.5. el7-x86 _ 64 u51-b31) OpenJDK 64-BitServerVM (构建24.51-b03,混合模式)

然后使用以下命令:

update-alternatives --config java

选择以下版本

* + 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

curl -XGET http://127.0.0.1:9200

打开 弹性搜索文件夹下的 文件夹,用 “ network.host = 127.0.0.1”更新 “ network.host = 0.0.0.0”。然后重新启动容器。用 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"
}

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

能够在端口9200/9300(sudo netstat-ntlp)上获得一些内容并响应:

curl -XGET http://localhost:9200

我有同样的问题拒绝9200端口的连接。 使用命令 sudo service elasticsearch status检查 elasticsearch 服务状态。如果它出现了一个错误,并且您读取了任何与 Java 相关的内容,那么问题可能是您的 jvm 内存。你可以在 /etc/elasticsearch/jvm.options中编辑它。对于 Amazon 环境中的1GB RAM 内存机器,我将配置保持在:

-Xms128m
-Xmx128m

在设置了这个功能并重新启动了橡皮筋搜索服务之后,它的效果非常好。Nmap 和 UFW (如果使用本地防火墙)检查也应该很有用。

尝试了这个页面上的所有方法,只有 给你的说明有帮助。

/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

确保 /var/lib/elasticsearch为 elasticsearch 用户所有:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

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

$ 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


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


...

这招真管用。

我的意见是,

我只是按照安装程序在数字海洋,显然可用的软件包回购不是最新的,我删除了一切,按照安装程序直接从弹性搜索和一切现在工作,基本上开箱即用的行为是在一个本地主机指向9200。同样的事情/问题发现与 Kibana,我的解决方案也是,删除一切,只是按照他们的程序,希望这节省了某人两个小时(时间我花费了解决如何安装 ELK!)

这里提出的解决方案没有一个对我有效,但是最终让它有效的是在 elasticsearch.yml中添加以下内容

network:
host: 0.0.0.0
http:
port: 9200

之后,我重新启动了服务,现在我可以从 VM 内部和外部对其进行 curl。由于一些奇怪的原因,我不得不在 curl调用 在里面虚拟机之前尝试了几种不同的变体:

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

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

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

为了补充这一点,我通过 google 看到很多文档说要将 network.host 设置为 localhost。

这样做给了我臭名昭著的连接拒绝。你必须使用一个 IP 地址(127.0.0.1) ,而不是一个 FQDN。

杰夫

更新您的 jdk 到您的 elasticsearch 的最新最小版本。

确保端口 9200为我的情况下打开它是一个亚马逊实例,所以当我打开它在我的安全组 curl 命令工作。

将 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 上都可以访问该服务器。

禁用 SELinux 对我来说很有用,尽管我不建议这么做——我只是为了一个 PoC

我的问题是,我不能与 localhost工作,我需要设置为本地主机的 IP 地址

network.bind_host: 127.0.0.1

编辑 elasticsearch.yml并添加以下行

http.host: 0.0.0.0

network.host: 0.0.0.0不适用于

我也遇到过类似的问题。

我是这么解决的

运行下面的服务命令启动 弹性搜寻

sudo service elasticsearch start

或者

sudo systemctl start elasticsearch

如果你仍然得到错误

Curl: (7)未能连接到本地主机端口9200: 连接被拒绝

运行下面的 service 命令来检查 弹性搜寻的状态

sudo service elasticsearch status

或者

sudo systemctl status elasticsearch

如果你得到一个像下面这样的响应(Active: Active (running)) ,那么你的 弹性搜寻是活跃的并且正在运行

● Elasticsearch.service-Elasticsearch 加载: 加载(/usr/lib/systemd/system/elasticsearch.service; 禁用; 供应商预置: 启用) Active: Active (running) 自从2019-09-21星期六11:22:21 WAT; 3秒前

然后,您可以通过使用下面的命令向 localhost 上的端口9200发送一个 HTTP 请求来测试您的 弹性搜索节点是否正在运行:

curl http://localhost:9200

否则,如果您得到一个不同的响应,您可能需要进一步调试来修复它,但是运行下面的命令,将帮助您检测哪些警告阻碍了 弹性搜寻服务的启动。

sudo service elasticsearch status

或者

sudo systemctl status elasticsearch

如果要停止 弹性搜寻服务,只需运行下面的服务命令;

sudo service elasticsearch stop

或者

sudo systemctl stop elasticsearch

N/B: 您可能必须在每次遇到错误时运行命令 sudo service elasticsearch status 或者 sudo systemctl status elasticsearch,以便告知 弹性搜寻服务的状态。

这也适用于 齐巴纳,每次遇到错误时运行命令 sudo service kibana status 或者 sudo systemctl status kibana,以便告知 齐巴纳服务的状态。

仅此而已。

希望这个能帮上忙。

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

sudo service elasticsearch status

这将帮助您破译 ElasticSearch 服务的状态以及如何处理它。

在我的例子中,问题出在 Java 版本上,我以前安装了 open-jdk 11。这就是在启动服务时产生的问题。我把它改成 open-jdk 8然后它就开始工作了

对于版本 再高点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
...

应该设置的发现设置。
一个节点

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

必须配置[ 联系方式联系人First _ master _ node]中的至少一个。

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

在这个规则中,您可能希望指定一个标记(根据您的喜好选择标记的名称,例如 docker-elk,它将针对您的 VM (Targets 列) : enter image description here

在 VM 的设置页面上,将这个标签分配给 VM:

enter image description here

在这之后,我可以通过9200端口在浏览器中访问 Elasticsearch。无论如何,我都不需要编辑 elasticsearch.yml文件。

每次安装或升级 ES (7.0 +)时,我都会遇到这个问题。而解决方案总是等待 ES 完全启动。RESTAPI 响应大约需要一分钟。不管服务状态如何。

service elasticsearch start
*started


*wait for at least a minute


curl now works and returns responses on the port 9200

必须编辑/etc/elasticsearch/elasticsearch.yml 默认情况下,所有配置都将被注释,添加以下配置

network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: [0.0.0.0]

然后重新启动服务

我在 CentOS 7上经历过这种情况,问题是/etc/hosts 有以下内容:

127.0.0.1 localhost.localdomain

我对其进行了更新,将 localhost 包括在内,如下所示:

127.0.0.1 localhost localhost.localdomain

之后就没问题了。