温馨提示×

Ubuntu LNMP服务器如何负载均衡

小樊
46
2025-09-25 01:21:23
栏目: 云计算

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服务器的高效负载均衡,提升系统性能与可靠性。

0