Как я могу реплицировать контейнеры внутри службы докеров при перезапуске демона докеров?

Я создал службу Docker для образа кластер percona XtraDB с 3 репликами с помощью следующей команды.

docker service create \
--name mysql-galera \
--replicas 3 \
-p 3306:3306 \
--network mynet \
--env MYSQL_ROOT_PASSWORD=mypassword \
--env DISCOVERY_SERVICE=10.0.0.2:2379 \
--env XTRABACKUP_PASSWORD=mypassword \
--env CLUSTER_NAME=galera \
perconalab/percona-xtradb-cluster:5.6

Я уже инициализировал рой докеров с тремя машинами (с именами mach1, mach2, mach3), и все они объединены в качестве менеджеров. И реплики поровну распределяются на каждую из трех машин

Когда я попытался остановить демон docker в mach2, docker создал еще один контейнер-реплику в mach3. Я снова перезапустил демон docker, mach3 по-прежнему запускал две реплики, а на mach2 ничего не было. Я вручную удалил контейнер в mach3, а mach2 поднялся с 3-й репликой.

Что мне делать, чтобы автоматически реплицировать контейнеры на перезапущенном докер-компьютере?


person Manjunath PV    schedule 03.04.2018    source источник


Ответы (2)


Я не думаю, что опция перебалансировки службы докеров доступна в рое докеров ..... вы можете перераспределить контейнер, обновив службу с опцией --force

docker service update mysql-galera --force
person Ashok Reddy    schedule 03.04.2018
comment
Это правильно. Вы хотите, чтобы перемещение здоровых рабочих нагрузок было операцией, контролируемой оператором. Вы должны проектировать свои узлы таким образом, чтобы один (или несколько, в зависимости от ваших требований к отказу) могли выйти из строя, а ваша производительность/ресурсы все еще были хорошими. Если это так, то не нужно будет спешить с переносом рабочих нагрузок обратно на другой узел. Если вам не нужно более одной реплики на узел, используйте глобальный режим при создании службы. - person Bret Fisher; 04.04.2018

То, что вы ищете, — это способ автоматической перебалансировки вашего набора реплик в зависимости от наличия ведущих / подчиненных узлов с емкостью. Однако для этого потребуется убить здоровые контейнеры и изменить их расписание.

В docker swarm есть открытая проблема для этого https://github.com/moby/moby/issues/24103

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

person Mohit Mutha    schedule 03.04.2018
comment
Могу ли я добиться этого с помощью флага --restart-condition? Или это решит половину этой ситуации? - person Manjunath PV; 03.04.2018
comment
Непонятно, как вы предлагаете его использовать, но --restart-condition определяет только политику перезапуска для контейнера. - person Mohit Mutha; 03.04.2018