LNMP架构的负载均衡实践指南
一 架构与总体思路
二 方案一 应用层负载均衡 Nginx + PHP‑FPM(通用且易维护)
http {
upstream backend {
server 10.0.0.11:80 weight=3 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.13:80 max_fails=3 fail_timeout=30s;
least_conn; # 可选:按最少连接分发
}
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;
}
# 可选:若负载均衡器也处理静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
[www]
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
三 方案二 数据库层负载均衡与读写分离
四 方案三 传输层负载均衡 TCP 转发 MySQL(可选)
stream {
upstream mysql_backend {
server 10.0.0.21:3306 weight=3;
server 10.0.0.22:3306 weight=1;
}
server {
listen 3306;
proxy_pass mysql_backend;
proxy_timeout 1s;
proxy_responses 1;
}
}
五 高可用、验证与优化
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 }
}