Учитывая Docker 1.12. Я понимаю, что тома не являются переносимыми в рое, и что такие решения, как Flocker, лучше подходят для больших кластеров.
Тем не менее, приемлем ли вариант, который я описываю ниже, для моей установки?
Настроить Рой с 3 узлами, запущенный в Docker 1.12 last из экспериментальной ветки.
Цель Запустите красивый, но небольшой кластер Cassandra.
Проблема Я хочу развязать сохранный часть услуги (объем данных) из без гражданства Демоны Кассандры.
Предложенное решение Создайте именованный том вручную на каждом узле с тем же именем на каждом узле. Использовать docker service create --name cassandra --replicas 3 --mount type=volume,source=cassandra_data,target=/usr/var/cassandra
Насколько я понимаю, будет запущена одна реплика Cassandra и каждый узел, каждый из которых ссылается на локальный именованный том с тем же именем.
Это сработает? Нужно ли указывать ограничение, чтобы на каждый узел роя приходилось не более 1 реплики?
редактировать: читая документ, кажется, стоит использовать --mode=global
вместо того replicas=3
для запуска ровно 1 реплики на узел роя. Что имеет большой смысл ...
Начиная с версии 19.03, теперь есть возможность ограничить количество реплик на узел, чтобы избежать доступа нескольких реплик к одному и тому же тому:
$ docker service create --help
Usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Create a new service
Options:
...
--replicas-max-per-node uint Maximum number of tasks per node (default 0 = unlimited)
С этим добавлено service create
, следующим шагом будет добавление настройки размещения в файл создания для поддержки docker stack deploy
.
Да, это работает, и использование глобального флага будет лучшим вариантом для предотвращения любых конфликтов. Я использовал аналогичную модель с MongoDB в качестве теста и отлично работал.