【问题标题】:docker swarm with elastic cluster带有弹性集群的 docker swarm
【发布时间】:2018-02-24 15:06:57
【问题描述】:

我是弹性和 docker swarm 的初学者。我花了两个星期来学习并尝试准备一个有弹性的 docker swarm。我想用 docker swarm 准备一个弹性集群。我们可以轻松地使用放大和缩小的地方。我认为我们需要 swarm 来做到这一点,并且需要弹性集群来保持 swarm 节点之间的数据同步。我还考虑了完全自动化,我想使用配置了容器主机名的 Zen。 由于 swarm round rubin “elasticsearch” 主机名应该返回所有的 ip。

  • docker 版本为:17.06.2-ce
  • elastic docker 镜像版本为:elasticsearch:latest
  • docker-compose 版本 >= 3

首先,我尝试按照以下说明进行操作: sematext.com/blog/2016/12/12/docker-elasticsearch-swarm

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

该指令背后的主要思想是,discovery.zen.ping.unicast.hosts 具有容器名称。 Docker swarm 自身进行负载平衡,然后弹性可以找到其他节点。

因为 nginx-proxy 不能作为服务工作,所以我尝试按照以下说明操作:derpturkey.com/elasticsearch-cluster-with-docker-engine-swarm-mode/

我已经定义了 nginx 服务来连接 elastic 并且我在这里配置了所有的参数。

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;'"

没有用。 后来我做了一些改动:

  • 我已经创建了自己的镜像,并直接在 nginx 配置文件中设置了 nginx 参数。
  • 这是我的 docker-compose 文件的新配置。

我测试过了。 Nginx 正在工作。 curl -XGET http://elastic:changeme@127.0.0.1:9200/_cluster/state?pretty 返回数据。

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 容器 elasticsearch 解析 dns 正在工作并且到节点之间进行负载平衡。

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

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

【问题讨论】:

  • 相信你指的是这个页面derpturkey.com/…
  • 部署堆栈后您是否运行docker service update --endpoint-mode=dnsrr <service name>

标签: docker elasticsearch nginx docker-swarm


【解决方案1】:

对我来说帮助官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.1
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多