首页主机资讯Ubuntu LNMP如何进行负载均衡

Ubuntu LNMP如何进行负载均衡

时间2025-10-31 11:53:04发布访客分类主机资讯浏览1479
导读:Ubuntu LNMP实现负载均衡的完整步骤 一、基础环境准备 在开始配置前,需确保所有服务器(负载均衡器+后端服务器)均满足以下条件: 系统为Ubuntu(推荐22.04及以上版本); 已安装Nginx、PHP-FPM、MySQL(或M...

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_RunningSlave_SQL_Running应为Yes):

SHOW SLAVE STATUS\G;
    

五、测试负载均衡

通过浏览器或命令行工具(如curl)访问负载均衡器的IP或域名,观察请求是否被分发至不同后端服务器:

curl http://yourdomain.com

若后端服务器配置了不同的页面内容(如index.php中输出服务器IP),可通过多次请求确认请求被分发至不同服务器。

六、高级优化(可选)

  • 健康检查:通过Nginx的max_failsfail_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
LNMP在Ubuntu上的版本选择 Ubuntu SSH如何更新密钥

游客 回复需填写必要信息