我是AWS和ElasticSearch的初学者,我正在玩ElasticSearch,希望能够更多地了解我如何在生产中使用它。我知道AWS有自己的ElasticSearch产品,但我想启动自己的EC2实例并自己设置ElasticSearch以了解更多信息。
我已按照elastic.co's instructions在我的EC2实例上启动并运行ElasticSearch。我启动了我的ES服务并执行了一个curl命令:
$ curl localhost:9200/_cluster/health?pretty
我收到了有效回复:
{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
但是,我一直在尝试远程发送相同的请求,并且超时:
curl http://MY-EC2-INSTANCE-IP-ADDRESS:9200/_cluster/health?pretty
curl: (7) Failed to connect to XX.XX.XXX.XX port 9200: Operation timed out
当我创建EC2实例时,我确保在我的安全组中指定HTTP选项。我已附上以下截图:
此外,我还测试过确保HTTP确实正常工作。我使用service httpd start
启动了我自己的小型Apache服务器,并在index.html
中放置了一个小/var/www/html
个文件,只需一个简单的
您好,这是一种弹性搜索。
文字填充。当我访问我的EC2实例IP地址时,我得到了正确的index.html文本:
我知道AWS'自己的ElasticSearch服务直接为用户提供端点,没有端口号(或至少是默认端口号)。但令人惊讶的是,关于如何向远程ES服务发送请求的文档非常少(几乎所有这些服务都以localhost:9200
为例)。
在EC2实例上向ElasticSearch服务发送请求的正确协议是什么?
答案 0 :(得分:2)
您还需要在安全组中打开端口9200。您的示例是使用端口9200进行连接。
答案 1 :(得分:2)
我在搜索了几篇SO帖子后找到了答案,最终得到了Kimberly W在post中的解决方案。在我的elasticsearch.yml
中,修改以下配置:
network:
host: 0.0.0.0
http:
port: 9200
然后,转到您的AWS Security组设置并编辑您的入站规则以包含:
这将允许到9200
的传入连接。
然后,重新启动ElasticSearch服务。关键问题是我正在ping正确的位置,但如果没有人正在侦听端口9200,那么没有人会响应。