我想在2个不同的主机上运行2个ElasticSeach实例。我已经基于Ubuntu 14.04和elasticsearch的1.3.2版本构建了我自己的docker镜像。如果我跑2 ES'容器在1个主机上,每个实例看到另一个实例并且可以进行通信,但是当我在2个不同的主机上运行2个ES实例时,它没有工作。容器的9300端口绑定到9300主机的端口。
我的问题是:可以创建ES'我的配置集群?
祝你好运, 卢卡斯竞争对手
答案 0 :(得分:18)
我能够在两个docker主机上使用单播进行群集工作。我恰巧正在使用ehazlett/elasticsearch
图片,但我认为这不应该那么重要。真正重要的一点似乎是将network.publish_host
设置为公共或可路由的IP其docker主机。
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
答案 1 :(得分:18)
使用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 :(得分:3)
您应该能够在不同主机中运行两个容器,只要主机可以在所需的端口之间访问它们。我认为您的问题是您正在尝试使用ElasticSearch多播发现,但如果那时您还需要公开容器的端口54328。如果它不起作用,您还可以尝试使用单播配置ElasticSearch,充分设置elasticsearch.yml中的机器IP。