本方案采用2台CentOS 8.5云服务器、1个阿里云公网SLB做基础架构,所有操作以root权限执行,若为普通用户需在命令前加sudo。
两台服务器执行完全相同的初始化命令,关闭防火墙、SELinux、禁用IPv6、设置同步时间、安装基础工具:
```bash 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 禁用IPv6 echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6=1" >> /etc/sysctl.conf sysctl -p 设置同步时间 yum install -y chrony systemctl start chronyd systemctl enable chronyd 安装基础工具 yum install -y wget curl vim net-tools git ```两台服务器同时操作,采用阿里云镜像源加速安装:
本方案以Nginx+WordPress为例,两台服务器部署完全相同的服务:
完整可复制的配置文件:
```yaml version: '3.8' services: mysql: image: mysql:8.0.36 container_name: wordpress-mysql restart: always environment: MYSQL_ROOT_PASSWORD: 你的MySQL root密码 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress_user MYSQL_PASSWORD: 你的MySQL应用密码 volumes: - /data/wordpress/mysql:/var/lib/mysql networks: - wordpress-net wordpress: depends_on: - mysql image: wordpress:6.5.2-php8.2-fpm-alpine container_name: wordpress-php restart: always environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wordpress_user WORDPRESS_DB_PASSWORD: 你的MySQL应用密码 volumes: - /data/wordpress/html:/var/www/html networks: - wordpress-net nginx: depends_on: - wordpress image: nginx:1.26-alpine container_name: wordpress-nginx restart: always ports: - "80:80" volumes: - /data/wordpress/html:/var/www/html - /data/wordpress/nginx/wordpress.conf:/etc/nginx/conf.d/default.conf networks: - wordpress-net networks: wordpress-net: ```注意:请将配置文件中的“你的MySQL root密码”“你的MySQL应用密码”替换为复杂度较高的8位以上密码,避免使用弱密码。
创建并编辑/data/wordpress/nginx/wordpress.conf:
```bash vim /data/wordpress/nginx/wordpress.conf ```粘贴以下完整可复制的配置:
```nginx server { listen 80; server_name 你的网站域名或SLB公网IP; root /var/www/html; index index.php index.html index.htm; client_max_body_size 100M; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass wordpress:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } } ```注意:请将“你的网站域名或SLB公网IP”替换为实际的内容,之后保存退出vim(按Esc键,输入:wq,按Enter键)。

登录阿里云控制台,配置SLB将流量分发到两台后端ECS的80端口:
两台服务器部署相同服务后,需同步WordPress的html和mysql数据,本方案采用rsync+定时任务实现每日增量同步,主服务器为第一台ECS(记为Server A),备用服务器为第二台ECS(记为Server B):
Server A执行:
```bash 生成SSH密钥对,连续按3次Enter键即可 ssh-keygen -t rsa -b 2048 将公钥复制到Server B ssh-copy-id root@Server B的内网IP 验证免密登录,无需输入密码即可进入Server B ssh root@Server B的内网IP ```创建并编辑/data/wordpress/sync.sh:
```bash vim /data/wordpress/sync.sh ```粘贴以下完整可复制的脚本:
```bash !/bin/bash 定义同步目录 HTML_DIR="/data/wordpress/html" MYSQL_DIR="/data/wordpress/mysql" 定义Server B的内网IP SERVER_B_IP="Server B的内网IP" 同步WordPress html数据 rsync -avz --delete --exclude '.log' $HTML_DIR root@$SERVER_B_IP:$HTML_DIR 同步WordPress mysql数据前需停止两台服务器的mysql容器 ssh root@$SERVER_B_IP "cd /data/wordpress && docker compose stop mysql" cd /data/wordpress && docker compose stop mysql 同步mysql数据 rsync -avz --delete --exclude '.log' $MYSQL_DIR root@$SERVER_B_IP:$MYSQL_DIR 启动两台服务器的mysql容器 cd /data/wordpress && docker compose start mysql ssh root@$SERVER_B_IP "cd /data/wordpress && docker compose start mysql" ```注意:请将“Server B的内网IP”替换为实际的内容,之后保存退出vim。
编辑定时任务:
```bash crontab -e ```添加以下内容,设置每日凌晨2点同步:
```bash 0 2 /data/wordpress/sync.sh >> /var/log/wordpress-sync.log 2>&1 ```保存退出vim,查看定时任务是否生效:
```bash crontab -l ```验证方法:手动关闭Server A的Docker服务,访问SLB公网IP或网站域名,确认仍能正常打开WordPress:
```bash Server A执行 systemctl stop docker ```验证完成后重启Server A的Docker服务:
```bash systemctl start docker cd /data/wordpress docker compose up -d ```易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图