Как я могу реплицировать контейнеры внутри службы Docker, когда я перезапускаю демон Docker?
Я создал сервис 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
Я уже инициализировал рой Docker с тремя машинами (названными с помощью mach1, mach2, mach3), и все они объединены в качестве менеджеров. И реплики равномерно распределены по каждой из трех машин
Когда я попытался остановить демон docker в mach2, docker создал еще один контейнер реплики в mach3. Я снова перезапустил демон докера, на mach3 все еще работали две реплики и ничего на mach2. Я вручную удалил контейнер в mach3, и mach2 был с 3-й репликой
Что я должен сделать для автоматической репликации контейнеров на перезагруженном докере?
2 ответа
Я не думаю, что в docker swarm доступна опция перебалансирования службы Docker..... вы можете перераспределить контейнер, обновив службу с опцией --force
docker service update mysql-galera --force
То, что вы ищете, - это способ автоматически перебалансировать ваш репликационный набор на основе доступности мастер-/ подчиненных узлов с емкостью. Однако для этого потребуется убить здоровые контейнеры и изменить их расписание.
Существует открытый вопрос в Docker Swarm для этого https://github.com/moby/moby/issues/24103
Прямо сейчас, если вы хотите сделать это, лучший способ, кажется, состоит в том, чтобы прокрутить вверх / вниз или создать свиток, который попытается перепланировать контейнеры в рое.