みなさん、こんにちは。本番環境でDocker Swarmを使用していますが、クラスター内のノード間でコンテナーと負荷のバランスを取るという問題に直面しています。私たちが直面した困難についてお話しし、解決策を共有したいと思います。
1)問題の説明
, . , docker swarm. . php-fpm, . .
. DB1 — MySQL , Docker Swarm, . — Web 1 , , . , , . — .
. Swarm — .
, Web 1 , . , , , . Web1, . Docker Swarm . .
, Web 1 master , web2 — worker. master , , . , . Web 2 , cloud , , . , .
: (Web 2) , (Web 2) . , , Docker Swarm.
, Web 2 , Swarm. , — master (Web 1). , , Web 2.
— Web 1 Docker Swarm , . , , . Web 2 , , :
docker service update --force
, .
, deploy , , . , php-fpm, , php-fpm () , . , , deploy .
, — deploy php-fpm , Swarm . , , — php-fpm - .
Docker, : , Docker Swarm placement, label . , . Docker Docker Swarm . placement , .
, php-fpm Docker Swarm Web 2. , php-fpm , , php-fpm , . Web 2 Web1, php-fpm , - . Web 2 php-fpm, , Web 1. , php-fpm, , . .
Web 2 . ci , Web 2 , . , . Docker Swarm. - , Swarm (Web 2) .
2)
, . , , , , . , , , . , , , docker service update --force , .
- Swarm Manager. Swarm Manager — bash-, ssh, . cron . .
, cron swarm_provisioner.sh, . swarm_provisioner.sh , ssh root . . , root, swarm_provisioner.sh, root SSH_COMMAND docker ps. cron file:
SHELL=/bin/bash
*/1 * * * * /swarm_provisioner.sh "web-group" "edphp-fpm" "-p 22"
, cron swarm_provisioner.sh .
, .
— label. , , . — , .
— , , . ed, - php-fpm.
— ssh, label . , docker service update --force.
, , docker swarm . , , - .
swarm-manager:
image: swarm-manager:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /swarm-keys:/root/.ssh
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 1s
order: start-first
restart_policy:
condition: on-failure
placement:
constraints:
- node.role==manager
3)
, . . , ssh docker api, , , .