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服务器的高效负载均衡,提升系统性能与可靠性。