Ubuntu LNMP服务器如何负载均衡
导读:Ubuntu LNMP服务器负载均衡配置指南 负载均衡是LNMP(Linux+Nginx+MySQL+PHP)架构中提升系统性能、可用性的关键环节,主要通过Nginx反向代理实现请求分发,同时需优化PHP-FPM、MySQL等组件以匹配负载...
Ubuntu LNMP服务器负载均衡配置指南
负载均衡是LNMP(Linux+Nginx+MySQL+PHP)架构中提升系统性能、可用性的关键环节,主要通过Nginx反向代理实现请求分发,同时需优化PHP-FPM、MySQL等组件以匹配负载均衡需求。
一、基础环境准备
- 安装Nginx:确保所有服务器(负载均衡器+后端服务器)均安装Nginx,命令如下:
sudo apt update & & sudo apt install nginx -y
- 部署LNMP后端节点:每台后端服务器需安装并配置Nginx+PHP-FPM+MySQL(或仅作为应用服务器,共享同一数据库)。
- PHP-FPM配置示例(
/etc/php/7.4/fpm/pool.d/www.conf
):[www] listen = /var/run/php/php7.4-fpm.sock pm = dynamic pm.max_children = 50 # 根据服务器内存调整 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 15
- 重启PHP-FPM:
sudo systemctl restart php7.4-fpm
- PHP-FPM配置示例(
二、Nginx负载均衡核心配置
1. 定义后端服务器组(Upstream)
在Nginx的http
块中添加upstream
模块,列出所有后端服务器IP或域名:
http {
upstream backend {
server 192.168.1.101:80;
# 后端服务器1
server 192.168.1.102:80;
# 后端服务器2
server 192.168.1.103:80;
# 后端服务器3
}
# ...
}
2. 选择负载均衡策略
Nginx支持多种策略,可根据业务需求选择:
- 轮询(默认):按顺序分发请求,适合服务器性能相近的场景(无需额外配置)。
- 加权轮询:根据服务器性能分配权重(
weight
),权重越高,请求越多:upstream backend { server 192.168.1.101 weight=3; # 承担3/5流量 server 192.168.1.102 weight=2; # 承担2/5流量 server 192.168.1.103 weight=1; }
- IP哈希:通过客户端IP哈希分配请求,保证同一IP的请求始终到达同一服务器(适合需要会话保持的场景,如购物车):
upstream backend { ip_hash; server 192.168.1.101; server 192.168.1.102; }
- 最少连接:将请求分发给当前连接数最少的服务器,适合长连接或动态内容(如视频流):
upstream backend { least_conn; server 192.168.1.101; server 192.168.1.102; }
3. 配置反向代理
在server
块中添加location
指令,将请求转发至backend
服务器组,并传递必要头部信息(如客户端真实IP):
server {
listen 80;
server_name example.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;
}
# 处理PHP请求(可选,若后端服务器直接处理PHP)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# 根据实际情况调整
}
}
4. 测试与重启Nginx
- 检查配置语法:
sudo nginx -t
(无错误则继续)。 - 重启Nginx:
sudo systemctl restart nginx
。
三、数据库负载均衡(可选,提升数据库性能)
若应用需要高并发数据库访问,可通过MySQL主从复制实现读写分离:
1. 主服务器配置(Master)
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
:[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = your_database_name # 需同步的数据库
- 重启MySQL:
sudo systemctl restart mysql
。 - 创建复制用户并授权:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPassword'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;
- 查看二进制日志位置(记录
File
和Position
,后续用于从服务器配置):SHOW MASTER STATUS;
2. 从服务器配置(Slave)
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
:[mysqld] server-id = 2 relay_log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = your_database_name read_only = 1 # 设置为只读(可选,增强安全性)
- 重启MySQL:
sudo systemctl restart mysql
。 - 导入主服务器数据:
mysqldump -u root -p --all-databases > full-backup.sql scp full-backup.sql user@slave_ip:/tmp/ mysql -u root -p < /tmp/full-backup.sql
- 配置复制:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replicator', MASTER_PASSWORD='StrongPassword', MASTER_LOG_FILE='mysql-bin.000001', # 替换为主服务器的File值 MASTER_LOG_POS=154; # 替换为主服务器的Position值 START SLAVE;
- 检查复制状态(
Slave_IO_Running
和Slave_SQL_Running
应为Yes
):SHOW SLAVE STATUS\G;
3. Nginx配置数据库负载均衡(可选)
若需Nginx直接转发数据库请求(如API调用),可使用ngx_stream_module
模块(需编译Nginx时开启),配置示例如下:
stream {
upstream mysql_backend {
server master_ip:3306;
server slave_ip:3306;
}
server {
listen 3306;
proxy_pass mysql_backend;
}
}
四、验证负载均衡效果
- 访问Nginx服务器:通过浏览器或
curl
访问http://example.com
,多次刷新页面,观察请求是否分发至不同后端服务器(可通过后端服务器日志确认)。 - 检查PHP-FPM状态:访问
http://example.com/info.php
(需创建info.php
文件),查看Server API
是否为FPM/FastCGI
,确认PHP请求被正确处理。 - 监控数据库复制:在从服务器执行
SHOW SLAVE STATUS\G
,确保Seconds_Behind_Master
为0
(实时同步)。
五、高级优化建议
- 健康检查:通过
max_fails
和fail_timeout
参数排除故障服务器(如server 192.168.1.101 max_fails=3 fail_timeout=30s;
),避免将请求发送至不可用服务器。 - SSL终端:在Nginx负载均衡器上配置SSL证书,减轻后端服务器的加密计算负担(如Let’s Encrypt免费证书)。
- 缓存优化:启用Nginx缓存(
proxy_cache
模块),减少后端服务器的压力(适合静态内容)。 - 会话保持:若应用需要会话一致性(如用户登录状态),可使用
ip_hash
策略或分布式会话存储(如Redis)。
通过以上步骤,即可实现Ubuntu LNMP服务器的高效负载均衡,提升系统性能与可靠性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP服务器如何负载均衡
本文地址: https://pptw.com/jishu/715970.html