Nginx负载均衡详解

一、负载均衡基本概念

负载均衡(Load Balancing)是指将网络流量或计算任务分配到多个服务器上,以避免单个服务器过载,提高整体系统的可用性和响应速度。

主要作用:

  1. 提高性能:分散请求压力

  2. 增强可靠性:某台服务器故障时自动剔除

  3. 实现扩展性:方便横向扩展服务器数量

  4. 维护便利:可以单独下线服务器进行维护

具体来说,负载均衡主要解决以下问题:

  1. 单点故障风险
    单个服务器承担所有流量时,一旦发生故障(如硬件损坏、软件崩溃),整个系统会直接瘫痪。负载均衡通过将流量分配到多个服务器(形成 “集群”),即使某台服务器故障,其他服务器仍能继续处理请求,避免系统整体不可用。

  2. 服务器资源过载
    单个服务器的 CPU、内存、带宽等资源是有限的,当流量超过其承载能力(如电商促销、突发访问),会导致响应变慢、甚至拒绝服务(“宕机”)。负载均衡会将流量分散到多台服务器,避免某台服务器因资源耗尽而崩溃,确保每台服务器的负载处于合理范围。

  3. 资源利用率不均衡
    多台服务器独立工作时,可能出现 “部分服务器满载、部分服务器空闲” 的情况(如流量集中在某台服务器),导致资源浪费。负载均衡通过算法(如轮询、权重分配)动态调整流量,让所有服务器的负载更均衡,提升整体资源利用率。

  4. 地域或网络延迟问题
    当用户分布在不同地区(如国内和海外),访问单机房服务器可能因跨地域网络链路长而产生高延迟。负载均衡(尤其是 “全局负载均衡”)可根据用户位置,将请求分配到最近的机房或服务器,减少网络延迟,提升用户体验。

  5. 系统扩展性限制
    单服务器的性能提升存在瓶颈(如升级硬件成本高、效果有限),而负载均衡支持 “横向扩展”—— 通过增加服务器数量扩展系统承载能力(无需修改核心架构),轻松应对流量增长(如从 10 台服务器扩展到 100 台)。

二、Nginx负载均衡配置

基本配置结构

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

upstream模块参数

  1. server:定义后端服务器地址

    server 192.168.1.100:8080;
  2. 权重(weight):分配请求的比例

    server 192.168.1.100 weight=3;#这台服务器分到的流量是101服务器三倍
    server 192.168.1.101 weight=1;
  3. max_fails:允许失败次数

    server 192.168.1.100 max_fails=3;
  4. fail_timeout:失败超时时间

    server 192.168.1.100 fail_timeout=30s;
  5. backup:备用服务器

    server 192.168.1.100 backup;
  6. down:标记服务器不可用

    server 192.168.1.100 down;

三、负载均衡算法

1. 轮询(Round Robin, 默认)

upstream backend {
    server 192.168.1.100;
    server 192.168.1.101;
}

2. 加权轮询(Weighted Round Robin)

upstream backend {
    server 192.168.1.100 weight=3;
    server 192.168.1.101 weight=1;
}

3. IP哈希(IP Hash)

upstream backend {
    ip_hash;
    server 192.168.1.100;
    server 192.168.1.101;
}

4. 最少连接(Least Connections)

upstream backend {
    least_conn;
    server 192.168.1.100;
    server 192.168.1.101;
}

四、实战环境准备

1. 服务器架构

现有三台服务器, 两台后端应用服务器(提供相同服务),一台做负载均衡,架构如下:

  • 负载均衡服务器:IP 192.168.1.100,负责接收客户端请求并分发。
  • 后端服务器 1:IP 192.168.1.101,端口 8080(部署后端Jar包服务并启动)。
  • 后端服务器 2:IP 192.168.1.102,端口 8080(与后端 1 提供相同服务,方便测试)。

五、Nginx 负载均衡核心配置

1. 安装 Nginx

在负载均衡器(192.168.1.100)上安装 Nginx(以 CentOS 7 为例):

# 安装 EPEL 源(Nginx 在 EPEL 仓库中)
yum install -y epel-release
# 安装 Nginx
yum install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx

2. 配置负载均衡

步骤 1:编辑 Nginx 配置文件

vim /etc/nginx/conf.d/load_balance.conf  # 新建自定义配置文件,避免修改默认配置

步骤 2:基础配置(轮询策略)

# 定义后端服务器组,名称为 "backend_servers"(可自定义)
upstream backend_servers {
    server 192.168.1.101:8080;  # 后端服务器 1
    server 192.168.1.102:8080;  # 后端服务器 2
}

# 配置前端监听端口(如 80),接收客户端请求
server {
    listen 80;
    server_name localhost;  # 可替换为实际域名

    location / {
        # 将请求转发到定义的后端服务器组
        proxy_pass http://backend_servers;
        # 可选:设置代理请求头,后端可获取客户端真实 IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3. 检查配置并重启 Nginx

nginx -t  # 检查配置是否有误,输出 "successful" 表示正确
systemctl restart nginx  # 重启 Nginx 使配置生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值