Эластичный в доке стека / роя - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть рой из двух узлов

[ra@speechanalytics-test ~]$ docker node ls
ID                            HOSTNAME                  STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
mlwwmkdlzbv0zlapqe1veq3uq     speechanalytics-preprod   Ready               Active                                  18.09.3
se717p88485s22s715rdir9x2 *   speechanalytics-test      Ready               Active              Leader              18.09.3

Я пытаюсь запустить контейнер с резинкой в ​​стеке.Вот мой docker-compose.yml файл

version: '3.4'
services:
  elastic:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.7.0
    environment:
      - cluster.name=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    deploy:
      placement:
        constraints:
          - node.hostname==speechanalytics-preprod

volumes:
  esdata:
    driver: local

после запуска со стеком докера1014 *

ra@speechanalytics-preprod:~$ sysctl vm.max_map_count
vm.max_map_count = 262144

Есть идеи как исправить?

1 Ответ

3 голосов
/ 07 апреля 2019

Ошибки блокировок памяти, которые вы видите в Elasticsearch, являются распространенной проблемой, которая характерна не только для использования Docker, но возникает, когда Elasticsearch получает запрос на блокировку своей памяти, но не может этого сделать.Вы можете обойти ошибку, удалив следующую переменную среды из файла docker-compose.yml:

- bootstrap.memory_lock=true

Memlock может использоваться в Docker Swarm Mode, но снекоторые предостережения.

Не все опции, которые работают с docker-compose (Docker Compose), работают с docker stack deploy (Docker Swarm Mode) и наоборот, несмотря на то, что оба разделяют синтаксис YAML docker-compose.Одним из таких вариантов является ulimits:, который при использовании с развертыванием стека докеров будет игнорироваться с предупреждением, например так:

Ignoring unsupported options: ulimits

Я предполагаю, что с вашим файлом docker-compose.yml Elasticsearch работает нормальнос docker-compose up, но не с docker stack deploy.

В режиме Docker Swarm Mode по умолчанию определенный вами экземпляр Elasticsearch будет иметь проблемы с memlock.В настоящее время настройка ulimits для сервисов Docker Swarm пока официально не поддерживается .Однако есть способы обойти эту проблему.

Если хостом является Ubuntu , неограниченная блокировка памяти может быть включена через службу докера (см. здесь и здесь ).Это может быть достигнуто с помощью команд:

echo -e "[Service]\nLimitMEMLOCK=infinity" | SYSTEMD_EDITOR=tee systemctl edit docker.service
systemctl daemon-reload
systemctl restart docker

Однако установка memlock на бесконечность не лишена недостатков, как указано самими Elastic здесь .

Basedна моем тестировании решение работает на Docker 18.06, но не на 18.09.Учитывая несогласованность и возможность запуска Elasticsearch, лучшим вариантом будет , а не использование memlock с Elasticsearch при развертывании на Swarm.Вместо этого вы можете выбрать любой из других методов, упомянутых в Elasticsearch Docs , для достижения аналогичных результатов.

...