手动基于三台服务器搭建 MySQL+PHP8.x+Redis 负载均衡集群
一、架构设计
角色分配
主节点(Server A):运行 Nginx 负载均衡器、MySQL 主库、Redis 主实例、PHP-FPM。
次节点(Server B/C):运行 MySQL 从库、Redis 从实例、PHP-FPM,通过 Nginx 分发请求。
共享存储(可选):用于存放 PHP 代码和静态文件(如 NFS 或云存储),确保多节点数据一致性。
网络拓扑
主节点 Nginx 接收外部请求,按策略分发到次节点。
MySQL 主从复制实现数据同步,Redis 主从复制缓存同步。
PHP 会话(Session)存储于 Redis,确保多节点会话共享。
二、具体配置步骤
1. MySQL主从复制配置
主节点(Server A)
# /etc/mysql/my.cnf [mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROWCREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 记录File和Position次节点(Server B/C)
# /etc/mysql/my.cnf [mysqld] server-id = 2 # Server B为2,Server C为3 relay-log = relay-binCHANGE MASTER TO MASTER_HOST='Server_A_IP', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234; START SLAVE; SHOW SLAVE STATUS\G; # 验证Slave_IO_Running和Slave_SQL_Running为Yes注意:从库建议设为
read-only=1避免误写。
2. Redis主从复制配置
主节点(Server A)
# /etc/redis/redis.conf bind 0.0.0.0 protected-mode no requirepass yourpasswordsystemctl restart redis次节点(Server B/C)
# /etc/redis/redis.conf replicaof Server_A_IP 6379 masterauth yourpasswordsystemctl restart redis验证:在主节点执行
INFO replication查看从库连接状态。
3. PHP-FPM配置(所有节点)
# /etc/php/8.x/fpm/pool.d/ www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
listen = /var/run/php/php8.x-fpm.sock将会话存储至 Redis(php.ini):
session.save_handler = redis
session.save_path = "tcp://Server_A_IP:6379?auth=yourpassword"重启 PHP-FPM:systemctl restart php8.x-fpm。
4. Nginx负载均衡配置(主节点)
# /etc/nginx/nginx.conf
http {
upstream backend {
least_conn; # 最少连接算法
server Server_B_IP weight=2; # 权重根据性能调整
server Server_C_IP weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ \.php$ {
proxy_pass http://backend;
fastcgi_pass unix:/var/run/php/php8.x-fpm.sock;
include fastcgi_params;
}
}
}关键优化:
启用
keepalive减少连接开销。配置健康检查(Nginx Plus 或第三方模块)。
5. 安全与监控
防火墙:开放端口(80、3306、6379、9000)并限制内网访问。
监控工具:
Prometheus + Grafana 监控服务器指标。
MySQL 监控:
pt-heartbeat检测复制延迟。Redis 监控:
redis-cli --latency。
三、故障处理与扩展
MySQL 主从故障:
主库宕机时手动提升从库为主(
STOP SLAVE; RESET MASTER;)。使用 MyCAT 实现自动故障转移(需额外配置)。
Redis 高可用:
部署 Redis Sentinel 或 Cluster 模式替代主从。
横向扩展:
新增次节点时,只需同步 MySQL/Redis 配置并加入 Nginx upstream。
四、性能优化建议
MySQL:
主库启用
binlog_group_commit_sync_delay减少磁盘 I/O。从库启用
slave_parallel_workers加速复制。
Redis:
主节点开启 AOF 持久化(
appendonly yes)。次节点配置
replica-serve-stale-data yes避免缓存穿透。
Nginx:
启用 Gzip 压缩和静态文件缓存。
上面可以快速实现三台服务器的高可用负载均衡集群,适用于高并发场景。如需更自动化管理,可结合 Kubernetes 或 Docker Swarm 编排容器化服务。