Ubuntu LNMP如何进行负载均衡
Ubuntu LNMP实现负载均衡的完整步骤
一、基础环境准备
在开始配置前,需确保所有服务器(负载均衡器+后端服务器)均满足以下条件:
- 系统为Ubuntu(推荐22.04及以上版本);
- 已安装Nginx、PHP-FPM、MySQL(或MariaDB);
- 所有服务器之间网络互通,防火墙开放必要端口(如80、443、3306)。
二、配置Nginx作为负载均衡器
Nginx是LNMP架构中最常用的负载均衡器,通过upstream模块定义后端服务器组,并将请求分发至各服务器。
1. 安装Nginx(若未安装)
sudo apt update
sudo apt install nginx
2. 编辑Nginx负载均衡配置
打开Nginx配置文件(通常为/etc/nginx/sites-available/default或/etc/nginx/nginx.conf),在http块中添加upstream模块,定义后端服务器组:
http {
    # 定义后端服务器组(示例为3台服务器)
    upstream backend {
    
        server 192.168.1.101:80;
      # 后端服务器1
        server 192.168.1.102:80;
      # 后端服务器2
        server 192.168.1.103:80;
  # 后端服务器3
    }
    # 配置负载均衡服务器
    server {
    
        listen 80;
    
        server_name yourdomain.com;
  # 替换为你的域名或IP
        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;
        }
    }
}
3. 选择负载均衡算法(可选)
Nginx支持多种负载均衡算法,默认为轮询(Round Robin)(按顺序分发请求)。可根据业务需求调整:
- 加权轮询(Weighted Round Robin):为服务器分配权重(weight参数),权重越高,接收的请求越多(适合服务器性能不均衡的场景)。upstream backend { server 192.168.1.101 weight=3; # 权重3,接收3/5的请求 server 192.168.1.102 weight=2; # 权重2,接收2/5的请求 server 192.168.1.103 weight=1; # 权重1,接收1/5的请求 }
- IP哈希(IP Hash):根据客户端IP地址哈希,确保同一IP的请求始终发送至同一服务器(适合需要会话保持的场景,如电商购物车)。upstream backend { ip_hash; # 启用IP哈希 server 192.168.1.101; server 192.168.1.102; server 192.168.1.103; }
- 最少连接(Least Connections):将请求发送至当前连接数最少的服务器(适合长连接场景,如视频直播)。upstream backend { least_conn; # 启用最少连接 server 192.168.1.101; server 192.168.1.102; server 192.168.1.103; }
4. 测试并重启Nginx
保存配置文件后,测试语法是否正确:
sudo nginx -t
若输出syntax is ok,则重启Nginx使配置生效:
sudo systemctl restart nginx
三、配置后端服务器(PHP-FPM)
若后端服务器运行PHP应用(如WordPress、Laravel),需确保PHP-FPM已正确配置,能接收Nginx转发的请求。
1. 安装PHP-FPM
sudo apt install php-fpm php-mysql
2. 编辑PHP-FPM配置
打开PHP-FPM池配置文件(通常为/etc/php/8.1/fpm/pool.d/www.conf,版本号根据实际安装调整):
[www]
listen = /run/php/php8.1-fpm.sock  # 监听Unix套接字(推荐)或端口(如127.0.0.1:9000)
listen.owner = www-data
listen.group = www-data
pm = dynamic  # 动态调整进程数
pm.max_children = 10  # 最大子进程数(根据服务器内存调整)
pm.start_servers = 2  # 启动时的子进程数
pm.min_spare_servers = 1  # 最小空闲子进程数
pm.max_spare_servers = 3  # 最大空闲子进程数
3. 重启PHP-FPM
sudo systemctl restart php8.1-fpm
四、配置MySQL主从复制(可选,数据库层面负载均衡)
若应用需要处理大量数据库请求,可通过MySQL主从复制实现读写分离,减轻主库压力。
1. 主服务器配置
编辑主服务器MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
server-id = 1  # 主库ID(唯一)
log_bin = /var/log/mysql/mysql-bin.log  # 开启二进制日志
binlog_do_db = your_database  # 需要同步的数据库名
重启MySQL:
sudo systemctl restart mysql
创建复制用户并授权:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
    
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    
FLUSH PRIVILEGES;
    
查看主库二进制日志位置(用于从库配置):
SHOW MASTER STATUS;
    
记录File(如mysql-bin.000001)和Position(如154)的值。
2. 从服务器配置
编辑从服务器MySQL配置文件:
[mysqld]
server-id = 2  # 从库ID(唯一,不能与主库重复)
relay_log = /var/log/mysql/mysql-relay-bin.log  # 开启中继日志
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database
read_only = 1  # 设置为只读(防止误操作)
重启MySQL:
sudo systemctl restart mysql
配置从库连接主库:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='replicator',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',  # 主库记录的File值
MASTER_LOG_POS=154;
      # 主库记录的Position值
START SLAVE;
      # 启动复制
检查复制状态(Slave_IO_Running和Slave_SQL_Running应为Yes):
SHOW SLAVE STATUS\G;
    
五、测试负载均衡
通过浏览器或命令行工具(如curl)访问负载均衡器的IP或域名,观察请求是否被分发至不同后端服务器:
curl http://yourdomain.com
若后端服务器配置了不同的页面内容(如index.php中输出服务器IP),可通过多次请求确认请求被分发至不同服务器。
六、高级优化(可选)
- 健康检查:通过Nginx的max_fails和fail_timeout参数排除故障服务器(如server 192.168.1.101 max_fails=3 fail_timeout=30s;,表示30秒内连续失败3次则暂时剔除)。
- 会话保持:若应用需要保持会话(如登录状态),可使用ip_hash算法或通过Redis实现分布式会话。
- 监控:使用Prometheus+Grafana监控Nginx、PHP-FPM、MySQL的性能指标(如QPS、连接数、响应时间),及时发现瓶颈。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP如何进行负载均衡
本文地址: https://pptw.com/jishu/739780.html
