2016-04-24 52 views
0

我在3个AWS主机上运行Docker容器内的3节点Elasticsearch 2.1集群。 Elasticsearch.yml包含除了其他一些东西以下:AWS中的Docker化Elasticsearch集群 - 每个节点选择自己

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云插件已安装。

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

[cluster.service] [XXX-3] new_master {XXX-3} {5oQHbq_KS8-JrIuFfTTBdw} {192.168.AAA.BB} {192.168.CCC.DD:9300}, 原因:禅宗迪斯科加入(elected_as_master,联接接受[0])”}

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

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

在此先感谢

回答

0

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

由于AWS是主要的( “生产”)环境中,主要配置被定向在其上:

  1. 集在elasticsearch.yml - network.host: _ec2_
  2. 设为命令行参数 - elasticsearch -Des.network.bind_host=0.0.0.0

在这种情况下,发现顺利进行,并且节点绑定到任何网络接口(不能启动,因为_ec2_ IP与EC2主机网络相关,而不是Docker的一个)

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

相关问题