首页主机资讯LNMP在Ubuntu上的负载均衡怎么做

LNMP在Ubuntu上的负载均衡怎么做

时间2025-12-02 22:16:04发布访客分类主机资讯浏览483
导读:在 Ubuntu 上搭建 LNMP 负载均衡 架构与准备 组件角色划分:使用 Nginx 作为反向代理与负载均衡器,后端多台 Nginx + PHP‑FPM 应用服务器,数据库层建议做 MySQL 主从复制 以分担读压力与提升可用性。 基...

在 Ubuntu 上搭建 LNMP 负载均衡

架构与准备

  • 组件角色划分:使用 Nginx 作为反向代理与负载均衡器,后端多台 Nginx + PHP‑FPM 应用服务器,数据库层建议做 MySQL 主从复制 以分担读压力与提升可用性。
  • 基础准备:至少准备 1 台负载均衡器2 台以上后端应用服务器;统一 PHP 版本Nginx 配置;后端根目录与代码保持一致(建议用 NFS/GlusterFS/对象存储CI/CD 自动同步);开放防火墙端口 80/443;后端 PHP‑FPM 建议使用 Unix Socket 提升性能。

方案一 Nginx 作为负载均衡器

  • 安装与启用
    • 在负载均衡器执行:sudo apt update & & sudo apt install nginx
  • 配置 upstream 与反向代理
    • 新建配置:sudo nano /etc/nginx/conf.d/load_balancer.conf
    • 示例:
      http {
      
        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 nginx
  • 说明
    • 默认策略为 轮询(round‑robin);可按需改为 least_connip_hash 等;max_fails/fail_timeout 配合 proxy_next_upstream 实现故障转移与摘除异常节点。

方案二 使用 HAProxy 或 LVS

  • HAProxy
    • 安装: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 haproxy
  • LVS(内核 IPVS,四层转发)
    • 安装管理工具:sudo apt-get install ipvsadm
    • 添加虚拟服务(示例):sudo ipvsadm -A -t 192.168.0.100:80 -s rr
    • 添加后端:sudo ipvsadm -a -t 192.168.0.100:80 -r 10.0.0.11:80 -g-r 10.0.0.12:80 -g
  • 适用场景
    • HAProxy 更灵活(支持七层与健康检查);LVS 适合高吞吐的四层转发场景。

后端与数据库层配置要点

  • PHP‑FPM(各后端)
    • 安装:sudo apt install php-fpm
    • 建议 Unix Socket:编辑 /etc/php/8.1/fpm/pool.d/www.conf(版本号按实际)
      • listen = /run/php/php8.1-fpm.sock
      • listen.owner = www-data; listen.group = www-data; listen.mode = 0660
    • Nginx 站点中 PHP 处理示例:
      location ~ \.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
  • MySQL 主从复制(可选,提升读能力与可用性)
    • 主库 /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;
          
      
    • 应用连接建议:写主库,读可走从库(或在应用层/中间件做读写分离)。

健康检查与高可用增强

  • 负载均衡器高可用(Keepalived VIP)
    • 在两台负载均衡器上安装: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 设为 BACKUPpriority 略低;启动:sudo systemctl enable --now keepalived
  • 监控与告警
    • 建议接入 Prometheus + Grafana 监控 Nginx/后端/PHP‑FPM/MySQL 指标并设置告警,便于快速定位与自动恢复。

快速验证与常见问题

  • 验证步骤
    • 在负载均衡器执行:curl -I http://your-domain.com 多次,观察返回节点是否轮询变化;后端查看 access.logX‑Forwarded‑ForX‑Real‑IP 是否正确;临时摘除节点(关闭后端或 max_fails 触发)验证自动故障转移。
  • 常见问题
    • 静态资源不一致:确保多台后端 代码与上传目录 一致(使用共享存储或同步机制)。
    • 502/504:检查后端 PHP‑FPM 是否运行、Socket 权限与路径是否一致、超时设置是否合理。
    • 会话保持:有状态应用可使用 ip_hash 或在应用层引入 Redis 集中会话存储。
    • 数据库写入失败:确认应用连接的是 主库,读写分离策略正确。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: LNMP在Ubuntu上的负载均衡怎么做
本文地址: https://pptw.com/jishu/761739.html
LNMP在Ubuntu上的邮件服务如何配置 ubuntu ssh如何进行远程文件传输

游客 回复需填写必要信息