温馨提示×

centos lnmp怎样负载均衡

小樊
37
2026-01-10 21:59:29
栏目: 云计算

CentOS 上 LNMP 负载均衡实操指南

一 架构与准备

  • 角色划分
    • 负载均衡器:部署 Nginx,对外提供 80/443,反向代理到后端 Nginx+PHP-FPM 节点。
    • Web 节点:多台部署 Nginx+PHP-FPM,保持应用与文件一致(建议用 NFS/对象存储/代码仓库 统一发布)。
    • 数据库MySQL 主从复制实现读写分离;会话保持建议用 Redis 共享 Session(避免单点依赖 IP Hash)。
  • 基础环境
    • 系统建议 CentOS 7/8,安装 EPEL 后安装 Nginx、PHP-FPM、MariaDB/MySQL
    • 防火墙放行 80/443;后端节点间开放 9000(TCP,FastCGI)/var/run/php-fpm.sock(UDS) 访问(按实际 PHP-FPM 监听方式配置)。

二 方案一 Nginx 反向代理负载均衡(最常用)

  • 安装与启用
    • 在负载均衡器执行:sudo yum install -y epel-release && sudo yum install -y nginx && sudo systemctl enable --now nginx
  • 核心配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf)
    • 负载均衡器 Nginx 配置
      http {
        upstream backend {
          least_conn;                         # 最少连接
          server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
          server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
          server 10.0.0.13:80 max_fails=3 fail_timeout=30s backup;  # 备用
        }
      
        server {
          listen 80;
          server_name www.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;
      
            # 连接复用与缓冲优化
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_buffering on;
            proxy_buffer_size 16k;
            proxy_buffers 16 16k;
          }
        }
      }
      
    • Web 节点 Nginx 配置(/etc/nginx/conf.d/site.conf)
      server {
        listen 80;
        server_name www.example.com;
        root /usr/share/nginx/html;
        index index.php index.html;
      
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
      
        location ~ \.php$ {
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          # 方式A:TCP
          fastcgi_pass 127.0.0.1:9000;
          # 方式B:UDS(需取消 listen.allowed_clients 限制)
          # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        }
      
        location ~ /\.ht { deny all; }
      }
      
    • Web 节点 PHP-FPM 关键项(/etc/php-fpm.d/www.conf)
      [www]
      listen = 127.0.0.1:9000
      ; 若用 UDS:listen = /var/run/php-fpm/php-fpm.sock
      ; listen.allowed_clients = 127.0.0.1   ; 使用 UDS 时按需调整
      pm = dynamic
      pm.max_children = 50
      pm.start_servers = 5
      pm.min_spare_servers = 5
      pm.max_spare_servers = 35
      
  • 生效与验证
    • 语法检查:sudo nginx -t
    • 热加载:sudo systemctl reload nginx
    • 验证:多次 curl http://www.example.com 观察返回与 upstream 响应时间分布;必要时在日志中记录 $upstream_response_time 做对比。

三 方案二 LVS 四层负载均衡(更高并发场景)

  • 适用场景:需要承载 10万级并发连接、更靠近传输层的分发。
  • 简要步骤(DR 模式示例)
    • 负载均衡器(Director)
      yum -y install ipvsadm
      ipvsadm -C
      ipvsadm -A -t 192.168.232.100:80 -s rr
      ipvsadm -a -t 192.168.232.100:80 -r 192.168.232.135:80 -g
      ipvsadm -a -t 192.168.232.100:80 -r 192.168.232.136:80 -g
      
    • 真实服务器(RS,两台 Web)
      ifconfig lo:0 192.168.232.100 broadcast 192.168.232.100 netmask 255.255.255.255 up
      route add -host 192.168.232.100 dev lo:0
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      sysctl -p
      
  • 说明:LVS 负责四层转发,Web 节点仍用 Nginx+PHP-FPM 处理应用;适合与 Nginx 七层策略组合使用(如边缘 LVS + 内网 Nginx 反向代理/缓存)。

四 数据库与会话保持

  • MySQL 读写分离
    • 架构:主库写、从库读;应用按读写类型选择对应 DSN
    • 主从关键配置示例
      • 主库:server-id=1;log_bin=/var/log/mysql/mysql-bin.log
      • 从库:server-id=2;relay_log=/var/log/mysql/mysql-relay-bin.log;read_only=1
  • Session 共享(推荐)
    • 部署 Redis 作为 Session 存储,Web 节点安装 phpredis 并在 php.ini 或 PHP-FPM pool 中配置:
      session.save_handler = redis
      session.save_path = "tcp://192.168.2.5:6379"
      
    • 优点:跨节点会话一致、可水平扩展;替代方案为数据库或 Memcached,但 Redis 性能与生态更佳。

五 健康检查与性能优化

  • 被动健康检查与故障转移
    • 在 upstream 中使用 max_fails=3 fail_timeout=30s,自动剔除异常节点,超时后自动恢复探测。
  • 负载均衡算法选择
    • 轮询(默认)、加权轮询(性能差异场景)、最少连接(长连接/慢请求)、IP Hash(会话保持,节点变更会重映射)。
  • 连接与缓冲优化
    • 开启 proxy_http_version 1.1Connection “”;启用 proxy_buffering;设置 proxy_buffer_size / proxy_buffers;在 upstream 中配置 keepalive(如 keepalive 32)复用后端连接。
  • 监控与验证
    • 记录并分析 $upstream_response_time;结合 Prometheus + Grafana 监控 QPS、5xx、连接数、后端响应时间等指标,按指标调优权重、连接与缓冲参数。

0