当我尝试使用curl http://localhost:9200
连接到弹性搜索时它工作正常。
但是,当我运行curl http://IpAddress:9200
时,它会抛出一个错误,说connection refused port 9200
。
如何解决此错误?
默认情况下,它应绑定到所有本地地址。因此,假设您没有防火墙的网络层问题,我可以考虑检查的唯一ES设置是network.bind_host
并确保它未设置或设置为0.0.0.0
或::0
或网络的正确IP地址。
更新:根据ES 2.3中的评论,您应该设置network.host
。
在elasticsearch文件夹下打开Dockerfile,并使用“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"
}
在这种情况下,首先需要使用以下命令检查java版本:
java -version
运行此命令后,您将获得以下内容:
java版“1.7.0_51”OpenJDK运行时环境(rhel-2.4.5.5.el7-x86_64 u51-b31)OpenJDK 64位服务器VM(内置24.51-b03,混合模式)
然后使用此命令:
update-alternatives --config java
并选择以下版本
*+ 1 /US人/礼拜/JVM/Java-1.7.0-open JDK-1.7.0.51-2.4.5.5.恶劣7.小86_64/加热/斌/Java 2 /US人/Java/JDK1.8.0_73/加热/斌/Java
输入以保持当前选择[+]或类型选择编号:2
curl -XGET http://127.0.0.1:9200
我2美分,
我只是按照Digital Ocean上的安装程序,显然repos中的可用包不是最新的,我删除了所有内容并直接从Elastic Search跟随安装程序,现在一切正常,基本上开箱即用的行为是打开的指向9200的本地主机。与Kibana相同的事情/问题,我的解决方案也是,删除所有内容并按照他们的程序,希望这可以节省两个小时(我花时间搞清楚如何设置ELK!)
在
将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上访问它。
编辑elasticsearch.yml
并添加以下行
http.host: 0.0.0.0
network.host: 0.0.0.0
没有工作
在使用上面的一些答案之后,不要忘记在apt安装之后,可能需要完全重新启动。
只是为了补充一点,我通过谷歌找到了许多文档,说要将network.host设置为localhost。
这样做让我拒绝了臭名昭着的联系。您必须使用IP地址(127.0.0.1),而不是FQDN。
杰夫
将您的jdk更新为弹性搜索的最新最低版本。
确保端口9200
为我的情况打开它是一个亚马逊实例所以当我在我的安全组中打开它时curl命令工作。
禁用SELinux对我有用,虽然我不建议 - 我只是为了PoC
编辑/etc/elasticsearch/elasticsearch.yml
并添加以下行:
network.host: 0.0.0.0
这将“取消设置”此参数,并允许来自其他IP的连接。
我的问题是我无法使用localhost
我需要将其设置为localhost的IP地址
network.bind_host: 127.0.0.1
尝试了这个页面上的所有内容,只有来自here的说明才有帮助。
在/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/
在我的情况下,弹性搜索开始了。但还是有的
curl: (7) Failed to connect to localhost port 9200: Connection refused
以下命令不成功
sudo service elasticsearch restart
为了使它工作,我不得不跑
sudo systemctl restart 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
################################################################
...
这就像一个魅力。
这里提出的解决方案都不适用于我,但最终得到它的工作是将以下内容添加到elasticsearch.yml
network:
host: 0.0.0.0
http:
port: 9200
之后,我重新启动了服务,现在我可以从VM内部和外部curl
它。出于某些奇怪的原因,我必须在VM工作之前尝试一些curl
调用的不同变体:
curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200
注意:我在Ubuntu 14.04上使用Elasticsearch 5.5
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是否确实在运行。
对于这个问题,我不得不使用: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
中编辑它。对于亚马逊环境中的1GB RAM内存机器,我保留了以下配置:
-Xms128m
-Xmx128m
在设置并重新启动elasticsearch服务之后,它就像一个魅力。 Nmap和UFW(如果使用本地防火墙)检查也应该有用。