2つの異なるホストでElasticSeachの2つのインスタンスを実行したい。 Ubuntu 14.04とelasticsearchの1.3.2バージョンに基づいて、独自のdockerイメージを構築しました。 1つのホストで2つのESコンテナを実行すると、各インスタンスが他のインスタンスを参照して通信できますが、2つの異なるホストで2つのESのインスタンスを実行すると動作しませんでした。コンテナの9300ポートは、9300ホストのポートにバインドされます。
私の質問は次のとおりです。私の構成でES 'クラスターを作成することは可能ですか?
よろしく、ルーカスライバル
Docker-composeの使用は、コマンドラインで手動で実行するよりもはるかに簡単です。
elasticsearch_master:
image: elasticsearch:latest
command: "elasticsearch -Des.cluster.name=workagram -Des.node.master=true -Des.node.data=false"
environment:
- ES_HEAP_SIZE=512m
ports:
- "9200:9200"
- "9300:9300"
elasticsearch1:
image: elasticsearch:latest
command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
links:
- elasticsearch_master
volumes:
- "/opt/elasticsearch/data"
environment:
- ES_HEAP_SIZE=512m
elasticsearch2:
image: elasticsearch:latest
command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
links:
- elasticsearch_master
volumes:
- "/opt/elasticsearch/data"
environment:
- ES_HEAP_SIZE=512m
2つのDockerホスト間でユニキャストを使用してクラスタリングを機能させることができました。私はたまたまehazlett/elasticsearch
image、しかしこれはそれほど重要ではないと思う。本当に重要なのは、network.publish_Host
パブリックまたはルーティング可能なIPをそのドッカーホストに設定します。
eth0: 192.168.1.10
Docker version 1.4.1, build 5bc2ff8/1.4.1
eth0: 192.168.1.20
Docker version 1.4.1, build 5bc2ff8/1.4.1
docker run -d \
-p 9200:9200 \
-p 9300:9300 \
ehazlett/elasticsearch \
--cluster.name=unicast \
--network.publish_Host=192.168.1.10 \
--discovery.zen.ping.multicast.enabled=false \
--discovery.zen.ping.unicast.hosts=192.168.1.20 \
--discovery.zen.ping.timeout=3s \
--discovery.zen.minimum_master_nodes=1
docker run -d \
-p 9200:9200 \
-p 9300:9300 \
ehazlett/elasticsearch \
--cluster.name=unicast \
--network.publish_Host=192.168.1.20 \
--discovery.zen.ping.multicast.enabled=false \
--discovery.zen.ping.unicast.hosts=192.168.1.10 \
--discovery.zen.ping.timeout=3s \
--discovery.zen.minimum_master_nodes=1
ホストマシンが必要なポートでコンテナ間でアクセスできる限り、異なるホストで実行されている2つのコンテナを通信できるはずです。あなたの問題は、ElasticSearchマルチキャストディスカバリーを使用しようとしていることですが、その場合、コンテナーのポート54328も公開する必要があると思います。動作しない場合は、ユニキャストを使用してElasticSearchを設定し、elasticsearch.ymlでマシンのIPを適切に設定することもできます。