摘要
在互联网应用高并发、高可用的核心需求下,单台服务器的性能瓶颈早已成为业务发展的致命短板。LVS(Linux Virtual Server)作为 Linux 内核原生的负载均衡解决方案,凭借其高性能、高稳定性、低资源消耗的特性,成为企业级集群架构的核心组件。本文将从 LVS 的基础原理、核心架构、调度算法,到 OpenEuler 系统下的实战部署、NFS 共享存储配置、LVS-NAT 模式完整案例,全方位拆解 LVS 负载均衡集群的技术细节,帮助读者从零搭建一套高可用的企业级负载均衡系统,同时深入理解负载均衡分层架构、工作模式的核心差异,解决实际运维中的常见问题。
一、LVS 负载均衡集群基础认知
1.1 集群技术概述
在互联网应用的演进中,随着用户量、访问量的爆发式增长,单台服务器的硬件性能(CPU、内存、磁盘 I/O、网络带宽)存在天然上限,无法满足高并发场景下的业务需求。同时,单台服务器一旦出现故障,会直接导致业务中断,可用性无法保障。
集群技术(Cluster)正是为解决这一问题而生:集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个统一的计算资源池,对外表现为一个单一的系统实体。用户访问集群时,感知到的是一个统一的服务入口,而无需感知集群内部的多台服务器。
集群技术的核心价值体现在三个维度:
- 高性能(High Performance):通过多台服务器并行处理请求,将单台服务器的性能瓶颈转化为集群的线性扩展能力,支撑更高的并发访问;
- 高可用性(High Availability):通过冗余部署,当集群中某台服务器故障时,负载均衡器会自动将请求转发至健康的服务器,保障业务不中断;
- 可扩展性(Scalability):无需修改业务架构,仅需向集群中新增服务器节点,即可提升集群整体处理能力,适配业务增长需求。
1.2 集群的核心类型
根据集群的业务场景和核心目标,主流集群可分为三类:
1.2.1 负载均衡集群(Load Balancing Cluster)
负载均衡集群是最常见的集群类型,核心目标是将用户请求均匀分发到集群中的多台服务器节点,避免单台服务器负载过高,同时提升系统整体并发处理能力。
其核心逻辑是:通过负载均衡调度器(Director)作为统一入口,接收所有用户请求,根据预设的调度算法,将请求分发到后端真实服务器(Real Server)处理,真实服务器处理完成后,将结果返回给用户。
这类集群广泛应用于 Web 服务、API 网关、数据库读写分离等场景,LVS、Nginx、HAProxy 是主流的负载均衡解决方案,其中 LVS 是四层负载均衡的标杆产品。
1.2.2 高可用集群(High Availability Cluster)
高可用集群的核心目标是消除单点故障,保障业务的持续可用性。通过冗余部署多台服务器,当主节点出现故障时,自动将服务切换到备用节点,实现业务的无缝衔接,用户无感知。
常见的高可用方案如 Keepalived+LVS、Heartbeat 等,核心指标是系统可用性(Availability) ,计算公式为:可用性 = 正常运行时间 / (正常运行时间 + 故障停机时间),企业级高可用集群通常要求 99.99%(年停机时间≤52 分钟)甚至 99.999%(年停机时间≤5 分钟)的可用性。
1.2.3 高性能计算集群(High Performance Computing Cluster)
高性能计算集群(HPC)核心目标是提升计算性能,通过多台服务器并行处理复杂的计算任务,如科学计算、大数据分析、AI 模型训练等。这类集群通常采用 MPI(Message Passing Interface)等并行计算框架,将大型任务拆解为多个子任务,分发到集群节点并行计算,最终汇总结果。
1.3 负载均衡的分层架构
负载均衡集群并非简单的 "调度器 + 服务器" 组合,而是一个分层的、可扩展的架构体系,典型的负载均衡分层结构如下:
第一层:负载调度器(Director)
调度器是整个集群的统一入口,所有外部用户的请求都首先到达调度器。调度器根据预设的调度算法,将请求分发到后端的真实服务器节点。
为了避免调度器成为单点故障,通常会部署主备两台调度器,通过 HA(高可用)技术实现故障自动切换:当主调度器故障时,备用调度器自动接管虚拟 IP(VIP),保障集群入口的可用性。
第二层:服务器池(Server Pool)
服务器池是集群的业务处理核心,由多台真实服务器(Real Server)组成,负责处理调度器分发的用户请求,执行业务逻辑(如 Web 服务、应用服务等)。
服务器池中的节点是对等的,可根据业务需求动态扩容 / 缩容:新增节点时,仅需将其加入调度器的分发列表;节点故障时,调度器会自动将其从分发列表中剔除,不影响集群整体服务。
第三层:共享存储(Shared Storage)
共享存储是集群的数据一致性保障,为服务器池中的所有节点提供统一、一致的数据存储。在 Web 服务场景中,共享存储通常存储网站的静态资源、配置文件等,确保所有后端服务器访问到的数据完全一致,避免用户请求分发到不同服务器时出现数据不一致的问题。
NFS(Network File System)是 Linux 环境下最常用的共享存储解决方案,通过网络将存储服务器的目录共享给后端服务器,实现数据的统一管理。
1.4 负载均衡的三种工作模式
LVS 支持三种核心工作模式,分别适用于不同的网络架构和业务场景,核心差异在于请求转发和响应返回的路径:
1.4.1 NAT 模式(Network Address Translation,网络地址转换)
NAT 模式是最基础的 LVS 工作模式,原理类似防火墙的地址转换技术:
- 请求转发:用户请求到达调度器后,调度器将请求的目标 IP(VIP)转换为后端真实服务器的内网 IP,将请求转发给真实服务器;
- 响应返回:真实服务器处理完成后,将响应返回给调度器,调度器再将源 IP(真实服务器内网 IP)转换为 VIP,返回给用户;
- 核心特点:调度器作为请求和响应的必经节点,真实服务器无需公网 IP,仅需内网 IP 即可,安全性高;但调度器会成为性能瓶颈,因为所有请求和响应都需要经过调度器转发,适用于中小型集群。
1.4.2 DR 模式(Direct Routing,直接路由)
DR 模式是企业级生产环境最常用的 LVS 工作模式,核心原理是改写请求的 MAC 地址:
- 请求转发:调度器接收用户请求后,不修改 IP 地址,仅将请求的目标 MAC 地址修改为选中的真实服务器的 MAC 地址,将请求转发到真实服务器;
- 响应返回:真实服务器处理完成后,直接将响应返回给用户,无需经过调度器;
- 核心特点:响应数据不经过调度器,调度器仅处理请求转发,性能极高,可支撑万级并发;但要求真实服务器与调度器在同一二层网络(同一局域网),真实服务器需要配置 VIP(隐藏在 lo 接口),适用于大型高并发集群。
1.4.3 TUN 模式(IP Tunneling,IP 隧道)
TUN 模式是 DR 模式的扩展,核心原理是通过 IP 隧道封装请求:
- 请求转发:调度器将用户请求封装在新的 IP 数据包中,发送给真实服务器;
- 响应返回:真实服务器解封装后处理请求,直接将响应返回给用户;
- 核心特点:真实服务器可部署在不同的地域、不同的网络中,无需与调度器在同一局域网;但需要真实服务器支持 IP 隧道协议,配置复杂度高,适用于跨地域的分布式集群。
三种工作模式的核心对比如下:
表格
| 工作模式 | 请求转发方式 | 响应路径 | 调度器性能瓶颈 | 网络要求 | 适用场景 |
|---|---|---|---|---|---|
| NAT 模式 | 地址转换 | 经过调度器 | 有 | 无特殊要求 | 中小型集群、内网服务 |
| DR 模式 | MAC 地址改写 | 直接返回用户 | 无 | 同一二层网络 | 大型高并发集群、公网服务 |
| TUN 模式 | IP 隧道封装 | 直接返回用户 | 无 | 无特殊要求 | 跨地域分布式集群 |
二、LVS 核心原理与调度算法
2.1 LVS 技术概述
LVS(Linux Virtual Server)是由我国程序员章文嵩博士主导开发的开源负载均衡项目,从 Linux 2.6 内核开始,LVS 已经被集成到 Linux 内核中,无需额外安装内核模块,直接通过用户态工具即可配置使用。
LVS 是四层负载均衡解决方案,工作在 OSI 模型的传输层(Layer 4),仅基于 IP 地址和端口号进行请求转发,不解析应用层数据(如 HTTP、HTTPS),因此转发性能极高,单台调度器可支撑数万级别的并发请求,资源消耗极低,远优于七层负载均衡(如 Nginx)。
LVS 的核心组件分为两部分:
- 内核态 IPVS 模块:集成在 Linux 内核中,负责实际的请求转发、调度算法执行,是 LVS 高性能的核心保障;
- 用户态 ipvsadm 工具:用于配置和管理 IPVS 规则,如添加虚拟服务、管理真实服务器、查看集群状态等,是运维人员操作 LVS 的入口。
2.2 LVS 的核心调度算法
调度算法是 LVS 的核心大脑,决定了调度器如何将用户请求分发到后端真实服务器。LVS 提供了 10 种调度算法,分为静态调度算法 和动态调度算法两大类:
2.2.1 静态调度算法
静态调度算法仅根据预设的规则分发请求,不考虑后端服务器的实时负载状态,适用于服务器性能一致、负载均衡的场景:
-
轮询(Round Robin, RR) 最基础的调度算法,调度器按顺序将请求依次分发到后端服务器,即
服务器1→服务器2→服务器3→服务器1→...,实现简单,假设所有服务器性能一致,适用于服务器配置相同的场景。 -
**加权轮询(Weighted Round Robin, WRR)**轮询算法的增强版,为每台服务器分配一个权重值(Weight),权重越高的服务器,被分发的请求越多。例如:服务器 A 权重为 2,服务器 B 权重为 1,则请求分发比例为 2:1,适用于服务器性能不一致的场景,可根据服务器硬件配置分配权重,充分利用高性能服务器的资源。
-
**源地址哈希(Source Hashing, SH)**根据用户请求的源 IP 地址进行哈希计算,将同一源 IP 的请求固定分发到同一台后端服务器,适用于需要会话保持的场景(如用户登录状态),确保同一用户的请求始终由同一服务器处理,避免会话丢失。
-
**目标地址哈希(Destination Hashing, DH)**根据请求的目标 IP 地址进行哈希计算,将同一目标 IP 的请求分发到同一台服务器,适用于缓存集群场景,提升缓存命中率。
2.2.2 动态调度算法
动态调度算法会根据后端服务器的实时负载状态(如当前连接数、响应时间等)分发请求,实现更精准的负载均衡,适用于服务器负载波动较大的场景:
-
最少连接(Least Connections, LC) 调度器将请求分发到当前活动连接数最少的后端服务器,确保服务器负载尽可能均衡,适用于长连接场景(如数据库连接)。
-
加权最少连接(Weighted Least Connections, WLC) 最少连接算法的增强版,结合服务器权重和当前连接数,计算公式为:
负载率 = 活动连接数 / 权重,调度器将请求分发到负载率最低的服务器,兼顾服务器性能和实时负载,是 LVS 最常用的调度算法之一。 -
最短期望延迟(Shortest Expected Delay, SED) 加权最少连接的优化版,计算公式为:
(活动连接数 + 1) / 权重,避免了 WLC 算法中 "权重高的服务器连接数始终为 0" 的问题,适用于服务器性能差异较大的场景。 -
**最少队列(Never Queue, NQ)**SED 算法的优化版,若存在连接数为 0 的服务器,则直接将请求分发到该服务器,否则按 SED 算法分发,确保空闲服务器优先处理请求,提升响应速度。
-
**基于局部性的最少连接(Locality-Based Least Connections, LBLC)**结合目标地址哈希和最少连接算法,将同一目标 IP 的请求分发到同一台服务器,若该服务器负载过高,则分发到负载最低的服务器,适用于缓存集群。
-
**带复制的基于局部性最少连接(Locality-Based Least Connections with Replication, LBLCR)**LBLC 算法的增强版,当目标 IP 对应的服务器负载过高时,将请求复制到多台服务器,适用于大型缓存集群。
2.3 ipvsadm 工具详解
ipvsadm 是 LVS 的用户态管理工具,用于配置、管理、查看 IPVS 规则,是运维 LVS 集群的核心工具。在 OpenEuler 系统中,可通过以下命令安装 ipvsadm:
dnf install ipvsadm -y
2.3.1 核心命令语法
ipvsadm 的核心命令分为虚拟服务管理、真实服务器管理、规则查看三大类:
-
虚拟服务管理虚拟服务是 LVS 对外提供的统一入口,由 VIP(虚拟 IP)、端口、协议组成,核心命令如下:
# 添加虚拟服务 ipvsadm -A -t <VIP:端口> -s <调度算法> # 参数说明: # -A:添加虚拟服务 # -t:TCP协议(-u为UDP协议) # -s:指定调度算法(如rr、wrr、lc、wlc等) # 删除虚拟服务 ipvsadm -D -t <VIP:端口> # 修改虚拟服务 ipvsadm -E -t <VIP:端口> -s <新调度算法> -
真实服务器管理真实服务器是后端处理请求的节点,核心命令如下:
# 添加真实服务器到虚拟服务 ipvsadm -a -t <VIP:端口> -r <真实服务器IP:端口> -g/-i/-m [-w <权重>] # 参数说明: # -a:添加真实服务器 # -r:指定真实服务器IP和端口 # -g:DR模式(默认) # -i:TUN模式 # -m:NAT模式 # -w:指定服务器权重(默认1) # 删除真实服务器 ipvsadm -d -t <VIP:端口> -r <真实服务器IP:端口> -
规则查看与管理
# 查看当前IPVS规则(-n表示不解析域名,提升速度) ipvsadm -Ln # 清空所有IPVS规则 ipvsadm -C # 保存IPVS规则(重启后生效) ipvsadm -S > /etc/sysconfig/ipvsadm # 加载保存的规则 ipvsadm -R < /etc/sysconfig/ipvsadm # 查看LVS连接状态 ipvsadm -Lnc
2.3.2 常用操作示例
# 1. 添加TCP虚拟服务,VIP为192.168.172.16,端口80,调度算法为轮询
ipvsadm -A -t 192.168.172.16:80 -s rr
# 2. 添加两台真实服务器,NAT模式,权重分别为1和2
ipvsadm -a -t 192.168.172.16:80 -r 192.168.172.23:80 -m -w 1
ipvsadm -a -t 192.168.172.16:80 -r 192.168.172.24:80 -m -w 2
# 3. 查看IPVS规则
ipvsadm -Ln
# 4. 保存规则,开机自启
ipvsadm -S > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
三、NFS 共享存储配置
在 LVS 负载均衡集群中,后端多台真实服务器需要访问一致的业务数据(如网站静态资源、配置文件),否则用户请求分发到不同服务器时,会出现数据不一致的问题。NFS(Network File System)是 Linux 环境下最常用的共享存储解决方案,通过网络将存储服务器的目录共享给后端服务器,实现数据的统一管理。
3.1 NFS 技术概述
NFS 是基于 TCP/IP 协议的网络文件系统,允许服务器通过网络共享目录,客户端可以像访问本地目录一样访问共享目录,实现数据的集中存储和多服务器共享访问。
NFS 的核心组件:
- NFS 服务端:部署共享存储的服务器,负责共享目录、配置访问权限;
- NFS 客户端:后端真实服务器,挂载 NFS 服务端的共享目录,访问共享数据;
- RPC(Remote Procedure Call):远程过程调用协议,用于 NFS 服务端和客户端之间的通信,NFS 依赖 RPC 服务实现端口映射。
3.2 NFS 服务端部署(OpenEuler 环境)
3.2.1 安装 NFS 服务
# 安装NFS和RPC服务
dnf install nfs-utils rpcbind -y
# 启动服务并设置开机自启
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
3.2.2 配置共享目录
NFS 的核心配置文件为/etc/exports,用于配置共享目录、访问权限、允许访问的客户端 IP 等,配置语法如下:
<共享目录> <允许访问的客户端IP/网段>(权限参数)
常用权限参数:
rw:读写权限;ro:只读权限;sync:同步写入,数据写入磁盘后再返回响应,数据安全;async:异步写入,数据写入内存后立即返回响应,性能高,可能存在数据丢失风险;no_root_squash:不压缩 root 用户权限,客户端 root 用户对共享目录拥有 root 权限(慎用);root_squash:压缩 root 用户权限,客户端 root 用户映射为 nfsnobody 用户(默认);all_squash:压缩所有用户权限,所有客户端用户都映射为 nfsnobody 用户;anonuid/anongid:指定映射的用户 UID 和 GID。
配置示例:
# 1. 创建共享目录
mkdir -p /data/nfs/web
chmod 777 /data/nfs/web # 赋予读写权限,确保客户端可写入
# 2. 编辑/etc/exports配置文件
vi /etc/exports
# 添加以下内容:允许192.168.172.0/24网段的客户端读写访问/data/nfs/web目录
/data/nfs/web 192.168.172.0/24(rw,sync,no_root_squash)
# 3. 重载配置文件,使配置生效
exportfs -r
# 4. 查看共享目录
exportfs -v
3.2.3 配置防火墙
NFS 依赖多个端口,需要在防火墙中开放相关端口:
# 开放NFS和RPC相关端口
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload
3.3 NFS 客户端部署(后端真实服务器)
3.3.1 安装 NFS 客户端工具
dnf install nfs-utils -y
3.3.2 挂载共享目录
# 1. 创建本地挂载目录
mkdir -p /var/www/html
# 2. 挂载NFS共享目录
mount -t nfs 192.168.168.102:/data/nfs/web /var/www/html
# 3. 查看挂载状态
df -h
3.3.3 配置开机自动挂载
为了确保服务器重启后自动挂载 NFS 共享目录,需要编辑/etc/fstab文件:
vi /etc/fstab
# 添加以下内容:
192.168.168.102:/data/nfs/web /var/www/html nfs defaults 0 0
# 重载fstab配置,验证挂载
mount -a
df -h
3.4 NFS 共享存储验证
在 NFS 服务端的共享目录中创建测试文件:
# 在服务端执行
echo "NFS shared storage test" > /data/nfs/web/index.html
在 NFS 客户端(后端真实服务器)的挂载目录中查看文件:
# 在客户端执行
cat /var/www/html/index.html
# 输出:NFS shared storage test,说明共享存储配置成功
四、LVS-NAT 模式完整实战部署
4.1 实验环境规划
本次实战采用 LVS-NAT 模式,搭建一套完整的负载均衡集群,环境规划如下:
表格
| 角色 | 操作系统 | IP 地址 | 核心配置 |
|---|---|---|---|
| LVS 调度器 | OpenEuler 24.03 | 公网 IP:192.168.172.129内网 IP:192.168.168.100 | 开启 IP 转发,安装 ipvsadm |
| 真实服务器 web1 | OpenEuler 24.03 | 内网 IP:192.168.168.102 | 部署 httpd 服务,挂载 NFS 共享存储 |
| 真实服务器 web2 | OpenEuler 24.03 | 内网 IP:192.168.168.103 | 部署 httpd 服务,挂载 NFS 共享存储 |
| NFS 共享存储 | OpenEuler 24.03 | 内网 IP:192.168.168.102(与 web1 复用) | 部署 NFS 服务,共享网站数据 |
| 客户端 | Windows/Linux | 公网 IP:192.168.172.0/24 | 用于访问 LVS 集群,验证负载均衡 |
4.2 LVS 调度器配置
4.2.1 开启 IP 转发
NAT 模式下,调度器需要转发 IP 数据包,因此必须开启内核 IP 转发功能:
# 临时开启(重启后失效)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启,编辑/etc/sysctl.conf
vi /etc/sysctl.conf
# 添加/修改以下内容:
net.ipv4.ip_forward = 1
# 重载配置,使生效
sysctl -p
4.2.2 安装 ipvsadm 工具
dnf install ipvsadm -y
# 清空默认规则
ipvsadm -C
4.2.3 配置 LVS-NAT 模式虚拟服务
# 1. 添加虚拟服务,VIP为调度器公网IP 192.168.172.129,端口80,调度算法为轮询
ipvsadm -A -t 192.168.172.129:80 -s rr
# 2. 添加两台真实服务器,NAT模式(-m参数)
ipvsadm -a -t 192.168.172.129:80 -r 192.168.168.102:80 -m
ipvsadm -a -t 192.168.172.129:80 -r 192.168.168.103:80 -m
# 3. 查看IPVS规则
ipvsadm -Ln
# 输出示例:
# IP Virtual Server version 1.2.1 (size=4096)
# Prot LocalAddress:Port Scheduler Flags
# -> RemoteAddress:Port Forward Weight ActiveConn InActConn
# TCP 192.168.172.129:80 rr
# -> 192.168.168.102:80 Masq 1 0 0
# -> 192.168.168.103:80 Masq 1 0 0
# Masq表示NAT模式,说明配置成功
# 4. 保存规则,开机自启
ipvsadm -S > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
4.3 后端真实服务器配置
4.3.1 部署 httpd 服务
在 web1 和 web2 两台服务器上分别执行:
# 安装httpd服务
dnf install httpd -y
# 启动服务并设置开机自启
systemctl start httpd
systemctl enable httpd
# 配置防火墙,开放80端口
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
4.3.2 配置默认网关
NAT 模式下,真实服务器的默认网关必须指向 LVS 调度器的内网 IP(192.168.168.100),否则响应数据无法返回给调度器:
# 临时修改默认网关(重启后失效)
route add default gw 192.168.168.100
# 永久修改,编辑网卡配置文件(以eth1为例,根据实际网卡名称修改)
vi /etc/sysconfig/network-scripts/ifcfg-eth1
# 添加/修改以下内容:
GATEWAY=192.168.168.100
# 重启网络服务,使生效
systemctl restart NetworkManager
# 验证网关
route -n
4.3.3 挂载 NFS 共享存储
在 web1 和 web2 两台服务器上分别执行(NFS 服务端部署在 web1 上):
# 安装NFS客户端
dnf install nfs-utils -y
# 挂载NFS共享目录到httpd的默认根目录
mount -t nfs 192.168.168.102:/data/nfs/web /var/www/html
# 配置开机自动挂载
vi /etc/fstab
# 添加:
192.168.168.102:/data/nfs/web /var/www/html nfs defaults 0 0
mount -a
4.3.4 配置测试页面
在 NFS 服务端(web1)的共享目录中创建测试页面:
# 在web1执行
echo "<h1>LVS-NAT Cluster Test - Web Server 1 (192.168.168.102)</h1>" > /data/nfs/web/index.html
# 为了验证负载均衡,在web2本地创建不同的测试页面(覆盖NFS共享页面)
echo "<h1>LVS-NAT Cluster Test - Web Server 2 (192.168.168.103)</h1>" > /var/www/html/index.html
4.4 集群验证
在客户端(公网 IP 192.168.172.0/24 网段)通过浏览器访问http://192.168.172.129,多次刷新页面,会交替显示两台真实服务器的测试页面,说明 LVS-NAT 模式负载均衡配置成功,请求被均匀分发到两台后端服务器。
同时,在 LVS 调度器上查看连接状态:
ipvsadm -Lnc
# 输出示例:
# IPVS connection entries
# pro expire state source virtual destination
# TCP 01:58 ESTABLISHED 192.168.172.1:54321 192.168.172.129:80 192.168.168.102:80
# TCP 01:58 ESTABLISHED 192.168.172.1:54322 192.168.172.129:80 192.168.168.103:80
可以看到客户端请求被分别转发到两台真实服务器,负载均衡生效。
五、LVS 集群运维与优化
5.1 集群健康检查
LVS 本身不提供后端服务器健康检查功能,若后端服务器故障,LVS 仍会将请求分发到该服务器,导致用户访问失败。因此,需要结合第三方工具实现健康检查,常用方案为Keepalived+LVS:
- Keepalived 不仅可以实现 LVS 调度器的高可用(主备切换),还可以配置后端服务器的健康检查,定期检测服务器状态,自动剔除故障服务器,恢复后自动加入集群;
- 健康检查方式:TCP 端口检测、HTTP/HTTPS 状态码检测、脚本自定义检测等。
5.2 性能优化
5.2.1 内核参数优化
针对 LVS 调度器,优化内核参数提升转发性能:
vi /etc/sysctl.conf
# 添加以下优化参数:
# 开启IP转发
net.ipv4.ip_forward = 1
# 调整连接跟踪表大小,提升并发连接数
net.netfilter.nf_conntrack_max = 262144
# 调整TCP连接超时时间,快速回收空闲连接
net.netfilter.nf_conntrack_tcp_timeout_established = 300
# 开启SYN Cookies,防范SYN洪水攻击
net.ipv4.tcp_syncookies = 1
# 调整端口范围,提升临时端口数量
net.ipv4.ip_local_port_range = 1024 65535
# 重载配置
sysctl -p
5.2.2 调度算法优化
根据业务场景选择合适的调度算法:
- 短连接、服务器性能一致:轮询(RR);
- 服务器性能不一致:加权轮询(WRR)/ 加权最少连接(WLC);
- 长连接、会话保持:源地址哈希(SH);
- 高并发、负载波动大:最少连接(LC)/ 加权最少连接(WLC)。
5.3 常见问题排查
5.3.1 客户端无法访问 LVS 集群
- 排查调度器 IP 转发是否开启:
cat /proc/sys/net/ipv4/ip_forward,输出应为 1; - 排查 IPVS 规则是否正确:
ipvsadm -Ln,确认虚拟服务和真实服务器配置正确; - 排查防火墙规则:确认调度器开放了对应端口,后端服务器网关配置正确;
- 排查网络连通性:客户端 ping 调度器 VIP,调度器 ping 后端服务器 IP。
5.3.2 负载均衡不生效,请求始终分发到同一台服务器
- 排查调度算法:若使用源地址哈希(SH),同一客户端 IP 会固定分发到同一服务器,更换为轮询算法;
- 排查后端服务器状态:确认多台服务器均正常运行,权重配置正确;
- 排查客户端缓存:清除浏览器缓存,使用不同客户端 IP 测试。
5.3.3 NFS 共享存储挂载失败
- 排查 NFS 服务状态:
systemctl status nfs-server,确认服务正常运行; - 排查防火墙:确认 NFS 服务端开放了 nfs、rpc-bind、mountd 服务;
- 排查 /etc/exports 配置:确认客户端 IP 网段、权限配置正确,执行
exportfs -r重载配置; - 排查网络连通性:客户端 ping NFS 服务端 IP,测试端口连通性。
六、总结
LVS 作为 Linux 内核原生的四层负载均衡解决方案,凭借其高性能、高稳定性、低资源消耗的特性,是企业级高并发集群架构的核心组件。本文从 LVS 的基础原理、核心架构、调度算法,到 OpenEuler 系统下的 NFS 共享存储配置、LVS-NAT 模式完整实战部署,全方位拆解了 LVS 负载均衡集群的技术细节,帮助读者从零搭建一套企业级负载均衡系统。
在实际生产环境中,LVS 通常与 Keepalived 结合使用,实现调度器的高可用和后端服务器的健康检查;同时,可结合 Nginx 七层负载均衡,构建 "LVS+Nginx" 的多层负载均衡架构,兼顾高性能和业务灵活性,支撑千万级并发的互联网应用。
随着云原生、微服务架构的普及,LVS 依然是 Kubernetes 集群 Ingress Controller 的核心负载均衡组件,在容器化环境中发挥着重要作用。掌握 LVS 技术,不仅是运维人员的核心技能,更是理解高并发、高可用架构的基础。