LVS 项目知识点总结作业:
一、什么是集群(Cluster)
1. 描述
集群是指一组相互独立的计算机(服务器),通过高速网络连接,作为一个整体对外提供服务。对于客户端来说,访问集群就像访问一台高性能的服务器一样。集群系统通过多台服务器的协同工作,提供了高可用性、高并发处理能力和可扩展性。
2.步骤(集群工作流程)
-
步骤 1:客户端向集群的虚拟IP(VIP)发起服务请求。
-
步骤 2:调度器(负载均衡器)接收到请求。
-
步骤 3:调度器根据预设的算法,将请求分发到后端的某一台真实服务器(Real Server)上。
-
步骤 4:后端服务器处理请求,并将结果返回给客户端。

二、集群分类
1. 描述
根据主要目的不同,计算机集群通常分为三类:
-
高可用性集群(High Availability Cluster, HA):
-
作用:保证服务的连续性。当主节点宕机时,备用节点能立即接管服务,避免业务中断(如双机热备)。
-
-
负载均衡集群(Load Balancing Cluster, LBC):
-
作用:将大量的用户访问请求分摊给多台服务器处理,提高系统的整体响应速度和并发处理能力(LVS 属于此类)。
-
-
高性能计算集群(High Performance Computing Cluster, HPC):
-
作用:利用多台服务器的计算能力,进行复杂的科学计算、数据分析等任务(如大数据处理、天气预报模拟)。
-

三、LVS 的作用
1. 描述
LVS(Linux Virtual Server,Linux 虚拟服务器)是 Linux 内核自带的负载均衡软件。它的核心作用是在 Linux 操作系统上构建一个高性能、高可用的负载均衡集群。
-
负载均衡:将客户端的请求分发到后端多台真实服务器(RS)。
-
高可用性:当后端某台服务器宕机时,LVS 能够自动检测并将其剔除出集群,不影响整体服务。
-
性能提升:利用多台服务器分担请求,极大地提高了业务的并发处理能力。

四、LVS 的4种模式及原理
1. 描述
LVS 主要有四种工作模式:NAT、DR、TUN、FULLNAT。其中 DR 模式最常用。
(1)LVS-NAT(网络地址转换模式)
-
原理:客户端请求到达 LVS(调度器),LVS 修改请求报文的目标 IP 地址(VIP 改为 RIP),转发给后端 RS。RS 处理完毕后,将响应报文返回给 LVS,LVS 再将源 IP 改为 VIP 返回给客户端。
-
特点:请求和响应都必须经过 LVS,LVS 容易成为瓶颈。
(2)LVS-DR(直接路由模式)
-
原理:LVS 只修改请求报文的目标 MAC 地址,将请求直接转发给后端的 RS。RS 处理完毕后,直接将响应报文返回给客户端,不回传给 LVS。
-
特点:响应流量不经过 LVS,性能极高,是生产环境最常用的模式。要求 LVS 和 RS 必须在同一个物理网段。
(3)LVS-TUN(隧道模式)
-
原理:LVS 将请求报文通过 IP 隧道(IPIP)封装,转发给后端的 RS。RS 收到后解封装,处理请求,并直接返回响应给客户端。
-
特点:LVS 和 RS 可以不在同一个网段,支持跨网段调度,但开销较大。
(4)LVS-FULLNAT(完全 NAT 模式)
-
原理:在 NAT 基础上,不仅修改目标 IP,还修改源 IP(CIP 改为 LVS 的 IP)。这样确保了请求和响应都能正常返回 LVS,再转发给客户端。
-
特点:后端 RS 不需要配置网关指向 LVS,部署更灵活,但性能损耗较大。

