如何在Linux上实现负载均衡

来源:站长论坛作者:小黄人头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在Linux上实现负载均衡》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上实现负载均衡》有用,将其分享出去将是对创作者最好的鼓励。

在Linux系统中实现负载均衡,核心是通过合理分配客户端请求到多个后端服务实例,避免单节点压力过大,同时提升整体服务的容错能力。目前主流的实现方式分为四层负载均衡和七层负载均衡两类,不同方案的技术特点和适用场景存在明显差异。

如何在Linux上实现负载均衡

常见Linux负载均衡方案对比

不同负载均衡方案的工作层级、性能表现和适用场景各有不同,具体对比如下:

方案名称工作层级核心特点适用场景
Nginx七层(应用层)支持HTTP/HTTPS协议解析,可基于URL、请求头做分发,配置简单Web服务、API接口分发
LVS四层(传输层)基于内核转发,性能极高,支持TCP/UDP协议大流量通用服务转发
HAProxy四层/七层兼顾性能和灵活性,支持丰富的负载均衡算法混合协议服务分发

基于Nginx实现七层负载均衡

Nginx是最常用的七层负载均衡工具,通过反向代理功能将请求转发到后端服务器,以下是基础配置步骤:

1. 安装Nginx

在主流Linux发行版中可以直接通过包管理器安装:

# CentOS/RHEL系统
yum install nginx -y

# Ubuntu/Debian系统
apt install nginx -y

2. 配置负载均衡规则

编辑Nginx配置文件/etc/nginx/nginx.conf,在http块中添加 upstream 定义后端服务器组,再配置转发规则:

http {
    # 定义后端服务器组,名称为backend_servers
    upstream backend_servers {
        # 负载均衡算法,默认是轮询,可选ip_hash、least_conn等
        # ip_hash:同一客户端请求固定转发到同一后端服务器
        # least_conn:转发到当前连接数最少的后端服务器
        least_conn;
        
        # 后端服务器列表,可添加weight参数设置权重
        server 192.168.0.10:8080 weight=2;
        server 192.168.0.11:8080 weight=1;
        server 192.168.0.12:8080 backup; # 备份服务器,主服务器全故障时启用
    }

    server {
        listen 80;
        server_name example.ipipp.com; # 替换为实际域名

        location / {
            # 转发请求到后端服务器组
            proxy_pass http://backend_servers;
            # 传递客户端真实IP到后端
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

3. 验证配置并启动服务

检查配置语法是否正确,然后启动Nginx服务:

# 检查配置语法
nginx -t

# 启动Nginx
systemctl start nginx

# 设置开机自启
systemctl enable nginx

基于LVS实现四层负载均衡

LVS(Linux Virtual Server)是内核级的四层负载均衡工具,性能远高于应用层负载均衡,适合大流量场景,以下以DR模式为例说明配置步骤:

1. 加载LVS内核模块

# 加载IPVS模块
modprobe ip_vs
modprobe ip_vs_rr # 轮询调度模块
modprobe ip_vs_wrr # 加权轮询调度模块

2. 安装ipvsadm管理工具

# CentOS/RHEL系统
yum install ipvsadm -y

# Ubuntu/Debian系统
apt install ipvsadm -y

3. 配置LVS规则

假设负载均衡器VIP为192.168.0.100,后端服务器为192.168.0.10、192.168.0.11,端口为80:

# 添加虚拟服务,协议为TCP,端口80,调度算法为轮询(rr)
ipvsadm -A -t 192.168.0.100:80 -s rr

# 添加后端真实服务器,-g表示DR模式
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.11:80 -g

# 查看配置规则
ipvsadm -Ln

4. 后端服务器配置

DR模式需要后端服务器绑定VIP到回环接口,避免ARP冲突:

# 绑定VIP到lo接口
ifconfig lo:0 192.168.0.100 netmask 255.255.255.255 up

# 配置ARP抑制,避免响应VIP的ARP请求
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

结合keepalived实现高可用负载均衡

单节点的负载均衡器存在单点故障风险,可结合keepalived实现主备高可用,当主节点故障时自动切换到备节点:

1. 安装keepalived

yum install keepalived -y

2. 主节点配置

编辑/etc/keepalived/keepalived.conf

global_defs {
    router_id LVS_MASTER # 路由标识,主备节点需不同
}

vrrp_instance VI_1 {
    state MASTER # 主节点为MASTER,备节点为BACKUP
    interface eth0 # 绑定网卡
    virtual_router_id 51 # 虚拟路由ID,主备需一致
    priority 100 # 优先级,主节点高于备节点
    advert_int 1 # 心跳间隔

    authentication {
        auth_type PASS
        auth_pass 1111 # 认证密码,主备需一致
    }

    virtual_ipaddress {
        192.168.0.100 # 虚拟IP,即VIP
    }
}

# 结合LVS的配置,自动管理IPVS规则
virtual_server 192.168.0.100 80 {
    delay_loop 6
    lb_algo rr # 负载均衡算法
    lb_kind DR # LVS模式
    protocol TCP

    real_server 192.168.0.10 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.0.11 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

3. 备节点配置

备节点配置和主节点基本一致,仅需修改stateBACKUPpriority设置为低于主节点的值(如90),router_id设置为不同值即可。

4. 启动服务

systemctl start keepalived
systemctl enable keepalived

负载均衡算法选择建议

实际场景中需要根据业务特点选择合适的负载均衡算法:

  • 轮询(rr):适合后端服务器配置一致的场景,请求均匀分配
  • 加权轮询(wrr):适合后端服务器配置不一致的场景,性能高的服务器分配更多请求
  • IP哈希(ip_hash):适合需要保持会话的场景,同一客户端请求固定转发到同一后端
  • 最少连接(least_conn):适合请求处理时间差异大的场景,优先转发到当前负载低的服务器

搭建完成后可以通过压测工具模拟大量请求,观察后端服务器的请求分配情况,验证负载均衡是否正常工作。如果业务需要更高的可用性,还可以结合监控系统对负载均衡节点和后端服务进行状态监测,出现故障时自动触发告警和切换。

Linux负载均衡NginxLVSkeepalived修改时间:2026-06-19 17:27:41

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。