LNMP在Ubuntu上的负载均衡怎么做
导读:在 Ubuntu 上搭建 LNMP 负载均衡 架构与准备 组件角色划分:使用 Nginx 作为反向代理与负载均衡器,后端多台 Nginx + PHP‑FPM 应用服务器,数据库层建议做 MySQL 主从复制 以分担读压力与提升可用性。 基...
在 Ubuntu 上搭建 LNMP 负载均衡
架构与准备
- 组件角色划分:使用 Nginx 作为反向代理与负载均衡器,后端多台 Nginx + PHP‑FPM 应用服务器,数据库层建议做 MySQL 主从复制 以分担读压力与提升可用性。
- 基础准备:至少准备 1 台负载均衡器 与 2 台以上后端应用服务器;统一 PHP 版本 与 Nginx 配置;后端根目录与代码保持一致(建议用 NFS/GlusterFS/对象存储 或 CI/CD 自动同步);开放防火墙端口 80/443;后端 PHP‑FPM 建议使用 Unix Socket 提升性能。
方案一 Nginx 作为负载均衡器
- 安装与启用
- 在负载均衡器执行:
sudo apt update & & sudo apt install nginx
- 在负载均衡器执行:
- 配置 upstream 与反向代理
- 新建配置:
sudo nano /etc/nginx/conf.d/load_balancer.conf - 示例:
http { upstream backend { server 10.0.0.11:80 weight=1 max_fails=3 fail_timeout=30s; server 10.0.0.12:80 weight=1 max_fails=3 fail_timeout=30s; # 可按需添加:least_conn; 或 ip_hash; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_next_upstream error timeout http_502 http_503 http_504; } } }
- 新建配置:
- 生效配置
sudo nginx -t & & sudo systemctl reload nginx
- 说明
- 默认策略为 轮询(round‑robin);可按需改为 least_conn、ip_hash 等;
max_fails/fail_timeout配合proxy_next_upstream实现故障转移与摘除异常节点。
- 默认策略为 轮询(round‑robin);可按需改为 least_conn、ip_hash 等;
方案二 使用 HAProxy 或 LVS
- HAProxy
- 安装:
sudo apt-get install haproxy - 启用并配置
/etc/haproxy/haproxy.cfg(示例片段):frontend http-in bind *:80 default_backend lnmp_backends backend lnmp_backends balance roundrobin server web1 10.0.0.11:80 check server web2 10.0.0.12:80 check - 启用:
sudo systemctl enable --now haproxy
- 安装:
- LVS(内核 IPVS,四层转发)
- 安装管理工具:
sudo apt-get install ipvsadm - 添加虚拟服务(示例):
sudo ipvsadm -A -t 192.168.0.100:80 -s rr - 添加后端:
sudo ipvsadm -a -t 192.168.0.100:80 -r 10.0.0.11:80 -g与-r 10.0.0.12:80 -g
- 安装管理工具:
- 适用场景
- HAProxy 更灵活(支持七层与健康检查);LVS 适合高吞吐的四层转发场景。
后端与数据库层配置要点
- PHP‑FPM(各后端)
- 安装:
sudo apt install php-fpm - 建议 Unix Socket:编辑
/etc/php/8.1/fpm/pool.d/www.conf(版本号按实际)listen = /run/php/php8.1-fpm.socklisten.owner = www-data; listen.group = www-data; listen.mode = 0660
- Nginx 站点中 PHP 处理示例:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } - 重载:
sudo systemctl reload php8.1-fpm & & sudo systemctl reload nginx
- 安装:
- MySQL 主从复制(可选,提升读能力与可用性)
- 主库
/etc/mysql/mysql.conf.d/mysqld.cnf:[mysqld] server-id=1 log_bin=/var/log/mysql/mysql-bin.log - 主库创建复制用户并获取位点:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPass!'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 记录 File 与 Position -- 导出数据:mysqldump -u root -p --all-databases > full.sql UNLOCK TABLES; - 从库配置:
[mysqld] server-id=2 relay_log=/var/log/mysql/mysql-relay-bin.log read_only=1 - 从库接入复制:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replicator', MASTER_PASSWORD='StrongPass!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; START SLAVE; - 应用连接建议:写主库,读可走从库(或在应用层/中间件做读写分离)。
- 主库
健康检查与高可用增强
- 负载均衡器高可用(Keepalived VIP)
- 在两台负载均衡器上安装:
sudo apt update & & sudo apt install keepalived - 主节点示例
/etc/keepalived/keepalived.conf:vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS; auth_pass 42 } virtual_ipaddress { 192.168.1.100/24 } } - 备节点将
state设为 BACKUP、priority略低;启动:sudo systemctl enable --now keepalived
- 在两台负载均衡器上安装:
- 监控与告警
- 建议接入 Prometheus + Grafana 监控 Nginx/后端/PHP‑FPM/MySQL 指标并设置告警,便于快速定位与自动恢复。
快速验证与常见问题
- 验证步骤
- 在负载均衡器执行:
curl -I http://your-domain.com多次,观察返回节点是否轮询变化;后端查看 access.log 的 X‑Forwarded‑For 与 X‑Real‑IP 是否正确;临时摘除节点(关闭后端或max_fails触发)验证自动故障转移。
- 在负载均衡器执行:
- 常见问题
- 静态资源不一致:确保多台后端 代码与上传目录 一致(使用共享存储或同步机制)。
- 502/504:检查后端 PHP‑FPM 是否运行、Socket 权限与路径是否一致、超时设置是否合理。
- 会话保持:有状态应用可使用 ip_hash 或在应用层引入 Redis 集中会话存储。
- 数据库写入失败:确认应用连接的是 主库,读写分离策略正确。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Ubuntu上的负载均衡怎么做
本文地址: https://pptw.com/jishu/761739.html
