Docker容器集群中的Elasticsearch

我想在2个不同主机上运行2个ElasticSeach实例。 我已经build立了基于Ubuntu 14.04和1.3.2版本的elasticsearch的Docker镜像。 如果我在1主机上运行2 ES的容器,每个实例看到另一个可以通信,但是当我在2个不同的主机上运行ES的2个实例时,它不工作。 容器的9300端口绑定到9300主机的端口。

我的问题是:可以用我的configuration创build一个ES群集?

最好的问候,卢卡斯对手

我能够在两台Docker主机上使用单播进行集群工作。 我恰好正在使用ehazlett/elasticsearch图像,但我认为这不应该太重要。 真正重要的一点似乎是将network.publish_host设置为公共路由器或可路由的IP泊坞站主机。

组态


搬运工主机-01

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

搬运工主机-02

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

build立群集


在Docker主机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主机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 

使用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 

只要主机在需要的端口之间可以访问,您应该能够沟通在不同主机上运行的两个容器。 我认为你的问题是你正在尝试使用ElasticSearch多播发现,但是如果你需要公开端口54328的容器。 如果不起作用,您还可以尝试使用单播configurationElasticSearch,并在您的elasticsearch.yml中充分设置机器IP。