LNMP环境下Ubuntu实现负载均衡的完整指南
一、基础环境准备
在Ubuntu上实现LNMP(Linux+Nginx+MySQL+PHP)负载均衡前,需完成以下准备工作:
- 安装Nginx:作为负载均衡器,负责请求的分发与转发。
sudo apt update && sudo apt install nginx -y - 部署后端服务器:至少准备2台Ubuntu服务器(或同一服务器的不同实例),均安装LNMP环境(Nginx、MySQL、PHP-FPM),并确保服务正常运行(如Nginx监听80端口、PHP-FPM监听9000端口)。
- 网络互通:负载均衡器与后端服务器之间需开放HTTP(80)/HTTPS(443)端口,可通过
ping或telnet命令验证连通性。
二、Nginx负载均衡核心配置
Nginx通过upstream模块定义后端服务器组,结合proxy_pass指令实现请求转发。以下是常见配置场景:
1. 基础轮询配置(默认策略)
轮询是Nginx的默认负载均衡算法,按顺序将请求分发到后端服务器,适用于服务器性能相近的场景。
http {
upstream backend {
server 192.168.1.101:80; # 后端服务器1
server 192.168.1.102:80; # 后端服务器2
}
server {
listen 80;
server_name example.com; # 负载均衡器域名
location / {
proxy_pass http://backend; # 转发至backend服务器组
proxy_set_header Host $host; # 保留原始主机头
proxy_set_header X-Real-IP $remote_addr; # 记录客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录代理路径IP
}
}
}
说明:proxy_set_header指令用于传递客户端真实信息,避免后端应用无法获取正确IP。
2. 加权轮询配置(按性能分配流量)
若后端服务器性能差异较大(如CPU、内存不同),可通过weight参数分配权重,权重越高,处理的请求数越多。
upstream backend {
server 192.168.1.101:80 weight=3; # 权重3,处理约50%请求
server 192.168.1.102:80 weight=1; # 权重1,处理约25%请求
}
适用场景:高性能服务器承担更多流量,提升整体资源利用率。
3. IP哈希配置(会话保持)
对于需要会话保持的应用(如用户登录状态、购物车数据),ip_hash指令可根据客户端IP地址进行哈希运算,确保同一IP的请求始终分发到同一后端服务器。
upstream backend {
ip_hash; # 启用IP哈希
server 192.168.1.101:80;
server 192.168.1.102:80;
}
注意:若后端服务器需要扩容或缩容,IP哈希可能导致会话失效,需谨慎使用。
4. 最少连接配置(动态负载)
least_conn指令将请求分发到当前连接数最少的服务器,适用于处理动态内容(如PHP、数据库查询)且服务器负载波动较大的场景。
upstream backend {
least_conn; # 启用最少连接
server 192.168.1.101:80;
server 192.168.1.102:80;
}
优势:动态调整流量分配,避免某台服务器过载。
三、优化与安全配置
1. 健康检查(自动剔除故障服务器)
Nginx Plus(商业版)支持内置健康检查,开源版可通过max_fails和fail_timeout参数模拟健康检查:
upstream backend {
server 192.168.1.101:80 max_fails=3 fail_timeout=30s; # 3次失败后,30秒内不再使用
server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
}
说明:max_fails表示允许的最大失败次数,fail_timeout表示失败后的冷却时间。
2. PHP-FPM配置(确保后端处理能力)
若后端应用使用PHP,需确保每台服务器上的PHP-FPM配置合理,以处理并发请求。编辑/etc/php/7.4/fpm/pool.d/www.conf(根据PHP版本调整):
[www]
listen = /var/run/php/php7.4-fpm.sock # 使用Unix socket(性能更高)
listen.allowed_clients = 127.0.0.1 # 允许Nginx访问
pm = dynamic # 动态进程管理
pm.max_children = 50 # 最大子进程数(根据服务器内存调整)
pm.start_servers = 10 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数
pm.max_spare_servers = 20 # 最大空闲子进程数
说明:调整pm.max_children需考虑服务器内存(每个PHP进程约占用10-20MB内存),避免内存耗尽。
3. 数据库负载均衡(可选)
若应用需要数据库负载均衡,可配置MySQL主从复制(读写分离):
- 主服务器:配置
log_bin(开启二进制日志)、server-id=1,创建复制用户。 - 从服务器:配置
relay_log(开启中继日志)、server-id=2,执行CHANGE MASTER TO同步主服务器数据。
通过Nginx的upstream模块或专门的数据库负载均衡工具(如ProxySQL),将读请求分发到从服务器,写请求发送到主服务器。
四、测试与验证
- 检查Nginx配置语法:
若输出sudo nginx -tsyntax is ok,说明配置正确。 - 重启Nginx服务:
sudo systemctl restart nginx - 验证负载均衡效果:
- 在后端服务器上运行
tail -f /var/log/nginx/access.log,观察请求是否分发到不同服务器。 - 使用
ab(Apache Benchmark)工具模拟并发请求:
查看响应时间和请求分发情况。ab -n 100 -c 10 http://example.com/
- 在后端服务器上运行
通过以上步骤,即可在Ubuntu的LNMP环境中实现高效的负载均衡,提升应用的可用性与性能。根据实际需求,可选择不同的负载均衡策略,并结合健康检查、性能调优等手段优化配置。
以上就是关于“LNMP环境下Ubuntu如何进行负载均衡”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm