Docker swarm 集群搭建实现wordpress高可用

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&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HOSTNAME &nbsp; STATUS&nbsp; &nbsp; AVAILABILITY &nbsp; MANAGER STATUS &nbsp; ENGINE VERSION

stnfb1bdotj8ka915yuhrt8ex * &nbsp; debian &nbsp; &nbsp; Ready &nbsp; &nbsp; Active &nbsp; &nbsp; &nbsp; &nbsp; Leader &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 28.0.1

upicmogfh7spfgcsuy9knljna &nbsp; &nbsp; debian &nbsp; &nbsp; Ready &nbsp; &nbsp; Active&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 28.0.1

root@debian:~#

3. Docker Swarm来运行 WordPress 并实现高可用

  1. WordPress 数据持久化:使用 local volume 并在 Swarm 模式下进行数据同步。
  2. MySQL 主从复制:使用 MySQL 8.0 实现 主从架构,保证数据库高可用。
  3. 负载均衡:使用 Swarm 内置的 ingress 网络,让 WordPress 服务在两台机器上自动负载均衡。
  4. 自动重启:如果某个节点故障,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 副本共享流量,确保访问分布均衡。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注