首页主机资讯Ubuntu LNMP服务器如何负载均衡

Ubuntu LNMP服务器如何负载均衡

时间2025-10-01 16:46:04发布访客分类主机资讯浏览817
导读:Ubuntu LNMP服务器负载均衡配置指南 负载均衡是LNMP(Linux+Nginx+MySQL+PHP)架构中提升系统性能、可用性的关键环节,主要通过Nginx反向代理实现请求分发,同时需优化PHP-FPM、MySQL等组件以匹配负载...

Ubuntu LNMP服务器负载均衡配置指南
负载均衡是LNMP(Linux+Nginx+MySQL+PHP)架构中提升系统性能、可用性的关键环节,主要通过Nginx反向代理实现请求分发,同时需优化PHP-FPM、MySQL等组件以匹配负载均衡需求。

一、基础环境准备

  1. 安装Nginx:确保所有服务器(负载均衡器+后端服务器)均安装Nginx,命令如下:
    sudo apt update &
        &
     sudo apt install nginx -y
    
  2. 部署LNMP后端节点:每台后端服务器需安装并配置Nginx+PHP-FPM+MySQL(或仅作为应用服务器,共享同一数据库)。
    • PHP-FPM配置示例(/etc/php/7.4/fpm/pool.d/www.conf):
      [www]
      listen = /var/run/php/php7.4-fpm.sock
      pm = dynamic
      pm.max_children = 50  # 根据服务器内存调整
      pm.start_servers = 10
      pm.min_spare_servers = 5
      pm.max_spare_servers = 15
      
    • 重启PHP-FPM:sudo systemctl restart php7.4-fpm

二、Nginx负载均衡核心配置

1. 定义后端服务器组(Upstream)

在Nginx的http块中添加upstream模块,列出所有后端服务器IP或域名:

http {

    upstream backend {
    
        server 192.168.1.101:80;
      # 后端服务器1
        server 192.168.1.102:80;
      # 后端服务器2
        server 192.168.1.103:80;
  # 后端服务器3
    }

    # ...
}

2. 选择负载均衡策略

Nginx支持多种策略,可根据业务需求选择:

  • 轮询(默认):按顺序分发请求,适合服务器性能相近的场景(无需额外配置)。
  • 加权轮询:根据服务器性能分配权重(weight),权重越高,请求越多:
    upstream backend {
        
        server 192.168.1.101 weight=3;
          # 承担3/5流量
        server 192.168.1.102 weight=2;
          # 承担2/5流量
        server 192.168.1.103 weight=1;
    
    }
    
    
  • IP哈希:通过客户端IP哈希分配请求,保证同一IP的请求始终到达同一服务器(适合需要会话保持的场景,如购物车):
    upstream backend {
        
        ip_hash;
        
        server 192.168.1.101;
        
        server 192.168.1.102;
    
    }
    
    
  • 最少连接:将请求分发给当前连接数最少的服务器,适合长连接或动态内容(如视频流):
    upstream backend {
        
        least_conn;
        
        server 192.168.1.101;
        
        server 192.168.1.102;
    
    }
    
    

3. 配置反向代理

server块中添加location指令,将请求转发至backend服务器组,并传递必要头部信息(如客户端真实IP):

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;

    }


    # 处理PHP请求(可选,若后端服务器直接处理PHP)
    location ~ \.php$ {
    
        include snippets/fastcgi-php.conf;
    
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  # 根据实际情况调整
    }

}
    

4. 测试与重启Nginx

  • 检查配置语法:sudo nginx -t(无错误则继续)。
  • 重启Nginx:sudo systemctl restart nginx

三、数据库负载均衡(可选,提升数据库性能)

若应用需要高并发数据库访问,可通过MySQL主从复制实现读写分离:

1. 主服务器配置(Master)

  • 编辑/etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = your_database_name  # 需同步的数据库
    
  • 重启MySQL:sudo systemctl restart mysql
  • 创建复制用户并授权:
    CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPassword';
        
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
        
    FLUSH PRIVILEGES;
        
    
  • 查看二进制日志位置(记录FilePosition,后续用于从服务器配置):
    SHOW MASTER STATUS;
        
    

2. 从服务器配置(Slave)

  • 编辑/etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = your_database_name
    read_only = 1  # 设置为只读(可选,增强安全性)
    
  • 重启MySQL:sudo systemctl restart mysql
  • 导入主服务器数据:
    mysqldump -u root -p --all-databases >
         full-backup.sql
    scp full-backup.sql user@slave_ip:/tmp/
    mysql -u root -p <
         /tmp/full-backup.sql
    
  • 配置复制:
    CHANGE MASTER TO
        MASTER_HOST='master_ip',
        MASTER_USER='replicator',
        MASTER_PASSWORD='StrongPassword',
        MASTER_LOG_FILE='mysql-bin.000001',  # 替换为主服务器的File值
        MASTER_LOG_POS=154;
                          # 替换为主服务器的Position值
    START SLAVE;
        
    
  • 检查复制状态(Slave_IO_RunningSlave_SQL_Running应为Yes):
    SHOW SLAVE STATUS\G;
    
    

3. Nginx配置数据库负载均衡(可选)

若需Nginx直接转发数据库请求(如API调用),可使用ngx_stream_module模块(需编译Nginx时开启),配置示例如下:

stream {

    upstream mysql_backend {
    
        server master_ip:3306;
    
        server slave_ip:3306;

    }

    server {
    
        listen 3306;
    
        proxy_pass mysql_backend;

    }

}
    

四、验证负载均衡效果

  1. 访问Nginx服务器:通过浏览器或curl访问http://example.com,多次刷新页面,观察请求是否分发至不同后端服务器(可通过后端服务器日志确认)。
  2. 检查PHP-FPM状态:访问http://example.com/info.php(需创建info.php文件),查看Server API是否为FPM/FastCGI,确认PHP请求被正确处理。
  3. 监控数据库复制:在从服务器执行SHOW SLAVE STATUS\G,确保Seconds_Behind_Master0(实时同步)。

五、高级优化建议

  • 健康检查:通过max_failsfail_timeout参数排除故障服务器(如server 192.168.1.101 max_fails=3 fail_timeout=30s; ),避免将请求发送至不可用服务器。
  • SSL终端:在Nginx负载均衡器上配置SSL证书,减轻后端服务器的加密计算负担(如Let’s Encrypt免费证书)。
  • 缓存优化:启用Nginx缓存(proxy_cache模块),减少后端服务器的压力(适合静态内容)。
  • 会话保持:若应用需要会话一致性(如用户登录状态),可使用ip_hash策略或分布式会话存储(如Redis)。

通过以上步骤,即可实现Ubuntu LNMP服务器的高效负载均衡,提升系统性能与可靠性。

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


若转载请注明出处: Ubuntu LNMP服务器如何负载均衡
本文地址: https://pptw.com/jishu/715970.html
Debian清理对硬件兼容性有何要求 如何定制个性化的Debian清理方案

游客 回复需填写必要信息