2016-04-24 94 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