Elasticsearch:无法通过卷曲,奇怪的不一致行为进行连接

时间:2015-01-14 22:39:27

标签: curl elasticsearch

我正在运行Elasticsearch 1.3.4,通过Homebrew在Mac OS X 10.10上新安装:

$ brew install elasticsearch
$ elasticsearch

在浏览器中运行http://localhost:9200/_cluster/state成功:

{
  "cluster_name": "elasticsearch_jbrukh",
  "version": 2,
  "master_node": "q6Jzcza_RwaVvc_1u95O1Q",
  "blocks": {},
  "nodes": {
    "q6Jzcza_RwaVvc_1u95O1Q": {
      "name": "Ethan Edwards",
      "transport_address": "inet[/127.0.0.1:9300]",
      "attributes": {}
    }
  },
  "metadata": {
    "templates": {},
    "indices": {}
  },
  "routing_table": {
    "indices": {}
  },
  "routing_nodes": {
    "unassigned": [],
    "nodes": {
      "q6Jzcza_RwaVvc_1u95O1Q": []
    }
  },
  "allocations": []
}

但是,以下curl命令失败:

$ curl -XGET "http://localhost:9200/_cluster/state"
curl: (7) Failed to connect to localhost port 9200: Connection refused

此外,curl命令间歇性地成功,但只有在从浏览器中点击该URL后,它才会工作一次,然后再次因上述错误而再次失败。

我该如何解决?

3 个答案:

答案 0 :(得分:22)

我之前就类似的问题回答here。在我的Mac OS X上,我使用127.0.0.1:9200/而不是http://localhost:9200/,因为我遇到了同样的问题。

我认为当你使用命令时,终端用它的IPv6地址替换localhost,我不确定curl是否支持。

请检查并告知我们。

答案 1 :(得分:7)

我遇到了同样的问题(OS X 10.10& ES 1.3.4)。

快速解决方案是强制curl将IPv4与--ipv4

一起使用
curl --ipv4 -XGET "http://localhost:9200/_cluster/state"

(至少对我有用)

永久解决方案是编辑/etc/hosts并注释掉此行

#fe80::1%lo0    localhost

答案 2 :(得分:0)

我遇到了类似的问题,但似乎是另一种方式。

Elasticsearch似乎正在侦听ipv6而不是ipv4。为了强迫我的客户端与它通话(在我的情况下是节点js驱动程序[1]),我发现ipv6 localhost的符号是唯一的方法:http://[::1]:9200

[1] https://github.com/elastic/elasticsearch-js/