Постоянный объем докера на рое - PullRequest
0 голосов
/ 26 апреля 2019

Итак, я создаю рой узлов Elasticsearch, и в идеале я хотел бы, чтобы произошли две вещи.

  1. Заставить каждый узел сохранять все свои данные в папке на хосте.
  2. Даже если стек уничтожен, новый контейнер инициализируется, он должен быть в состоянии определить, где был убит предыдущий, используя тот же объем.

Вот что я делаю:

том докера create --opt type = none --opt device = / mnt / data --opt o = bind --name = эластичные данные

докер-compose.yml

version: '3'
services:
  elastic-node1:
    image: amazon/opendistro-for-elasticsearch:0.8.0
    environment:
      - cluster.name=elastic-cluster
      - bootstrap.memory_lock=false
      - "ES_JAVA_OPTS=-Xms32g -Xmx32g"
      - opendistro_security.ssl.http.enabled=false
      - discovery.zen.minimum_master_nodes=1
    volumes:
      - elastic-data:/mnt/data
    ports:
      - 9200:9200
      - 9600:9600
      - 2212:2212  
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - elastic-net
    deploy:
      mode: replicated
      replicas: 1

volumes:
  elastic-data:
    external: true

А потом я бы запустил стек, разместил некоторые данные, удалил стек и снова посмотрел на него, но данные не сохраняются.

развертывание стека докеров --compose-file docker-compose.yml opendistrostack

Я немного запутался в томах и не могу найти хорошую документацию с подробным объяснением для каждого варианта использования. Не могли бы вы указать мне правильное направление?

Спасибо.

1 Ответ

1 голос
/ 27 апреля 2019

Так как это Docker Swarm поддерживает только локальный драйвер тома.У вас всегда будут свежие данные всякий раз, когда контейнер создается на новом хосте.

Обычная техника - использовать общий том / fs.Я бы посоветовал реализовать GlusterFS, это дистрибутивный и хорошо масштабируемый fs, который очень прост в начале и хорошо документирован для случаев использования Swarm.

Более того, вы можете проверить некоторые сторонние драйверы томов в Docker Store.

...