Elasticserch Master未发现异常 - 版本2.3.0

时间:2016-06-30 18:41:38

标签: amazon-web-services elasticsearch amazon-ec2 elasticsearch-2.0

这是我第一次使用elasticsearch。 以下是我的环境/配置。

  1. 我有3个EC2 Ubuntu 14.04实例。
  2. 我已下载并提取了elasticsearch-2.3.0.tar.gz。
  3. 我在每个实例中更改了elasticsearch / config下的elasticsearch.yml文件。 我在每个elasticsearch.yml文件中进行了以下更改。
  4. 3.1。 EC2实例编号1(我的客户端节点)

    cluster.name: MyCluster
    node.name: Client
    node.master: false
    node.data: false
    path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
    
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
    

    在上面的括号中,我提供了我所有3个实例的IP。

    3.2。 EC2实例编号2(我的主节点)

    cluster.name: MyCluster
    node.name: Master
    node.master: true
    node.data: true
    path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
    
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
    

    在上面的括号中,我提供了所有3个实例的IP。 请注意,我已经制作了node.data:true(according to this link

    3.3。 EC2实例编号3(我的数据节点)

    cluster.name: MyCluster
    node.name: slave_1
    node.master: false
    node.data: true
    path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
    
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
    

    在上面的括号中,我提供了我所有3个实例的IP。

    1. 在此配置之后,我在每个实例上运行elasticsearch服务,从数据节点开始,然后是主节点和客户端节点。
    2. 如果我使用curl http://localhost:9200检查节点状态,我收到的json表明节点正在运行。
    3. Json response

      1. 但是当我使用curl -XGET' http://localhost:9200/_cluster/health?pretty=true'检查群集运行状况时我在客户端实例上收到以下错误。
      2. Master not discovered exception

        我希望我对自己的问题很清楚,并且正朝着正确的方向前进。

        三江源

1 个答案:

答案 0 :(得分:2)

Elasticsearch 2.0+默认将所有套接字绑定到localhost。这意味着,默认情况下,该机器外部的任何内容都无法与之通信。

这明确用于安全目的和简单的开发设置。在本地,它工作得很好,但是当它变得更严重时,你需要为你的环境配置它。这也是您可以通过localhost与节点通信的原因。 基本上,当您想要使用network settings在其他计算机上使用多个节点时,您需要这样做。这适用于ES 2.3 +:

network:
  bind_host: [ _local_, _global_ ]
  publish_host: _global_

然后其他节点可以与公共IP通信,但是您仍然可以使用localhost来简化本地节点的使用(例如,您 - 人类 - 在连接到盒子时不必知道IP)。

当您使用Elasticsearch 2.0+进入EC2时,我建议you install the cloud-aws plugin(未来读者要注意:此插件在ES 5.x中分为3个单独的插件!)。

$ bin/plugin install cloud-aws

安装完成后,您可以从EC2实例中获得更多认识。凭借这种强大功能,您可以为ES配置添加更多细节:

# Guarantee that the plugin is installed
plugin.mandatory: cloud-aws

# Discovery / AWS EC2 Settings
discovery
  type: ec2
  ec2:
    availability_zones: [ "us-east-1a", "us-east-1b" ]
    groups: [ "my_security_group1", "my_security_group2" ]

# The keys here need to be replaced with your keys
cloud:
  aws
    access_key: AKVAIQBF2RECL7FJWGJQ
    secret_key: vExyMThREXeRMm/b/LRzEB8jWwvzQeXgjqMX+6br
    region: us-east-1
  node.auto_attributes: true

# Bind to the network on whatever IP you want to allow connections on.
# You _should_ only want to allow connections from within the network
# so you only need to bind to the private IP
node.host: _ec2:privateIp_

# You can bind to all hosts that are possible to communicate with the
# node but advertise it to other nodes via the private IP (less
# relevant because of the type of discovery used, but not a bad idea).
#node:
#  bind_host: [ _local_, _ec2:privateIp_, _ec2:publicIp_, _ec2:publicDns_ ]
#  publish_host: _ec2:privateIp_

这将允许他们通过将IP地址绑定到预期的内容来进行通话。 如果您希望能够SSH到这些计算机并通过localhost与您进行通信(您可能会进行调试),那么您需要将_local_注释掉的版本作为{{ 1}}在该列表中。