在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. 备节点配置
备节点配置和主节点基本一致,仅需修改state为BACKUP,priority设置为低于主节点的值(如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