AWS中的Dockerized Elasticsearch集群 - 每个节点选择自己

时间:2016-04-24 11:53:07

标签: amazon-web-services elasticsearch

我在3台AWS主机上的docker容器中运行3节点Elasticsearch 2.1群集。 除了其他一些东西之外,Elasticsearch.yml还包含以下内容:

network.host: 0.0.0.0
discovery.type: "ec2"
discovery.ec2.ping_timeout: "30s"
discovery.zen.ping.multicast.enabled: false
cloud.aws.access_key: ...
cloud.aws.secret_key: ...
cloud.aws.region: ...

在命令行中我有:

-Des.network.bind_host=0.0.0.0 -Des.cluster.name=XXX -Des.node.name=XXX-1 (up to -XXX-3)

数据存储在动态安装在节点启动的EBS卷上;已安装AWS Cloud Plugin。

一切正常,包括重启和更新,直到整个系统通过一般网络问题。不知道那里发生了什么。 之后,每个节点启动,声称它在XXX集群中运行,但声明自己为主节点:

  

[cluster.service] [XXX-3] new_master   {XXX-3} {5oQHbq_KS8-JrIuFfTTBdw} {192.168.AAA.BB} {192.168.CCC.DD:9300},   原因:zen-disco-join(elections_as_master,[0]加入收到)" }

我通过在其中一个主机上设置network.host: _ec2_来成功解决了这个问题。在启动时,此主机已成功连接到其中一个正在运行的实例,并且仅在此之后第三个节点成功连接到群集,即使使用network.host: 0.0.0.0也是如此。现在它再次运行得很好。

我试图了解我遇到此问题的原因 - 在AWS中使用0.0.0.0是否合法?在仅将一个节点network.host更改为_ec2_后,它如何再次工作。 另一点是我想在本地环境(vagrant)中使用相同的命令行使用相同的服务,但在这种情况下我不能使用 ec2

提前致谢

1 个答案:

答案 0 :(得分:0)

最终这是我找到的解决方案。

由于AWS是主要("生产")环境,因此主要配置面向它:

  1. 设置为elasticsearch.yml - network.host: _ec2_
  2. 设置为命令行参数 - elasticsearch -Des.network.bind_host=0.0.0.0
  3. 在这种情况下,发现顺利进行并且节点绑定到任何网络接口(没有它就无法启动,因为_ec2_ IP与EC2主机网络相关,而不是与docker的网络接口相关)

    要使其在本地环境(vagrant)中运行,命令行应覆盖network.host参数,因此要设置为:elasticsearch -Des.network.bind_host=0.0.0.0 -Des.network.host=0.0.0.0