温馨提示×

centos lnmp如何进行负载均衡

小樊
33
2025-12-09 19:24:35
栏目: 云计算

架构与思路

  • CentOSLNMP 场景中,最简便且稳定的做法是用 Nginx 作为反向代理与负载均衡器,将请求分发到多台运行 PHP-FPM 的应用服务器;数据库层可配合 MySQL 主从复制 实现读写分离,从而提升整体吞吐与可用性。Nginx 原生支持多种负载均衡策略(如轮询、加权轮询、最少连接、ip_hash),可按业务特性选择。

部署步骤

  • 准备环境
    • 至少准备 1 台 负载均衡器(LB)与 2–N 台 应用服务器(App)。各 App 服务器部署相同的代码与目录结构,并安装并运行 PHP-FPM(可按需调整进程模型与连接数)。LB 上安装 Nginx
  • 配置 Nginx 负载均衡
    • 在 LB 上编辑配置文件(如 /etc/nginx/nginx.conf/etc/nginx/conf.d/loadbalancer.conf),定义 upstream 并在 server 中使用 proxy_pass 转发。示例:
      http {
        upstream backend {
          server 10.0.0.11:80;
          server 10.0.0.12:80;
          server 10.0.0.13:80;
        }
      
        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;
          }
        }
      }
      
    • 检查并重载 Nginx:sudo nginx -t && sudo systemctl reload nginx
  • 应用服务器 PHP-FPM 建议
    • 统一使用 Unix Socket 或一致的 TCP 端口;示例(/etc/php-fpm.d/www.conf):
      [www]
      listen = /var/run/php-fpm/www.sock
      listen.allowed_clients = 127.0.0.1
      pm = dynamic
      pm.max_children = 50
      pm.start_servers = 5
      pm.min_spare_servers = 5
      pm.max_spare_servers = 35
      
    • 在每台 App 服务器的 Nginx 中,将 PHP 请求反向代理到本机 PHP-FPM(或交由 LB 统一转发到后端池,二选一,保持架构清晰)。

负载均衡策略与参数

  • 常用策略
    • 轮询(round-robin):默认策略,按顺序分发。
    • 加权轮询(weight)server 10.0.0.11:80 weight=3;,权重越高分配越多。
    • 最少连接(least_conn):优先发给当前连接数更少的后端。
    • ip_hash:按客户端 IP 做哈希,保证同一来源 IP 落到同一后端(会话保持)。
    • url_hash / fair:按 URL 哈希或响应时间分发,需第三方模块。
  • 健康与并发控制
    • 示例参数:server 10.0.0.11:80 weight=4 max_fails=2 fail_timeout=10s max_conns=1024;
      • max_failsfail_timeout 用于失败探测与摘除;
      • max_conns 限制到单台后端的最大并发连接数。
  • 会话保持建议
    • 有状态会话优先使用 ip_hash;更优方案是使用 Redis 等集中式 Session 存储,避免单点依赖与不均衡。

数据库层扩展

  • 读写分离与高可用
    • 在应用层将写操作指向 主库(Master),读操作分摊到 从库(Slave);MySQL 通过 主从复制 实现数据同步,从库可设置 read_only=1 提升一致性与安全性。
  • 基本主从配置要点
    • 主库:配置 server-id、开启 log_bin,创建复制用户并授权;记录 SHOW MASTER STATUS; 的 File 与 Position。
    • 从库:配置 server-idrelay_log,执行 CHANGE MASTER TO ... 指向主库,启动复制 START SLAVE;
  • 提示
    • 读写分离可由应用或中间件实现;跨机房/跨地域部署时,应结合 GTID、半同步复制与监控告警提升可靠性。

验证与优化

  • 验证
    • 使用 curl -I 或浏览器开发者工具查看响应头与状态码;在后端返回中加入 Server-ID 标识,确认请求在后端间轮询/按策略分发;对失败节点停止服务验证摘除与恢复。
  • 优化与高可用
    • 调整 Nginx 的 worker_processesworker_connections;为 upstream 配置合适的 权重/连接上限/失败策略;静态资源可开启缓存与 CDN;部署 Prometheus + Grafana 监控请求时延、5xx 比例、后端连接数等关键指标;数据库层结合复制延迟与从库负载进行动态路由与限流。

0