利用 LVS 构建集群实现负载均衡

LVS 是构建高性能、高可靠负载均衡集群的利器,其内核态转发机制和丰富的调度算法,使其成为大规模集群场景的首选方案。在实际应用中,需根据业务场景选择合适的工作模式(DR 模式为最优选择),并结合 Keepalived 实现高可用,最终解决单服务器的性能瓶颈问题。
Ⅰ. 集群(Cluster)基础
0x00 集群的概念
集群(Cluster),是一组相互独立且相互依赖、通过高速网络互联的计算机组成的计算机组,以单一模式加以管理,为用户提供统一服务。
- 从用户视角:感知不到背后的多台服务器,仅认为是一个单一服务节点。
- 从集群内部视角:每一台独立的计算机称为集群节点。
通过集群技术,能够以较低的硬件成本,换取性能、可靠性、灵活性 三方面的显著提升。而任务调度是整个集群系统的核心技术,负载均衡的本质就是一种任务调度策略。
0x01 集群的三大核心特性
你文中提到的"客观理性"属于笔误,集群的三大核心特性应为:
-
可伸缩性(Scalability)
当业务负载增长时,可通过横向添加节点 的方式扩展集群整体性能,无需替换高性能硬件,成本可控。
例如:单台服务器支持 1 万并发,扩展为 3 节点集群后,理论可支撑 3 万并发。
-
可靠性(Reliability)
集群中的节点互为备份,当某一节点故障时,其他节点可自动接管其任务,避免单点故障导致服务中断。
可靠性的核心指标是可用性(Availability),通常用"几个 9"衡量(如 99.99% 可用性代表全年停机时间不超过 52.56 分钟)。
-
可管理性(Manageability)
集群可通过统一的管理接口进行配置、监控、维护,管理员无需逐个操作节点,降低运维复杂度。
0x02 单服务器的性能瓶颈验证
场景假设:
- 单台服务器最大支撑 10000 个并发请求,此时所有请求返回状态码
200(正常响应)。 - 当并发量提升至 20000 时,返回状态码变为
200、304、301、500、504。
现象分析:
200:少量请求仍正常处理;304:资源未修改,减少数据传输,但侧面反映服务器资源紧张;301:可能是服务器重定向策略触发,规避过载节点;500:服务器内部错误,代码或资源处理异常;504:网关超时,服务器无法在规定时间内响应请求。
结论 :该 Web 服务的单节点性能已达瓶颈,必须通过集群 + 负载均衡的方式扩展处理能力。
Ⅱ. LVS 核心技术解析
0x00 LVS 是什么
LVS(Linux Virtual Server)即Linux 虚拟服务器 ,是由章文嵩博士主导开发的开源负载均衡项目,工作在 OSI 七层模型的第 4 层(传输层),基于 IP 和端口实现负载均衡转发。
LVS 的核心优势:
- 高性能:基于 Linux 内核态实现,转发效率远超 Nginx 等用户态软件,可支撑每秒百万级并发。
- 高可靠:支持健康检查、故障自动切换,可部署为双主或主备模式。
- 开源免费:基于 Linux 内核,无需额外付费,运维成本低。
0x01 LVS 的核心组件
一个完整的 LVS 集群包含 3 类角色:
| 角色 | 英文名称 | 作用 |
|---|---|---|
| 负载均衡器 | Director Server | 接收用户请求,根据调度算法转发至后端真实服务器 |
| 真实服务器 | Real Server | 处理具体业务请求(如 Web、数据库服务) |
| 共享存储 | Shared Storage | 为所有 Real Server 提供统一的文件存储(如 NFS、GlusterFS),保证数据一致性 |
0x02 LVS 的三种工作模式
LVS 支持三种转发模式,不同模式的网络拓扑和适用场景不同:
-
NAT 模式(网络地址转换)
- 原理:Director Server 作为网关,将用户请求的目标 IP 转换为 Real Server 的私有 IP;Real Server 处理完请求后,将响应通过 Director Server 转发给用户(源 IP 转换为 Director 的公网 IP)。
- 特点:Real Server 只需配置私有 IP,网关指向 Director Server;但 Director 是单点瓶颈,支持的节点数量有限(约 10-20 台)。
- 适用场景:小规模集群、Real Server 无公网 IP 的场景。
-
DR 模式(直接路由)
- 原理:Director Server 仅转发请求报文的目标 MAC 地址,不修改 IP 地址;Real Server 处理完请求后,直接将响应报文发送给用户(无需经过 Director)。
- 特点:性能最高,Director 仅负责转发,不处理响应;Real Server 需与 Director 在同一物理网段,且需配置 VIP(虚拟 IP)。
- 适用场景:中大规模集群、对性能要求高的场景(如电商秒杀)。
-
TUN 模式(IP 隧道)
- 原理:Director Server 将用户请求封装在 IP 隧道中,转发至 Real Server;Real Server 解封装后处理请求,直接响应给用户。
- 特点:Real Server 可跨网段部署,灵活性高;但需要服务器支持 IP 隧道协议(如 IPIP)。
- 适用场景:跨地域、跨网段的分布式集群。
0x03 LVS 的调度算法
调度算法是 LVS 的核心,决定了请求如何分配到后端 Real Server,分为静态算法 和动态算法两类:
-
静态算法(仅考虑配置,不考虑节点负载)
- 轮询(RR):请求按顺序依次分配给每个 Real Server,适用于节点性能相近的场景。
- 加权轮询(WRR):根据节点性能分配权重,权重越高的节点接收的请求越多(如性能高的节点权重设为 3,低的设为 1)。
- 源地址哈希(SH):根据用户 IP 进行哈希计算,将同一 IP 的请求分配到同一节点,可保持会话粘性。
-
动态算法(根据节点实时负载调整分配策略)
- 最小连接数(LC):优先将请求分配给当前连接数最少的节点,适用于长连接业务(如数据库连接)。
- 加权最小连接数(WLC):在最小连接数基础上,结合节点权重,兼顾性能与负载。
- 最短预期延迟(SED) :根据公式
(活跃连接数 + 1) / 权重计算优先级,值越小的节点优先级越高。
Ⅲ. 利用 LVS 构建负载均衡集群的实操步骤
0x00 环境准备
| 角色 | 主机名 | IP 地址 | 系统 | 需安装软件 |
|---|---|---|---|---|
| Director Server | lvs-director | 公网 IP:103.xx.xx.xx 内网 IP:192.168.1.100 | CentOS 7/8 | ipvsadm、keepalived(可选) |
| Real Server 1 | lvs-rs-1 | 192.168.1.101 | CentOS 7/8 | httpd、nginx |
| Real Server 2 | lvs-rs-2 | 192.168.1.102 | CentOS 7/8 | httpd、nginx |
0x01 配置 Director Server
-
安装 ipvsadm 工具
ipvsadm 是 LVS 的管理工具,用于配置集群规则、查看节点状态。
bashyum install -y ipvsadm -
开启 IP 转发(NAT 模式必备)
bashecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p -
创建 LVS 集群规则(以 DR 模式为例)
bash# 清除原有规则 ipvsadm -C # 添加 VIP(虚拟 IP) ipvsadm -A -t 192.168.1.100:80 -s rr # 添加后端 Real Server ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g # 保存规则 ipvsadm -S > /etc/sysconfig/ipvsadm命令参数说明:
-A:添加虚拟服务;-t:指定 TCP 协议和 VIP:端口;-s:指定调度算法(rr 为轮询);-a:添加后端真实服务器;-r:指定 Real Server 的 IP:端口;-g:指定 DR 模式。
0x02 配置 Real Server
-
安装 Web 服务
bashyum install -y nginx systemctl start nginx && systemctl enable nginx -
配置 VIP 回环地址(DR 模式必备)
为了让 Real Server 能够接收 VIP 转发的请求,需要在回环网卡配置 VIP:
bash# 临时配置 ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up # 永久配置(写入 /etc/rc.local) echo "ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up" >> /etc/rc.local chmod +x /etc/rc.d/rc.local -
关闭 ARP 响应(避免 VIP 冲突)
bashecho "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf sysctl -p
0x03 验证集群效果
-
在 Director Server 查看集群状态
bashipvsadm -ln正常输出会显示 VIP:80 下挂载的两个 Real Server,以及当前连接数。
-
用户端访问测试
在浏览器或客户端多次访问
http://192.168.1.100,观察请求是否会轮询转发到两台 Real Server。可通过修改 Real Server 的 Nginx 默认页面内容,来直观验证负载均衡效果。
Ⅳ. 高可用优化:LVS + Keepalived
单台 Director Server 仍存在单点故障风险,可通过 Keepalived 实现双 Director 主备模式,提升集群高可用性。
- 工作原理:Keepalived 基于 VRRP(虚拟路由冗余协议),主 Director 持有 VIP,备 Director 监听主节点状态;当主节点故障时,备节点自动接管 VIP,实现无缝切换。
- 核心配置:在两台 Director Server 上安装 Keepalived,配置主备角色、VIP、健康检查脚本等。
Ⅴ. 常见问题与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 访问 VIP 无响应 | 1. 防火墙未开放 80 端口 2. Real Server 未配置 VIP 回环地址 | 1. 关闭防火墙或开放端口:firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload 2. 检查 lo:0 网卡配置 |
| 负载均衡不均 | 1. 调度算法选择不当 2. 节点权重配置不合理 | 1. 长连接业务改用 LC 算法 2. 根据节点性能调整权重 |
| 节点故障未切换 | 1. 未配置健康检查 2. Keepalived 检测间隔过长 | 1. 在 ipvsadm 中配置健康检查脚本 2. 调整 Keepalived 的 interval 参数 |