温馨提示×

LNMP服务器负载均衡配置

小樊
44
2025-12-06 03:51:33
栏目: 云计算

架构与组件

  • 前端使用 Nginx 作为反向代理与负载均衡器,将请求分发到多台后端 Nginx + PHP-FPM 应用服务器。
  • 后端应用服务器建议保持一致的 代码与配置,并通过 内网通信 降低延迟与暴露面。
  • 数据库层使用 MySQL 主从复制 实现读写分离,写主库、读从库,提升并发与可用性。
  • 为消除单点,负载均衡器可部署 Keepalived VIP 实现高可用。

Nginx 负载均衡配置

  • 定义上游与策略:在 http 块中声明 upstream,选择轮询、加权、最少连接或 IP 哈希等策略;为提升性能可开启与后端的连接复用(keepalive)。
  • 反向代理与请求头:在 server/location 中使用 proxy_pass 转发,并设置 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto 以正确传递客户端信息。
  • 示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf):
http {
  upstream backend {
    least_conn;                 # 最少连接
    server 10.0.1.11:80 weight=3 max_fails=2 fail_timeout=10s;
    server 10.0.1.12:80 weight=2 max_fails=2 fail_timeout=10s;
    server 10.0.1.13:80 backup;  # 备用节点
    keepalive 32;                # 与后端的长连接数
  }

  server {
    listen 80;
    server_name www.example.com;

    location / {
      proxy_pass http://backend;
      proxy_http_version 1.1;
      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_buffering on;
      proxy_buffers 16 4k;
      proxy_buffer_size 2k;
      proxy_connect_timeout 5s;
      proxy_send_timeout 15s;
      proxy_read_timeout 15s;
    }

    # 健康检查页面(可选)
    location /health {
      access_log off;
      return 200 "OK";
      add_header Content-Type text/plain;
    }
  }
}
  • 说明:Nginx 原生支持 轮询、加权轮询、IP 哈希、最少连接;第三方模块如 fair、url_hash 需额外编译;健康检查可用被动方式(max_fails/fail_timeout)或商业版/特定模块启用主动健康检查。

后端 PHP-FPM 与静态资源

  • 应用服务器建议以 FastCGI 方式与 PHP-FPM 通信(Unix 套接字优先,性能更好):
# /etc/nginx/conf.d/app.conf
server {
  listen 80;
  server_name app1.example.com;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # 路径按系统与版本调整
    fastcgi_read_timeout 60s;
  }

  location ~ /\.ht {
    deny all;
  }
}
  • PHP-FPM 进程池示例(/etc/php/8.1/fpm/pool.d/www.conf 片段):
[www]
listen = /var/run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
  • 静态资源建议由 Nginx 直接服务,不走 PHP-FPM,降低后端压力。

数据库与高可用

  • MySQL 读写分离:主库开启 log_bin,从库配置 server-id、relay_log、read_only=1 等,应用按读写分别连接主/从库;可使用中间件或应用内路由实现。
  • 负载均衡器高可用:两台 Nginx 前部署 Keepalived,配置 VIP(如 192.168.1.100)VRRP,主机故障自动切换;示例(/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; }
}
  • 监控与告警:对 Nginx、PHP-FPM、MySQL 的关键指标(连接数、QPS、5xx、慢查询、复制延迟)进行采集与可视化(如 Prometheus + Grafana),并设置阈值告警。

部署与验证步骤

  • 部署顺序:准备后端应用与数据库 → 配置并验证 PHP-FPM → 配置 Nginx 负载均衡器 → 配置 Keepalived VIP(可选)→ 配置 MySQL 主从(可选)→ 上线与灰度。
  • 验证要点:
    • 健康检查与故障剔除:访问 /health 与后端直连地址,停一台后端观察是否自动摘除与恢复。
    • 会话保持:有状态会话时使用 ip_hash 或外置 Redis Session,避免会话丢失。
    • 性能与并发:逐步增加并发,观察 502/504、响应时延、CPU/内存/连接数,按需调整 worker_processes、worker_connections、keepalive、pm.max_children 等参数。

0