Docker容器集群中的Elasticsearch

时间:2015-02-20 15:50:31

标签: elasticsearch docker cluster-computing

我想在2个不同的主机上运行2个ElasticSeach实例。我已经基于Ubuntu 14.04和elasticsearch的1.3.2版本构建了我自己的docker镜像。如果我跑2 ES'容器在1个主机上,每个实例看到另一个实例并且可以进行通信,但是当我在2个不同的主机上运行2个ES实例时,它没有工作。容器的9300端口绑定到9300主机的端口。

我的问题是:可以创建ES'我的配置集群?

祝你好运, 卢卡斯竞争对手

3 个答案:

答案 0 :(得分:18)

我能够在两个docker主机上使用单播进行群集工作。我恰巧正在使用ehazlett/elasticsearch图片,但我认为这不应该那么重要。真正重要的一点似乎是将network.publish_host设置为公共或可路由的IP其docker主机。

配置


搬运工宿主-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

构建群集


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

答案 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。