我想在 2 个不同的主机上运行 2 个 Elasticsearch 实例。
我已经基于 Ubuntu 14.04 和 1.3.2 版本的 Elasticsearch 构建了自己的 Docker 镜像。如果我在 1 个主机上运行 2 个 ES 容器,每个实例都可以看到并与另一个实例通信;但是当我在 2 个不同的主机上运行 2 个 ES 实例时,它不起作用。容器的 9300 端口绑定(bind)到主机的 9300 端口。
是否可以使用我的配置创建 ES 集群?
最佳答案
我能够在两个 docker 主机上使用单播进行集群工作。我只是碰巧在使用 ehazlett/elasticsearch
图像,但我认为这并不重要。真正重要的一点似乎是将 network.publish_host
设置设置为其 docker 主机的公共(public)或可路由 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 主机 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 容器集群中的 Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28632977/