具有弹性簇

时间:2017-09-15 12:11:52

标签: docker elasticsearch nginx docker-swarm

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

  • docker version is:17.06.2-ce
  • 弹性码头图像版本是:elasticsearch:latest
  • docker-compose version> = 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服务来连接弹性,我在这里配置了所有参数。

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 resolve dns正在工作并在节点之间进行负载均衡。

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

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

1 个答案:

答案 0 :(得分:0)

对我来说帮助了官方文档

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: