docker群与弹性群集

我是弹性和docker群的初学者。 我花了两个星期的时间学习,并尝试准备一个有弹性的docker群。 我想准备一个有Docker群的弹性群。 我们可以轻松地使用缩放比例。 我认为我们需要swarm来做到这一点,并且弹性集群保持swarm节点之间的数据同步。 我也想为完整的自动化我想使用容器主机名configuration禅。 由于群体轮Rubin“elasticsearch”主机名应该返回所有的ip。

  • docker版本是:17.06.2-ce
  • elastic docker image版本是:elasticsearch:latest
  • docker – 撰写版本> = 3

首先,我试图遵循这个指令:sematext.com/blog/2016/12/12/docker-elasticsearch-swarm

这里nginx-proxy不是作为一个服务(docker-compose文件的一部分)工作的,但是它是作为容器工作的。 (docker运行)。 我不知道有什么区别。 但是这个想法本身已经准备好了docker的早期版本,并且不适合我。

这条指令背后的主要思想是,discovery.zen.ping.unicast.hosts具有容器名称。 Docker群体本身负载平衡,然后弹性可以find另一个节点。

因为nginx-proxy不能用作服务,所以我试着按照这个指令去做:derpturkey.com/elasticsearch-cluster-with-docker-engine-swarm-mode/

我已经定义了nginx服务来连接弹性,我在这里configuration了所有的参数。

version: '3' services: elasticsearch: image: 'elasticsearch:5' command: [ elasticsearch, -E, network.host=0.0.0.0, -E, discovery.zen.ping.unicast.hosts=elasticsearch, -E, discovery.zen.minimum_master_nodes=1 ] nginx: image: 'nginx:1' ports: - '9200:9200' command: | /bin/bash -c "echo ' server { listen 9200; add_header X-Frame-Options "SAMEORIGIN"; location / { proxy_pass http://elasticsearch:9200; proxy_http_version 1.1; proxy_set_header Connection keep-alive; proxy_set_header Upgrade $$http_upgrade; proxy_set_header Host $$host; proxy_set_header X-Real-IP $$remote_addr; proxy_cache_bypass $$http_upgrade; } }' | tee /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" 

它没有工作。 后来我做了一些改变:

  • 我创build了一个自己的图像,并直接在nginxconfiguration文件中设置nginx参数。
  • 这是我的docker-compose文件的新configuration。

我testing了它。 Nginx正在工作。 curl -XGET http:// elastic:changeme@127.0.0.1:9200 / _cluster / state?可以返回数据。

 version: '3' services: elasticsearch: image: elasticsearch:latest deploy: replicas: 2 ports: ["9300:9300"] command: [elasticsearch, -E, network.bind_host=0.0.0.0, -E, discovery.zen.ping.unicast.hosts=elasticsearch, -E, discovery.zen.minimum_master_nodes=1] nginx: image: 'dodi1983/nginx:0.1' ports: - 9200:9200 depends_on: - elasticsearch 

后果:

  • nginx正在工作。
  • 从nginx容器elasticsearchparsingdns正在工作和负载平衡到节点之间。

不幸的是,当我问有关可用节点的弹性。 弹性总是返回当前节点信息(负载平衡)。 我可以看到不同的ID。 只有一个节点可用,但我认为ZEN发现应该已经find了两个。 我loginnginx容器并尝试获取群集信息。 你可以在这里看到,它们是不同的节点,它们不在集群中。 curl -XGET http:// elastic:changeme @ elasticsearch:9200 / _cluster / state?pretty

有没有人有任何想法或解决scheme? 谢谢。