Docker容器集群中的Elasticsearch

riv*_*cas 21 cluster-computing elasticsearch docker

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

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

最诚挚的问候,Lucas Rival

小智 18

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

组态


搬运工主机-01

eth0: 192.168.1.10
Docker version 1.4.1, build 5bc2ff8/1.4.1
Run Code Online (Sandbox Code Playgroud)

搬运工主机-02

eth0: 192.168.1.20
Docker version 1.4.1, build 5bc2ff8/1.4.1
Run Code Online (Sandbox Code Playgroud)

构建群集


在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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

  • 如果你有3个节点怎么办? (2认同)

Ale*_*dez 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
Run Code Online (Sandbox Code Playgroud)


Jav*_*oso 3

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