预计阅读时间: 9 分钟
1. 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
2. 配置swarm
# manage节点
docker swarm init --advertise-addr 192.168.1.190
# worker节点
docker swarm join --token <TOKEN> 192.168.1.190:2377
# 样例
docker swarm join --token SWMTKN-1-29g8esjiy370vvmp4p3d0cldhca0q2uwfsb2eyszwmkhg99pc5-a6n5vf0gpg2hf14xsz9i4ybpu 192.168.1.190:2377
验证
# manage 节点查看
docker node ls
# 输出
root@debian:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
stnfb1bdotj8ka915yuhrt8ex * debian Ready Active Leader 28.0.1
upicmogfh7spfgcsuy9knljna debian Ready Active 28.0.1
root@debian:~#
3. Docker Swarm来运行 WordPress 并实现高可用
- WordPress 数据持久化:使用
local volume
并在 Swarm 模式下进行数据同步。
- MySQL 主从复制:使用 MySQL 8.0 实现 主从架构,保证数据库高可用。
- 负载均衡:使用 Swarm 内置的 ingress 网络,让 WordPress 服务在两台机器上自动负载均衡。
- 自动重启:如果某个节点故障,Swarm 可以自动将容器调度到可用节点。
4. 部署步骤
Docker Compose 文件 (docker-compose.yml
)
version: '3.8'
services:
mysql-master:
image: mysql:8.0
command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- mysql_master_data:/var/lib/mysql
networks:
- wp_network
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
mysql-slave:
image: mysql:8.0
command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- mysql_slave_data:/var/lib/mysql
networks:
- wp_network
deploy:
replicas: 1
placement:
constraints:
- node.role == worker
wordpress:
image: wordpress:latest
depends_on:
- mysql-master
environment:
WORDPRESS_DB_HOST: mysql-master
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
networks:
- wp_network
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
ports:
- "80:80"
volumes:
mysql_master_data:
mysql_slave_data:
wordpress_data:
networks:
wp_network:
driver: overlay
1. 将 docker-compose.yml
上传到管理节点
scp docker-compose.yml user@swarm-manager:/home/user/
2. 在 Swarm 管理节点上执行部署
docker stack deploy -c docker-compose.yml wordpress
3. 验证服务是否正常运行
docker stack services wordpress
4. 查看所有容器运行状态
docker ps
高可用性
- 数据库:主从架构,若
mysql-master
失败,可手动切换 mysql-slave
为主库。
- WordPress:多个副本运行在不同的 Swarm 节点,即使一台机器宕机,站点依然可用。
- 负载均衡:Swarm 内置负载均衡,所有 WordPress 副本共享流量,确保访问分布均衡。
发表回复