2.步骤(DR 模式配置简要步骤)
-
步骤 1:在 LVS 调度器上配置 VIP(绑定在 lo 口或物理网卡上)。
-
步骤 2:在 LVS 上配置 ipvsadm 规则(设置 VIP 和调度算法)。
-
步骤 3:在 RS 服务器上配置 VIP 绑定到 lo 口(抑制 ARP 响应,防止 VIP 冲突)。
-
步骤 4:在 RS 服务器上配置内核参数
arp_ignore和arp_announce,禁止响应 VIP 的 ARP 请求。 -
步骤 5:验证访问,测试负载均衡效果。
五、LVS 的13种算法
1. 描述
LVS 的调度算法决定了调度器如何将新请求分配给后端的真实服务器(RS)。分为静态算法和动态算法两大类,共 13 种。
静态调度算法(4种):不考虑后端服务器的当前负载情况。
-
RR(轮询):按顺序轮流分配。
-
WRR(加权轮询):根据权重比例分配,权重高的服务器获得更多请求。
-
DH(目标地址哈希):根据请求的目标 IP 地址进行哈希分配,相同目标 IP 始终发给同一台 RS。
-
SH(源地址哈希):根据请求的源 IP 地址进行哈希分配,相同客户端 IP 始终发给同一台 RS(实现会话保持)。
动态调度算法(9种):根据后端服务器的实时负载情况动态分配。
-
LC(最小连接数):分配当前连接数最少的 RS。
-
WLC(加权最小连接数):在 LC 基础上加入权重,计算
(当前连接数 / 权重)最小的 RS 优先分配(LVS 默认算法)。 -
SED(最短期望延迟):计算
(当前连接数 + 1) / 权重,选取值最小的 RS。 -
NQ(永不排队):如果有空闲的 RS,直接分配;否则使用 SED 算法。
-
LBLC(基于本地的最少连接):针对目标 IP 的调度,尽量将相同目标 IP 的请求发给同一台 RS,但如果该 RS 过载,则找其他 RS。
-
LBLCR(带复制的本地最少连接):在 LBLC 基础上,如果某台 RS 负载过高,可以将其承载的部分目标 IP 复制到其他 RS。
-
DH(目标地址哈希,也属动态):注意不同版本的归类,有些将其归为基于目标地址的动态哈希。
-
SH(源地址哈希,也属动态):类似。
-
MQ(最低队列):LVS 内核较少直接使用。

(注:实际常说的 RR、WRR、LC、WLC、SH、DH 等是核心算法,13 种是统称)
六、LVS 的多端口轮询问题解决方案
1. 描述
问题:LVS 默认配置下,ipvsadm 只能针对单一端口进行调度。如果后端服务器同时运行了多个服务(如 Web 的 80 端口 和 HTTPS 的 443 端口),我们需要分别配置两条规则。如果服务端口数量非常多(例如几十个),手动配置会非常繁琐,且不容易维护。
解决方案与步骤(FWMARK 防火墙标记法)
-
步骤 1:使用 iptables 的
multiport模块,将多个需要调度的目标端口(如 80, 443)打上一个相同的防火墙标记(例如--set-mark 10)。 -
步骤 2:在 ipvsadm 中不绑定具体的端口,而是使用
-f参数绑定这个防火墙标记号(例如ipvsadm -A -f 10)。 -
步骤 3:添加后端真实服务器时,端口指定为
0(表示由标记决定)。 -
效果:一个规则管理了所有端口的流量,实现了多端口统一轮询。

七、LVS 的会话粘滞解决方案
1. 描述
问题:用户在访问网站时,通常会产生会话状态(Session),例如登录状态、购物车信息等。如果使用轮询(RR)等算法,用户第一次请求到了服务器 A,第二次请求被分发到了服务器 B,由于服务器 B 没有该用户的 Session,用户会被迫重新登录,导致体验极差。这就是“会话粘滞(Session Sticky)”问题。
2.解决方案与步骤
方案一:使用 LVS 的源地址哈希算法(SH)
-
步骤 1:在 LVS 配置中,将调度算法设置为
sh(Source Hashing)。 -
步骤 2:配置好后,同一个客户端 IP 的所有请求都会被哈希算法固定分发到同一台真实服务器上,从而保证 Session 不丢失。
-
缺点:如果该服务器宕机,用户的 Session 还是会丢失(虽然此时会切换到其他服务器)。
方案二:统一会话存储(Redis/Session 共享,更推荐)
-
步骤 1:在后端所有的 Web 服务器(如 Tomcat、PHP)中,不将 Session 存放在本地内存。
-
步骤 2:搭建一个独立的 Redis 或 Memcached 缓存集群。
-
步骤 3:将所有服务器的 Session 存储全部指向这个统一的 Redis 集群(如修改 Tomcat 的
context.xml配置)。 -
步骤 4:这样无论 LVS 将请求分配给哪一台 Web 服务器,服务器都能从同一个 Redis 中读取到用户的 Session 数据。
-
优点:彻底解决了 LVS 调度带来的会话问题,即使某一台服务器坏掉,用户的登录状态依然不受影响。


464

被折叠的 条评论
为什么被折叠?



