докер рой с эластичным кластером

Я новичок с эластичными и докерскими роями. Я потратил две недели на то, чтобы научиться и попытаться подготовить рой докеров с резинкой. Я хочу подготовить эластичный кластер с docker swarm. Где мы можем легко использовать масштабирование вверх и вниз. Я думал, что нам нужен рой для этого и эластичный кластер для синхронизации данных между узлами роя. Я также подумал, что для полного автоматизма я хотел бы использовать Zen, настроенный с именем хоста контейнера. Из-за swarm round rubin имя хоста "elasticsearch" должно возвращать все ip.

  • версия докера: 17.06.2-ce
  • версия эластичного образа докера: elasticsearch: latest
  • версия docker-compose> = 3

Сначала я попытался выполнить эту инструкцию: sematext.com/blog/2016/12/12/docker-elasticsearch-swarm

Здесь nginx-proxy не работает как служба (часть файла docker-compose), но работает как контейнер. (запуск докера). Понятия не имею, в чем может быть разница. Но сама идея была подготовлена ​​более ранней версией докера и она у меня не работает.

Основная идея этой инструкции заключается в том, что Discovery.zen.ping.unicast.hosts имеет имя контейнера. Docker самостоятельно балансирует нагрузку, а затем эластичный может найти другие узлы.

Поскольку 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:[email protected]: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 и балансировка нагрузки между узлами.

К сожалению, когда я спрашиваю у эластичного о доступных узлах. Elastic всегда возвращает информацию о текущем узле (балансировка нагрузки). Я вижу разные идентификаторы. Доступен только один узел, но я подумал, что обнаружение ZEN должно было найти оба. Я вошел в контейнер nginx и пытаюсь получить информацию о кластере. здесь вы можете видеть, что это разные узлы, и они не входят в кластер. curl -XGET http: // elastic: changeme @ elasticsearch: 9200 / _cluster / state? pretty

У кого-нибудь есть идея или решение? Спасибо.


person Pásztor Sándor    schedule 15.09.2017    source источник
comment
Я полагаю, вы имеете в виду эту страницу derpturkey.com/   -  person Bad_Coder    schedule 02.05.2018
comment
Вы запускали docker service update --endpoint-mode=dnsrr <service name> после развертывания стека?   -  person Bad_Coder    schedule 02.05.2018


Ответы (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:
person Ryabchenko Alexander    schedule 30.10.2019