Ubuntu LNMP服务器负载均衡配置指南
负载均衡是LNMP(Linux+Nginx+MySQL+PHP)架构中提升系统性能、可用性的关键环节,主要通过Nginx反向代理实现请求分发,同时需优化PHP-FPM、MySQL等组件以匹配负载均衡需求。
sudo apt update && sudo apt install nginx -y
/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
sudo systemctl restart php7.4-fpm在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
}
# ...
}
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;
}
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;
}
在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; # 根据实际情况调整
}
}
sudo nginx -t(无错误则继续)。sudo systemctl restart nginx。若应用需要高并发数据库访问,可通过MySQL主从复制实现读写分离:
/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 # 需同步的数据库
sudo systemctl restart mysql。CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPassword';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
File和Position,后续用于从服务器配置):SHOW MASTER STATUS;
/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 # 设置为只读(可选,增强安全性)
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;
若需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;
}
}
curl访问http://example.com,多次刷新页面,观察请求是否分发至不同后端服务器(可通过后端服务器日志确认)。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;),避免将请求发送至不可用服务器。proxy_cache模块),减少后端服务器的压力(适合静态内容)。ip_hash策略或分布式会话存储(如Redis)。通过以上步骤,即可实现Ubuntu LNMP服务器的高效负载均衡,提升系统性能与可靠性。