【Linux 进阶】LVS (Linux Virtual Server) 超详细学习笔记
前言:LVS(Linux Virtual Server,Linux虚拟服务器)是基于Linux内核层实现的高性能、高可用负载均衡集群技术,由章文嵩博士研发,目前已纳入Linux内核标准模块。其核心功能在于将前端客户端请求流量合理分发至后端多台真实服务器(RS),有效提升服务的并发处理能力与系统可用性。值得注意的是,阿里巴巴四层SLB(Server Load Balance)服务正是基于LVS+Keepalived架构构建,因此LVS是Linux服务端运维、集群开发岗位必备的核心技术之一。
一、实验环境
本文所有实操案例均基于以下主机角色划分,以确保实验的可复现性:主机名分别为server1、server2、server3、server4,对应角色依次为调度器(VS)、真实服务器(RS)、真实服务器(RS)、测试机,四台主机协同配合,完成LVS全流程实验操作。
二、集群和分布式基础
学习LVS技术前,需首先明确集群与分布式的核心概念及二者差异,这是理解负载均衡原理、熟练运用LVS技术的基础前提。
2.1 系统性能扩展方式
-
Scale UP(向上扩展):通过升级单台设备的硬件配置(如CPU、内存、硬盘等)提升系统性能,该方式操作简便,但性能存在明确上限,无法满足高并发业务场景的需求。
-
Scale Out(向外扩展):通过增加设备数量,结合调度机制实现负载分担,突破单台设备的性能瓶颈,是集群技术的核心设计思想,也是LVS技术的核心实现逻辑。
2.2 集群(Cluster)
集群是将多台计算机组合为一个逻辑整体,协同完成特定业务需求的系统,其常见类型分为3类,其中需重点关注与LVS相关的负载均衡集群:
-
LB(负载均衡集群):由多台主机组成,每台主机承担部分客户端访问请求,实现负载分担,是LVS技术的核心应用场景,也是运维工作中最常用的集群类型。
-
HA(高可用集群):核心目标是解决单点故障(SPOF),保障服务持续可用,其核心评估指标包括MTBF、MTTR、可用性公式及SLA。具体说明如下:MTBF(Mean Time Between Failures)即平均无故障时间,指系统正常运行的平均时长;MTTR(Mean Time To Repair)即平均恢复前时间,指系统出现故障后,恢复正常运行的平均时长;可用性公式为
A=MTBF/(MTBF+MTTR),取值范围为0~1,常用“3个9”“4个9”“5个9”进行衡量,例如99.999%的可用性表示年停机时间不超过5分钟;SLA(Service Level Agreement)即服务等级协议,是服务商与用户约定的可用性标准,未达标需承担相应违约责任,运维工作的核心目标之一即为达成SLA约定。 -
HPC(高性能计算集群):主要应用于大规模科学计算、数值模拟等场景,属于国家战略资源,本文不做深入阐述。
2.3 分布式
分布式是将一个完整业务拆分为多个子业务或不同模块,分别部署在多台服务器上,各节点的功能、数据、代码均不相同,通过协同工作实现完整业务流程。常见的分布式应用场景及实例如下:分布式存储(Ceph、GlusterFs、FastDFS、MogileFs等)、分布式计算(Hadoop、Spark等),以及其他专属场景(微服务架构的功能拆分、分布式静态资源存储、key-value缓存、专属业务分布式计算等)。
2.4 集群 vs 分布式(核心区别)
从5个核心维度可清晰区分集群与分布式,帮助运维人员精准掌握二者的应用场景:① 部署方式:集群为同一业务完整部署在多台服务器;分布式为一个业务拆分为子业务后,分别部署在多台服务器。② 节点特性:集群各节点的功能、数据、代码完全一致,可相互替代;分布式各节点的功能、数据、代码存在差异,且缺一不可,无法相互替代。③ 效率提升方式:集群通过增加节点数量,提高单位时间内处理的任务数,提升整体吞吐量;分布式通过拆分业务,缩短单个任务的执行时间,提升响应速度。④ 故障影响:集群单个节点宕机后,其他节点可无缝顶替,不影响整体业务运行;分布式单个节点宕机后,其负责的子业务会直接失效,可能导致整体业务异常。⑤ 核心应用:集群主要用于负载均衡、高可用(如LVS集群);分布式主要用于微服务、大数据计算、分布式存储。
三、LVS核心运行原理
3.1 LVS核心术语
LVS的网络交互逻辑基于以下核心IP及角色定义,是理解其工作模式、排查故障的关键,需熟练掌握:VS(Virtual Server,调度器):核心节点,负责接收客户端请求,并通过调度算法分发至后端RS;RS(Real Server,真实服务器):实际提供业务服务的节点,接收VS分发的请求并进行处理与响应;CIP(Client IP,客户端IP):发起请求的客户端主机IP地址;VIP(Virtual Server IP,虚拟服务IP):VS对外暴露的IP地址,是客户端唯一可感知的访问IP;DIP(Director IP,调度器内网IP):VS用于与内网RS通信的IP地址;RIP(Real Server IP,真实服务器IP):RS的内网IP地址,用于与VS通信。核心访问流程:客户端(CIP)向VIP发起请求,VS(DIP)接收请求后分发至RS(RIP),RS处理完成后反馈响应,客户端仅能感知VIP,无法直接访问RS。
3.2 LVS集群体系结构
LVS集群核心架构流程:客户端 -> Internet/Intranet(网络) -> 负载均衡器(VS) -> 真实服务器集群(RS) -> 分布式存储/数据库(后端服务)
-
VS的核心作用:根据客户端请求报文的目标IP、协议、端口,结合预设的调度算法,筛选合适的RS并转发请求;
-
高可用优化:可额外配置心跳检测机制及备份VS节点,当主VS宕机时,备份VS自动接管,避免LVS自身成为单点故障。
3.3 LVS四种工作模式
LVS核心支持NAT、DR、TUN、FULLNAT四种工作模式,其中DR模式为默认且最常用模式,NAT模式适用于小型集群,TUN和FULLNAT模式仅作了解即可。四种模式的核心差异在于请求/响应报文的转发方式、网络配置要求,需重点掌握前两种模式。
3.3.1 NAT模式(网络地址转换)
本质:基于多目标IP的DNAT(目标地址转换)技术,通过修改请求报文的目标IP+端口,将请求转发至后端RS的RIP+PORT,实现负载均衡。
核心特性
-
网络约束:RIP与DIP必须处于同一私网网段,且所有RS的网关必须指向DIP,以确保响应报文能正常回传至VS;
-
性能瓶颈:请求报文和响应报文均需经过VS转发,VS的带宽和处理能力将成为整个集群的性能瓶颈,不适用于高并发场景;
-
端口支持:支持端口映射,可根据业务需求修改请求的目标端口;
-
系统兼容:VS必须采用Linux系统(需启用ipvs内核模块),RS可采用任意操作系统(Windows、Linux均可)。
数据传输流程
-
客户端发起请求:报文格式为
CIP -> VIP:80(假设业务端口为80); -
VS进行DNAT转换:将请求报文的目标IP+端口修改为选中RS的
RIP1:9000,修改后报文为CIP -> RIP1:9000; -
RS处理并响应:RS1接收请求并处理完成后,发送响应报文
RIP1:9000 -> CIP; -
VS修改响应源:将响应报文的源IP+端口修改为
VIP:80,修改后报文为VIP:80 -> CIP; -
响应回传客户端:VS将修改后的响应报文回传给客户端,完成一次请求-响应流程。
注意
配置NAT模式时,需清空VS上的iptables防火墙策略。由于ipvs内核模块作用于网络协议栈的PREROUTING和INPUT链之间,iptables的相关规则会干扰ipvs的请求转发逻辑,导致LVS无法正常运行。
3.3.2 DR模式(直接路由,默认/最常用)
本质:不修改请求报文的IP首部,仅为请求报文重新封装MAC首部(源MAC地址为DIP对应的网卡MAC,目标MAC地址为选中RS的网卡MAC),IP地址和端口保持不变,可大幅提升转发效率。
核心特性
-
VIP配置要求:VS和所有RS均需配置相同的VIP(这是DR模式的核心要求,也是易出现地址冲突的关键环节);
-
性能优势:仅请求报文经过VS转发,响应报文由RS直接发送给客户端,VS无需承担响应报文的转发压力,无性能瓶颈,是四种模式中性能最优的类型;
-
网络约束:RIP与DIP需处于同一物理网络(同一局域网),RS的网关指向局域网路由,无需指向DIP;
-
端口限制:不支持端口映射,请求端口与RS的业务端口必须保持一致;
-
系统兼容:RS可采用大多数操作系统(Linux、Windows等),无特殊限制。
数据传输流程
-
客户端发送请求:数据帧格式为
CIP(IP地址)+CIP(MAC地址) -> VIP(IP地址)+VIP(MAC地址); -
VS修改MAC首部:将数据帧的目标MAC地址修改为选中RS1的MAC地址,修改后帧格式为
CIP(IP地址)+CIP(MAC地址) -> VIP(IP地址)+RS1(MAC地址); -
RS直接响应客户端:RS1接收报文后,识别到目标IP为自身配置的VIP,直接向客户端发送响应报文,格式为
VIP(IP地址)+RS1(MAC地址) -> CIP(IP地址)+CIP(MAC地址)。
DR模式关键:解决VIP地址冲突
由于VS和所有RS均配置了相同的VIP,在局域网内会出现ARP广播冲突(客户端或网关发送ARP请求时,多个节点会同时响应),导致请求转发异常。以下为三种解决方案,实际生产环境中常用方案2+方案3,兼顾稳定性和易用性:
-
前端网关静态绑定:在局域网网关设备上,将VIP与VS的网卡MAC地址进行静态绑定,确保ARP请求仅由VS响应;
-
RS上使用
arptables工具限制ARP响应:通过规则禁止RS响应针对VIP的ARP请求,避免地址冲突,具体命令如下:arptables -A IN -d $VIP -j DROParptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP -
RS上修改内核参数(推荐方案):通过调整内核参数,限制RS的ARP通告和应答级别,从根本上避免地址冲突,具体命令如下:
# arp_ignore:1表示仅在请求目标IP配置在接收接口时才响应ARP请求echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore# arp_announce:2表示禁止将接口的IP信息向非本网络通告echo 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3.3.3 TUN模式(IP隧道,了解)
本质:不修改原请求报文的IP首部,在其外层新增一个IP隧道首部(源IP为VS的DIP,目标IP为选中RS的RIP),通过IP隧道技术将请求转发至RS,适用于跨网络场景。
核心特性
-
网络支持:DIP、VIP、RIP均需配置为公网地址,支持跨地域、跨网络的RS部署,无需处于同一物理网络;
-
转发逻辑:请求报文经VS转发(通过IP隧道),响应报文由RS直接发送给客户端,VS无响应转发压力;
-
端口限制:不支持端口映射,请求端口与RS业务端口需保持一致;
-
系统要求:RS的操作系统必须支持IP隧道功能(如Linux默认支持,部分Windows版本需额外配置)。
3.3.4 FULLNAT模式(了解)
本质:同时修改请求报文的源IP(CIP→DIP)和目标IP(VIP→RIP),实现请求转发,该模式Linux内核默认不支持,需额外编译内核或安装扩展模块。
核心特性
-
网络支持:VIP为公网地址,RIP和DIP为私网地址,且RIP与DIP可不在同一私网网段,部署灵活性较高;
-
性能瓶颈:请求报文和响应报文均需经过VS转发,VS易成为性能瓶颈;
-
端口支持:支持端口映射,可灵活调整请求目标端口;
-
网关配置:RS的网关指向局域网路由,无需指向DIP,配置更为简便。
3.3.5 LVS工作模式核心对比
四种LVS工作模式的核心特性对比如下,便于运维人员根据业务场景选择合适的模式:① RS操作系统要求:NAT模式、FULLNAT模式无限制;DR模式需禁用ARP冲突(通过内核参数或arptables);TUN模式需支持IP隧道功能。② 网络要求:NAT模式需VS与RS处于同一私网;DR模式需VS与RS处于同一物理网络;TUN模式支持跨网络(公网);FULLNAT模式支持跨私网。③ VS瓶颈:NAT、FULLNAT模式瓶颈较高(请求+响应均经VS);DR、TUN模式无瓶颈(仅请求经VS)。④ RS网关设置:NAT模式需指向DIP;DR、TUN、FULLNAT模式均指向路由。⑤ 端口映射支持:NAT、FULLNAT模式支持;DR、TUN模式不支持。⑥ 常用程度:DR模式应用频率极高(生产环境首选);NAT模式应用程度一般(适用于小型集群);TUN、FULLNAT模式应用频率较低(仅用于特殊场景)。⑦ 核心转发方式:NAT模式修改目标IP/端口;DR模式重封装MAC首部;TUN模式新增IP隧道首部;FULLNAT模式同时修改源/目标IP。
3.4 LVS调度算法
LVS的请求调度逻辑由ipvsadm工具指定,调度算法分为静态算法(不考虑RS实时负载)、动态算法(根据RS实时负载调整调度策略),此外Linux 4.15内核及以上版本新增2种专用算法,系统默认调度算法为WLC(加权最少连接),可适配大多数生产场景。
3.4.1 算法分类总览
LVS调度算法按功能可分为三大类,各类算法的英文全称、核心特点及适用场景如下,便于运维人员根据业务需求进行选择:
静态算法(无负载感知,仅根据预设规则调度),共4种:① RR(Round Robin,轮询):核心特点为将请求平均分配给所有RS,无权重区分,适用于所有RS硬件配置完全一致的集群;② WRR(Weighted Round Robin,加权轮询):核心特点为按RS的权重分配请求,权重越高的RS被调度的次数越多,适用于RS硬件配置存在差异的集群;③ SH(Source Hash,源地址哈希):核心特点为将同一客户端(CIP)的所有请求,始终调度到同一台RS,实现会话绑定,适用于需要保持会话的业务(如表单提交、用户登录);④ DH(Destination Hash,目标地址哈希):核心特点为将同一目标地址的请求,始终调度到同一台RS,适用于正向代理缓存场景(如宽带运营商、CDN节点)。
动态算法(基于RS实时负载调度,更贴合生产场景),共6种:① LC(Least Connections,最少连接):核心特点为将请求调度到当前活动连接数最少的RS,适用于长连接应用(如SSH、数据库连接);② WLC(Weighted Least Connections,加权最少连接):核心特点为按(活动连接数×256+非活动连接数)/权重计算优先级,优先级越高的RS被优先调度,作为系统默认算法,适用于绝大多数生产场景;③ SED(Shortest Expected Delay,最短预期延迟):核心特点为按(活动连接数+1+非活动连接数)×256/权重计算优先级,高权重RS优先被调度,适用于高配置RS优先承接请求的场景;④ NQ(Never Queue,永不排队):核心特点为第一轮请求均匀分配给所有RS,后续请求按SED算法调度,避免低配置RS被优先调度导致的排队问题;⑤ LBLC(Locality-Based Least Connections,基于本地的最少连接):核心特点为动态DH算法,根据RS负载动态调整目标地址的调度策略,适用于正向代理缓存场景;⑥ LBLCR(Locality-Based Least Connections with Replication,带复制的LBLC):核心特点为解决LBLC算法的负载不均问题,将重负载节点的请求复制到轻负载节点,适用于大规模正向代理集群。
Linux 4.15内核新增算法(2种,专用场景):① FO(Weighted Failover,加权故障转移):核心特点为将请求调度到未过载的最高权重RS,支持给RS设置过载标记,适用于灰度发布、服务容灾场景;② OVF(Overflow Connections,溢出连接):核心特点为将请求调度到权重最高且当前活动连接数小于自身权重的RS,适用于高并发场景,确保负载均匀分配。
3.4.2 关键算法说明
-
会话保持:SH算法通过源地址哈希实现会话绑定,但存在明显缺陷——若某一客户端请求量过大,会导致对应RS负载过高,因此生产环境中,需实现会话保持时,优先采用LVS的持久连接功能,而非SH算法;
-
过载标记:FO、OVF算法支持给RS设置
IP_VS_DEST_F_OVERLOAD标记,当RS处于过载状态时,VS会自动跳过该RS,将请求调度到其他正常节点,适用于服务扩容、灰度发布场景; -
默认算法:WLC算法兼顾RS的硬件配置差异(权重)和实时负载(连接数),无需额外配置,即可适配大多数生产场景,是运维人员的首选算法。
四、LVS部署核心命令(ipvsadm)
LVS的部署、配置与管理均通过ipvsadm工具实现,该工具是LVS的用户态管理接口,并非Linux系统默认自带,需单独安装后使用。
4.1 LVS软件相关信息
# 程序包安装(CentOS/RHEL系统,yum方式) yum install ipvsadm -y # 核心文件说明(运维必备,便于排查配置问题) Unit File: ipvsadm.service # LVS系统服务文件,用于启停、开机自启 主程序: /usr/sbin/ipvsadm # ipvsadm核心命令路径 规则保存: /usr/sbin/ipvsadm-save # 保存当前LVS调度规则到文件 规则重载: /usr/sbin/ipvsadm-restore # 从文件重载LVS调度规则 配置文件: /etc/sysconfig/ipvsadm-config # LVS全局配置文件 调度规则文件: /etc/sysconfig/ipvsadm # LVS核心调度规则文件(默认保存路径) # 内核态规则/当前连接查看(排查故障常用) cat /proc/net/ip_vs # 查看当前LVS所有调度规则 cat /proc/net/ip_vs_conn # 查看当前LVS的所有连接状态
4.2 ipvsadm核心命令参数
ipvsadm命令按功能可分为管理集群服务和管理真实服务器(RS)两类,核心参数如下,需熟练掌握(重点记忆常用参数):
集群服务管理类参数(用于创建、修改、删除LVS集群服务):ipvsadm -A:添加新的LVS集群服务;ipvsadm -E:修改已存在的LVS集群服务;ipvsadm -D:删除指定的LVS集群服务;ipvsadm -C:清空所有LVS调度规则;ipvsadm -R:从文件重载LVS调度规则;ipvsadm -S [-n]:保存当前LVS规则到文件(-n表示不解析IP地址,避免解析耗时);-t/-u/-f:指定集群服务类型(-t:TCP协议,-u:UDP协议,-f:防火墙标记);-s:指定调度算法(如rr、wrr、wlc等);-p [timeout]:设置LVS持久连接超时时间(默认360秒,可根据业务需求调整)。
RS管理类参数(用于给集群服务添加、修改、删除RS):ipvsadm -a:将RS添加到指定的LVS集群服务;ipvsadm -e:修改集群服务中已存在的RS配置;ipvsadm -d:从集群服务中删除指定的RS;-r:指定RS的RIP地址(可添加端口,如192.168.0.101:80);-g/-i/-m:指定LVS工作模式(-g:DR模式,-i:TUN模式,-m:NAT模式);-w:指定RS的权重(正整数,权重越高,被调度的概率越大)。
查看/统计类参数(用于监控LVS运行状态):ipvsadm -L/-l [options]:查看当前LVS调度规则(-n:不解析IP,--rate:显示速率统计);ipvsadm -Z:清空LVS连接计数器(包括连接数、流量等统计信息)。
4.3 ipvsadm常用操作示例
# 1. 添加TCP集群服务:VIP=172.25.254.100:80,调度算法=轮询(rr) ipvsadm -A -t 172.25.254.100:80 -s rr # 2. 给集群添加RS:RIP=192.168.0.101,模式=NAT(-m),权重=1 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101 -m -w 1 # 3. 修改RS权重:将上述RS的权重修改为2(提升被调度概率) ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101 -m -w 2 # 4. 查看LVS规则:不解析IP,显示速率统计(监控常用) ipvsadm -Ln --rate # 5. 清空指定集群的计数器:仅清空172.25.254.100:80集群的连接统计 ipvsadm -Z -t 172.25.254.100:80 # 6. 保存LVS规则到配置文件:确保重启后规则不丢失 ipvsadm -Sn > /etc/sysconfig/ipvsadm # 7. 清空所有LVS规则:用于重新配置LVS(谨慎使用) ipvsadm -C # 8. 重载LVS规则:从配置文件重载规则(故障恢复常用) ipvsadm -R < /etc/sysconfig/ipvsadm # 9. 设置持久连接:超时时间3000秒(解决会话丢失问题) ipvsadm -E -t 172.25.254.100:80 -s rr -p 3000
速率统计字段说明
ipvsadm -Ln --rate命令的输出字段,是监控LVS运行状态的关键,各字段含义如下(运维排查流量、性能问题必备):CPS(Connections Per Second):每秒连接数,即服务器每秒处理的新连接数量;InPPS(Incoming Packets Per Second):每秒入站数据包数,即从客户端发送到VS的数据包数量;OutPPS(Outgoing Packets Per Second):每秒出站数据包数,即从VS转发到RS或回传给客户端的数据包数量;InBPS(Incoming Bytes Per Second):每秒入站流量(单位:字节),即从客户端到VS的流量大小;OutBPS(Outgoing Bytes Per Second):每秒出站流量(单位:字节),即从VS到RS或客户端的流量大小。
五、LVS实战案例(核心:NAT+DR模式)
结合生产常用场景,重点讲解NAT模式和DR模式的集群部署,步骤详细且可复现,适用于运维人员实操练习,所有命令均经过验证,可直接复制执行。
5.1 NAT模式集群部署
5.1.1 实验环境
本次NAT模式实验共涉及4台主机,具体配置如下(确保网络互通):① node1(调度器VS):外网IP=172.25.254.100,内网IP=192.168.0.100,VIP=172.25.254.100(与外网IP一致);② node2(真实服务器RS1):IP=192.168.0.101,网关=192.168.0.100(必须指向VS的DIP),无需配置VIP;③ node3(真实服务器RS2):IP=192.168.0.102,网关=192.168.0.100,无需配置VIP;④ node4(测试机):IP=172.25.254.104,用于测试LVS集群的负载均衡效果,无需配置VIP。核心要求:VS需配置双网卡(外网+内网),RS仅需配置内网网卡,且RS无需连接外网,所有RS的网关必须指向VS的DIP。
5.1.2 完整配置步骤
# 步骤1:VS上启用内核路由转发(NAT模式必备,否则无法转发请求) echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf sysctl --system # 生效内核参数,无需重启系统 # 步骤2:VS上安装ipvsadm工具(若未安装) yum install ipvsadm -y # 步骤3:VS上创建LVS集群服务,并添加RS(NAT模式) ipvsadm -A -t 172.25.254.100:80 -s rr # 创建TCP集群,调度算法=轮询 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m # 添加RS1,NAT模式 ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m # 添加RS2,NAT模式 # 步骤4:查看LVS规则,确认配置无误 ipvsadm -Ln # 步骤5:保存LVS规则,并设置ipvsadm开机自启(避免重启后规则丢失) ipvsadm -Sn > /etc/sysconfig/ipvsadm systemctl enable --now ipvsadm.service # 启用并立即启动服务 # 步骤6:修改调度算法为加权轮询(RS1权重2,RS2权重1,适配配置差异) ipvsadm -E -t 172.25.254.100:80 -s wrr # 修改算法为加权轮询 ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101:80 -m -w 2 # 修改RS1权重 ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.102:80 -m -w 1 # 修改RS2权重
5.1.3 测试效果
# 测试机上执行6次请求,验证轮询效果(需确保RS已部署HTTP服务) for N in {1..6};do curl 172.25.254.100;done # 轮询(rr)模式预期输出:RS1→RS2→RS1→RS2→RS1→RS2(均匀分配) # 加权轮询(wrr)模式预期输出:RS1→RS1→RS2→RS1→RS1→RS2(权重2:1分配)
5.2 DR模式集群部署(生产首选)
5.2.1 实验环境
本次DR模式实验共涉及5台主机,具体配置如下(确保网络互通):① client(测试机):IP=172.25.254.10(NAT模式),用于测试负载均衡效果,无需配置VIP;② router(网关/路由):eth0接口IP=172.25.254.100,eth1接口IP=192.168.0.10,作为局域网网关,无需配置VIP;③ lvs(调度器VS):IP=192.168.0.200,网关=192.168.0.10(指向路由),lo口配置VIP=192.168.0.100;④ RS1(真实服务器):IP=192.168.0.101,网关=192.168.0.10,lo口配置VIP=192.168.0.100;⑤ RS2(真实服务器):IP=192.168.0.102,网关=192.168.0.10,lo口配置VIP=192.168.0.100。核心要求:VS和所有RS必须处于同一物理网络,所有主机的lo口均需配置相同的VIP,RS的网关指向局域网路由,所有主机之间需保证网络互通。
5.2.2 完整配置步骤
步骤1:所有主机配置IP和VIP(lo口)
# 以RS1为例,VS、RS2配置方法完全相同(仅修改IP即可) # 1. 配置内网IP(通过NetworkManager配置,永久生效) vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection] id=eth0 type=ethernet interface-name=eth0 [ipv4] method=manual address1=192.168.0.101/24,192.168.0.10 # IP/掩码,网关(指向路由) # 2. 配置lo口VIP(32位掩码,避免ARP广播冲突) vim /etc/NetworkManager/system-connections/lo.nmconnection [connection] id=lo type=loopback interface-name=lo [ipv4] method=manual address1=127.0.0.1/8 # 本地回环地址(默认) address2=192.168.0.100/32 # VIP,32位掩码确保不广播 # 3. 重启网络,使配置生效 nmcli connection up lo nmcli connection up eth0
步骤2:RS上解决VIP地址冲突(修改内核参数,推荐方案)
# RS1和RS2均需执行,VS无需执行 # 限制ARP应答级别,避免VIP地址冲突 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore # 限制ARP通告级别,禁止向外广播VIP信息 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
步骤3:VS上配置LVS规则(DR模式)
# 1. 安装ipvsadm工具(若未安装) yum install ipvsadm -y # 2. 创建LVS集群服务:VIP=192.168.0.100:80,调度算法=加权轮询(wrr) ipvsadm -A -t 192.168.0.100:80 -s wrr # 3. 添加RS,指定DR模式(-g),权重默认1(可加-w调整) ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g # 4. 查看LVS规则,确认配置无误 ipvsadm -Ln # 5. 保存规则并设置开机自启,避免重启后丢失 ipvsadm -Sn > /etc/sysconfig/ipvsadm systemctl enable --now ipvsadm.service
5.2.3 测试效果
# 测试机上执行6次请求,验证DR模式负载均衡效果 for N in {1..6};do curl 192.168.0.100;done # 预期输出:RS1→RS2→RS1→RS2→RS1→RS2(加权轮询可通过调整权重改变分配比例)
六、LVS常见问题解决
针对生产环境中LVS常见的故障场景,提供具体解决方案,结合实操命令,帮助运维人员快速排查、解决问题,减少服务中断时间。
6.1 防火墙标记解决80/443端口轮询错乱
问题现象
当RS同时开放80端口(HTTP服务)和443端口(HTTPS服务)时,若单独为两个端口配置LVS集群规则,会出现同一客户端访问80和443端口时,被调度到不同RS的问题,导致会话不一致(如登录状态丢失、表单提交失败)。
解决方案
采用防火墙标记(FWM,Firewall Mark),将80和443端口标记为同一集群服务,实现同一客户端的80/443请求,始终调度到同一台RS,保障会话一致性。
# 步骤1:VS上给80、443端口打标记(标记值为6666,可自定义) iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666 # 步骤2:基于防火墙标记创建LVS集群服务,替代单独的端口规则(先清空原有规则) ipvsadm -C # 清空原有LVS规则(谨慎使用,确保无其他业务规则) ipvsadm -A -f 6666 -s rr # -f:指定防火墙标记,调度算法=轮询 # 步骤3:添加RS,DR模式(根据实际模式调整,此处以DR为例) ipvsadm -a -f 6666 -r 192.168.0.101 -g ipvsadm -a -f 6666 -r 192.168.0.102 -g # 测试:同一客户端访问80和443端口,验证是否调度到同一RS curl http://192.168.0.100;curl -k https://192.168.0.100 # -k:忽略HTTPS证书验证
6.2 LVS持久连接解决会话丢失
问题现象
采用RR、WRR等无会话保持的调度算法时,同一客户端的连续请求可能被调度到不同RS,导致表单提交、用户登录状态等会话信息丢失;SH算法虽能实现会话绑定,但易导致RS负载不均,影响集群性能。
解决方案
采用LVS的持久连接功能(通过-p参数配置),VS会将同一客户端(CIP)的请求,在预设的超时时间内,始终调度到同一台RS,超时后重新按算法调度,兼顾会话保持和负载均衡,适用于大多数需要会话一致性的业务。
# 配置持久连接:超时时间3000秒(基于防火墙标记的集群服务) ipvsadm -E -f 6666 -s rr -p 3000 # 配置持久连接:基于普通端口的集群服务(如172.25.254.100:80) ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
核心特性:持久连接的记录保存在VS的内存中,默认超时时间为360秒,可根据业务需求调整(如3000秒=50分钟,适配长会话业务);超时后,客户端再次发起请求,VS会重新按调度算法分配RS。
七、LVS核心总结
-
LVS是Linux内核层的负载均衡技术,工作在TCP/IP协议栈的四层(传输层),性能远高于应用层负载均衡工具(如Nginx),适用于高并发、高吞吐量场景,与Nginx配合可形成四层+七层负载均衡架构,兼顾性能和灵活性。
-
LVS四种工作模式中,DR模式为生产环境首选(无性能瓶颈、配置灵活),核心重点是解决VIP地址冲突(推荐通过修改RS内核参数实现);NAT模式适用于小型集群,部署简便但VS易成为性能瓶颈;TUN、FULLNAT模式仅用于特殊场景,无需深入掌握。
-
LVS调度算法默认采用WLC(加权最少连接),兼顾RS的硬件配置差异(权重)和实时负载(连接数),可适配大多数生产场景;需要实现会话保持时,优先采用持久连接功能,而非SH算法,避免RS负载不均。
-
当RS同时提供80(HTTP)和443(HTTPS)服务时,通过防火墙标记(FWM)将两个端口标记为同一集群服务,可解决会话不一致问题。
-
LVS自身无高可用能力,需配合Keepalived实现主备VS切换,解决VS单点故障,构成LVS+Keepalived经典高可用负载均衡架构,是生产环境的标准配置。
-
核心工具
ipvsadm的操作重点:添加集群服务→添加RS→保存规则→设置开机自启;日常监控可结合/proc/net/ip_vs(查看规则)和ipvsadm -Ln --rate(查看速率),快速排查故障。
更多推荐


所有评论(0)