一、集群和分布式
1、什么是集群
集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统
2、集群的类型
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
HA:High Availability (高可用)消除单点故障,保障服务持续运行
HPC:High Performance Computing (高性能计算)大规模并行运算
3、分布式
将一个完整业务拆分为多个子服务,各服务器功能不同;所有节点组合才构成完整业务,单一子节点故障会导致对应功能失效。
分布式存储:Ceph、GlusterFS、FastDFS
分布式计算:Hadoop、Spark
分布式应用:微服务架构
二、LVS的作用
LVS(Linux Virtual Server),即Linux虚拟服务器,是由中国开发者章文嵩博士发起的一个开源项目,现已成为Linux内核的一部分。
LVS的核心作用是作为一个四层(传输层)负载均衡器。它工作于Linux内核中,通过修改数据包的目标地址或端口,将客户端的请求按照特定的算法分发给后端的真实服务器(Real Server),从而实现一个高可用、高性能的虚拟服务器集群。
LVS的四个优点
1.高性能:直接工作在内核空间,处理网络包的效率极高,远超Nginx等七层代理。
2.高可靠:可与Keepalived结合实现调度器自身的高可用。
3.低成本:使用廉价的普通服务器即可构建强大的集群系统。
4.透明性:对客户端而言,它访问的只是一个单一的IP地址(VIP),后端复杂集群是透明的。
三、LVS的四种工作模式及原理
1. NAT模式(网络地址转换)
原理:类似DNAT技术。调度器(Director)接收客户端请求,根据算法选择一台Real Server,将请求报文的目标IP和端口改为Real Server的IP和端口,然后转发。Real Server处理完响应后,将数据包返回给调度器,调度器再将源IP修改为VIP,返回给客户端。
特点:所有请求和响应都经过调度器,调度器易成瓶颈。RS可以使用私有IP,更安全。支持端口映射。
2. DR模式(直接路由)
原理:这是最常用的模式。调度器接收请求后,不修改IP首部,只通过修改数据帧的目标MAC地址,将请求在局域网内直接转发给选中的Real Server。Real Server处理完请求后,直接将响应发送给客户端,不再经过调度器。
关键点:Real Server必须在回环接口(lo)上配置VIP,并抑制ARP响应,避免与调度器冲突。
特点:性能极高,请求报文经由调度器,响应报文直接返回客户端。但要求调度器和RS必须在同一物理网段。
3. TUN模式(IP隧道)
原理:调度器接收请求后,将原始IP报文封装在一个新的IP报文中,新报文的源IP是DIP,目标IP是RIP。Real Server收到后解封装,处理请求,并将响应直接发送给客户端。
特点:解决了DR模式要求同网段的限制,RS可以部署在不同的地理位置。但需要RS支持IP隧道协议,配置稍复杂。
4. FULLNAT模式
原理:作为NAT模式的增强版,它同时转换了源IP和目的IP。调度器将请求的源IP(CIP)转换为自己的本地IP(DIP),目标IP(VIP)转换为RIP。RS的响应包回到调度器,调度器再做相反的转换。
特点:解决了NAT模式要求RS网关指向调度器的限制,使得LVS和RS可以跨网段部署,便于大规模水平扩展。但性能比NAT模式稍有下降。
四、LVS的13种调度算法
1.LVS调度算法类型
2.LVS静态调度算法
RR 轮询:请求均匀循环分配,所有 RS 性能一致时使用
WRR 加权轮询:配置权重,高性能服务器分配更多请求
SH 源 IP 哈希:同一客户端 IP 永久调度同一 RS,原生会话保持
DH 目标 IP 哈希:同一目标 IP 固定 RS,缓存代理场景提升命中率
3.LVS动态调度算法
LC 最小连接:无权重,仅看连接数
WLC 加权最小连接:官方默认算法,适配混合配置服务器
SED 最短预期延迟:(活跃连接+1)/权重,优先空闲高权重节点
NQ 永不排队:有空闲节点直接分配,无空闲退化为 SED
LBLC 本地最少连接:目标 IP 优先原节点,负载过高则分流
LBLCR 带复制 LBLC:缓存集群专用,均衡目标 IP 负载
FO 加权故障转移:按权重遍历,分配给第一个未过载节点,灰度发布使用
OVF 溢出调度:高权重服务器连接达阈值后,新请求溢出至次一级节点
BLLC 平衡本地最少连接:优化 LBLC 负载倾斜问题
三、LVS部署的相关命令
首先部署环境
安装软件包
对于相关命令的使用
管理集群中RealServer的增删改查
增加
修改
删除
四、lvs的多端口轮询问题解决方案
问题描述:以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
解决方案:防火墙标记解决轮询调度问题
通过Linux的iptables工具,在mangle表中为需要“捆绑”的端口(如80和443)打上相同的防火墙标记。然后,LVS不再基于端口号,而是基于这个防火墙标记(FWM)来创建虚拟服务。这样,所有带着相同标记的请求(无论来自哪个端口),都会被LVS当作同一个服务来处理,并始终调度到同一台后端服务器。
配置步骤:
打标记:给80和443端口打上6666的标记
设定调度规则
五、lvs的会话粘滞解决方案
问题描述
在无状态的负载均衡环境下,一个用户连续的操作如果被分发到了不同的服务器,会导致其会话状态丢失。解决这个问题的手段称为“会话粘滞”或“持久连接”。
解决方案
LVS提供了三种主要的解决途径:
方案一:源地址哈希(SH)算法
原理:使用-s sh算法,LVS会根据客户端的源IP地址计算哈希值,将来自同一源IP的所有请求都定向到同一台Real Server。
优点:实现简单。
缺点:如果大量用户来自同一个NAT网关(即源IP相同),会导致负载严重不均。
方案二:LVS持久连接(Persistent Connection)
原理:在创建虚拟服务时添加-p参数并指定超时时间。在超时时间内,来自同一个客户端的任何新连接(即使源端口变化)都会被定向到之前选择的同一台Real Server上。
优点:可以很好地处理HTTP和HTTPS两种端口的问题,效果比SH算法更好。
方案三:防火墙标记(FWMARK)结合持久连接
这是解决多端口轮询问题与会话粘滞需求的终极方案。它先通过防火墙标记将多个端口“捆绑”,然后在此标记上同时应用持久连接策略。
通过这种方式,无论用户访问的是HTTP还是HTTPS,在设定的超时时间内,他的所有请求都会稳定地落在同一台Real Server上,完美解决了会话保持和多端口轮询的难题。
六、总结
LVS作为Linux内核级的高性能负载均衡器,是现代高并发、高可用架构的重要基石。理解其集群分类、四种工作模式的原理与优劣、十三种调度算法的应用场景,并掌握解决多端口轮询和会话粘滞问题的实战方法,是构建稳定、高效的网络服务集群的必备技能。