ubuntu

LNMP环境下Ubuntu如何进行负载均衡

小樊
47
2025-09-20 21:17:48
栏目: 云计算

LNMP环境下Ubuntu实现负载均衡的完整指南

一、基础环境准备

在Ubuntu上实现LNMP(Linux+Nginx+MySQL+PHP)负载均衡前,需完成以下准备工作:

  1. 安装Nginx:作为负载均衡器,负责请求的分发与转发。
    sudo apt update && sudo apt install nginx -y
    
  2. 部署后端服务器:至少准备2台Ubuntu服务器(或同一服务器的不同实例),均安装LNMP环境(Nginx、MySQL、PHP-FPM),并确保服务正常运行(如Nginx监听80端口、PHP-FPM监听9000端口)。
  3. 网络互通:负载均衡器与后端服务器之间需开放HTTP(80)/HTTPS(443)端口,可通过pingtelnet命令验证连通性。

二、Nginx负载均衡核心配置

Nginx通过upstream模块定义后端服务器组,结合proxy_pass指令实现请求转发。以下是常见配置场景:

1. 基础轮询配置(默认策略)

轮询是Nginx的默认负载均衡算法,按顺序将请求分发到后端服务器,适用于服务器性能相近的场景。

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

    server {
        listen 80;
        server_name example.com;  # 负载均衡器域名

        location / {
            proxy_pass http://backend;  # 转发至backend服务器组
            proxy_set_header Host $host;          # 保留原始主机头
            proxy_set_header X-Real-IP $remote_addr; # 记录客户端真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录代理路径IP
        }
    }
}

说明proxy_set_header指令用于传递客户端真实信息,避免后端应用无法获取正确IP。

2. 加权轮询配置(按性能分配流量)

若后端服务器性能差异较大(如CPU、内存不同),可通过weight参数分配权重,权重越高,处理的请求数越多。

upstream backend {
    server 192.168.1.101:80 weight=3;  # 权重3,处理约50%请求
    server 192.168.1.102:80 weight=1;  # 权重1,处理约25%请求
}

适用场景:高性能服务器承担更多流量,提升整体资源利用率。

3. IP哈希配置(会话保持)

对于需要会话保持的应用(如用户登录状态、购物车数据),ip_hash指令可根据客户端IP地址进行哈希运算,确保同一IP的请求始终分发到同一后端服务器。

upstream backend {
    ip_hash;  # 启用IP哈希
    server 192.168.1.101:80;
    server 192.168.1.102:80;
}

注意:若后端服务器需要扩容或缩容,IP哈希可能导致会话失效,需谨慎使用。

4. 最少连接配置(动态负载)

least_conn指令将请求分发到当前连接数最少的服务器,适用于处理动态内容(如PHP、数据库查询)且服务器负载波动较大的场景。

upstream backend {
    least_conn;  # 启用最少连接
    server 192.168.1.101:80;
    server 192.168.1.102:80;
}

优势:动态调整流量分配,避免某台服务器过载。

三、优化与安全配置

1. 健康检查(自动剔除故障服务器)

Nginx Plus(商业版)支持内置健康检查,开源版可通过max_failsfail_timeout参数模拟健康检查:

upstream backend {
    server 192.168.1.101:80 max_fails=3 fail_timeout=30s;  # 3次失败后,30秒内不再使用
    server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
}

说明max_fails表示允许的最大失败次数,fail_timeout表示失败后的冷却时间。

2. PHP-FPM配置(确保后端处理能力)

若后端应用使用PHP,需确保每台服务器上的PHP-FPM配置合理,以处理并发请求。编辑/etc/php/7.4/fpm/pool.d/www.conf(根据PHP版本调整):

[www]
listen = /var/run/php/php7.4-fpm.sock  # 使用Unix socket(性能更高)
listen.allowed_clients = 127.0.0.1     # 允许Nginx访问
pm = dynamic                           # 动态进程管理
pm.max_children = 50                   # 最大子进程数(根据服务器内存调整)
pm.start_servers = 10                  # 启动时的子进程数
pm.min_spare_servers = 5               # 最小空闲子进程数
pm.max_spare_servers = 20              # 最大空闲子进程数

说明:调整pm.max_children需考虑服务器内存(每个PHP进程约占用10-20MB内存),避免内存耗尽。

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

若应用需要数据库负载均衡,可配置MySQL主从复制(读写分离):

四、测试与验证

  1. 检查Nginx配置语法
    sudo nginx -t
    
    若输出syntax is ok,说明配置正确。
  2. 重启Nginx服务
    sudo systemctl restart nginx
    
  3. 验证负载均衡效果
    • 在后端服务器上运行tail -f /var/log/nginx/access.log,观察请求是否分发到不同服务器。
    • 使用ab(Apache Benchmark)工具模拟并发请求:
      ab -n 100 -c 10 http://example.com/
      
      查看响应时间和请求分发情况。

通过以上步骤,即可在Ubuntu的LNMP环境中实现高效的负载均衡,提升应用的可用性与性能。根据实际需求,可选择不同的负载均衡策略,并结合健康检查、性能调优等手段优化配置。

0
看了该问题的人还看了