簡體   English   中英

Docker 容器集群中的 Elasticsearch

[英]Elasticsearch in Docker container cluster

我想在 2 個不同的主機上運行 2 個 Elasticsearch 實例。

我已經基於 Ubuntu 14.04 和 1.3.2 版本的 Elasticsearch 構建了自己的 Docker 鏡像。 如果我在 1 台主機上運行 2 個 ES 容器,則每個實例都可以看到另一個實例並與之通信; 但是當我在 2 個不同的主機上運行 2 個 ES 實例時,它不起作用。 容器的 9300 端口綁定到 9300 主機的端口。

是否可以使用我的配置創建 ES 集群?

我能夠在兩個 docker 主機上使用單播使集群工作。 我只是碰巧使用了ehazlett/elasticsearch圖像,但我認為這並不重要。 真正重要的一點似乎是將network.publish_host設置設置為其 docker 主機的公共或可路由 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-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。 如果它不起作用,您也可以嘗試使用單播配置 ElasticSearch,在您的 elasticsearch.yml 中充分設置機器 IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM