在 Ubuntu 上搭建 LNMP 负载均衡
架构与准备
方案一 Nginx 作为负载均衡器
sudo apt update && sudo apt install nginxsudo nano /etc/nginx/conf.d/load_balancer.confhttp {
upstream backend {
server 10.0.0.11:80 weight=1 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 weight=1 max_fails=3 fail_timeout=30s;
# 可按需添加:least_conn; 或 ip_hash;
}
server {
listen 80;
server_name your-domain.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;
proxy_next_upstream error timeout http_502 http_503 http_504;
}
}
}
sudo nginx -t && sudo systemctl reload nginxmax_fails/fail_timeout 配合 proxy_next_upstream 实现故障转移与摘除异常节点。方案二 使用 HAProxy 或 LVS
sudo apt-get install haproxy/etc/haproxy/haproxy.cfg(示例片段):frontend http-in
bind *:80
default_backend lnmp_backends
backend lnmp_backends
balance roundrobin
server web1 10.0.0.11:80 check
server web2 10.0.0.12:80 check
sudo systemctl enable --now haproxysudo apt-get install ipvsadmsudo ipvsadm -A -t 192.168.0.100:80 -s rrsudo ipvsadm -a -t 192.168.0.100:80 -r 10.0.0.11:80 -g 与 -r 10.0.0.12:80 -g后端与数据库层配置要点
sudo apt install php-fpm/etc/php/8.1/fpm/pool.d/www.conf(版本号按实际)
listen = /run/php/php8.1-fpm.socklisten.owner = www-data; listen.group = www-data; listen.mode = 0660location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
sudo systemctl reload php8.1-fpm && sudo systemctl reload nginx/etc/mysql/mysql.conf.d/mysqld.cnf:[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPass!';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 记录 File 与 Position
-- 导出数据:mysqldump -u root -p --all-databases > full.sql
UNLOCK TABLES;
[mysqld]
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
read_only=1
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='StrongPass!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
START SLAVE;
健康检查与高可用增强
sudo apt update && sudo apt install keepalived/etc/keepalived/keepalived.conf: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 }
}
state 设为 BACKUP、priority 略低;启动:sudo systemctl enable --now keepalived快速验证与常见问题
curl -I http://your-domain.com 多次,观察返回节点是否轮询变化;后端查看 access.log 的 X‑Forwarded‑For 与 X‑Real‑IP 是否正确;临时摘除节点(关闭后端或 max_fails 触发)验证自动故障转移。