web-dev-qa-db-ja.com

DockerコンテナクラスターのElasticsearch

2つの異なるホストでElasticSeachの2つのインスタンスを実行したい。 Ubuntu 14.04とelasticsearchの1.3.2バージョンに基づいて、独自のdockerイメージを構築しました。 1つのホストで2つのESコンテナを実行すると、各インスタンスが他のインスタンスを参照して通信できますが、2つの異なるホストで2つのESのインスタンスを実行すると動作しませんでした。コンテナの9300ポートは、9300ホストのポートにバインドされます。

私の質問は次のとおりです。私の構成でES 'クラスターを作成することは可能ですか?

よろしく、ルーカスライバル

21
rival lucas

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
18
Alex Fernandez

2つのDockerホスト間でユニキャストを使用してクラスタリングを機能させることができました。私はたまたまehazlett/elasticsearch image、しかしこれはそれほど重要ではないと思う。本当に重要なのは、network.publish_Hostパブリックまたはルーティング可能なIPをそのドッカーホストに設定します。

構成


docker-Host-01

eth0: 192.168.1.10
Docker version 1.4.1, build 5bc2ff8/1.4.1

docker-Host-02

eth0: 192.168.1.20
Docker version 1.4.1, build 5bc2ff8/1.4.1

クラスターの構築


Docker Host 01で

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 Host 02で

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
18
BrandoCorp

ホストマシンが必要なポートでコンテナ間でアクセスできる限り、異なるホストで実行されている2つのコンテナを通信できるはずです。あなたの問題は、ElasticSearchマルチキャストディスカバリーを使用しようとしていることですが、その場合、コンテナーのポート54328も公開する必要があると思います。動作しない場合は、ユニキャストを使用してElasticSearchを設定し、elasticsearch.ymlでマシンのIPを適切に設定することもできます。

3