一、LVS
(一)实验环境
|---------|-----------|
| 主机名 | 角色 |
| server1 | 调度器(VS) |
| server2 | 真实服务器(RS) |
| server3 | 真实服务器(RS) |
| server4 | 测试机 |
(二)集群和分布式简介
1.系统性能扩展方式
Scale UP(纵向扩展):通过升级单台服务器的硬件配置(如增加CPU核心数、扩大内存容量、更换高性能存储)来提升系统处理能力,这种方式无需改变应用架构、实施简单,但受限于硬件物理上限且成本随性能提升呈指数级增长。
Scale Out(横向扩展):通过增加更多的服务器节点并将它们组成集群来共同分担工作负载,借助负载均衡技术解决请求调度分配问题,这种方式理论上可实现无限扩展、成本可控,是构建大规模高并发系统的核心架构模式。
2.集群
(1)核心概念
集群(cluster)是将一组独立的计算机(节点)通过高速网络连接起来,协同工作,对外表现为一个单一、强大的系统。其主要目的是为了解决单台计算机无法应对的高负载、高并发或高可用性问题。
(2)常见类型
负载均衡集群(LB)
核心目标:扩展性(Scalability) 和 高并发。
工作原理:有一个前端调度器(负载均衡器)负责将海量的用户请求,根据预设的算法(如轮询、最少连接、IP哈希等)分发到后端的多个真实服务器上。每个服务器都运行相同的应用,处理自己分配到的那部分请求。
优点:本系统通过并行处理机制显著提升了整体吞吐能力,同时支持水平扩展,在面对压力增大时,只需增加后端服务器数量即可轻松应对,无需改动现有架构。
高可用集群(HA)
核心目标:可靠性和不间断服务
工作原理:通常采用主备模式。一台主服务器提供服务,一台或多台备用服务器通过心跳线实时监测主服务器的状态。一旦主服务器发生故障(如宕机、网络中断),备用服务器会立即接管其IP地址、服务等资源,继续为用户提供服务,整个过程对用户基本是透明的。
优点:可用性是衡量系统持续提供正常服务的能力。
可用性 = MTBF / (MTBF + MTTR)
MTBF------ 平均无故障时间,正常时间
MTTR------ 平均恢复前时间,故障时间
SLA(服务等级协议) 是服务提供商对用户做出的服务可用性承诺,通常用"几个9"来表示------
99% (两个9): 一年允许宕机时间约 87.6 小时。
99.9%(三个9): 一年允许宕机时间约 8.76 小时。
99.99%(四个9): 一年允许宕机时间约 52.6 分钟。
99.999%(五个9): 一年允许宕机时间约 5.26 分钟。
运维工作的重要目标就是通过各种手段(冗余、监控、自动切换)来尽可能减少计划外停机时间,从而达成 SLA 中承诺的高可用性指标。
高性能计算集群(HPC)
核心目标:强大计算能力
工作原理:将集群中所有节点的计算能力聚合起来,并行解决单个计算机无法完成的超大规模计算问题。它将一个巨大的计算任务分解成无数个小块,然后分配给集群中的每个节点去计算,最后再将结果汇总。
3.分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用:
分布式应用------服务按照功能拆分,使用微服务
分布式静态资源------静态资源放在不同的存储集群上
分布式数据和存储------使用 key-value 缓存系统
分布式计算------对特殊业务使用分布式计算,比如 Hadoop 集群
4.集群和分布式区别
集群:
是将多台服务器集中起来共同完成同一个业务。每台服务器运行着完全相同的代码、处理相同的数据,彼此之间是对等的。它的核心工作原理是分工不分家------通过负载均衡器将海量用户请求分散到不同的机器上处理。集群主要解决高并发和可用性问题:一方面通过增加机器数量提升单位时间内处理的任务总数;另一方面通过冗余实现故障自动切换,单台机器宕机不影响整体服务。
分布式:
是将一个完整的业务系统按照功能拆分成多个不同的子业务,分别部署在不同的服务器上。每台服务器各司其职,运行着不同的代码、处理不同的数据,只有组合起来才能提供完整的服务。分布式主要解决复杂业务解耦和计算加速问题:通过将一个大型任务拆分成多个并行处理的小任务,缩短单个任务的执行时间。但这也带来了更高的复杂性------任何一个节点故障,都可能导致整个业务流程中断。
(三)LVS 运行原理
1.简介
LVS(Linux Virtual Server)是由章文嵩博士开发、现已成为 Linux 内核标准模块的高性能、高可用负载均衡集群技术。其核心作用是在 Linux 内核层实现请求流量的智能分发,将前端访问均匀调度至后端多台真实服务器(Real Server)上,从而显著提升整体服务的并发处理能力和系统可用性。作为内核级解决方案,LVS 具备高吞吐量、低延迟、高可靠性等优势,广泛应用于大型网站、数据中心等需要高并发访问的场景。
它由两个核心角色组成:
VS(Virtual Server,虚拟服务器) 负责接收并调度用户请求;
RS(Real Server,真实服务器) 负责实际处理业务请求。
LVS是阿里云 SLB(Server Load Balancer)的底层基础,通常与 Keepalived 结合实现高可用架构。官网:http://www.linuxvirtualserver.org/
2.集群体系结构
LVS 采用 VS/RS 双层架构 工作:
客户端请求入口:所有用户的请求首先到达 VS(Director Server,调度器)。VS 对外提供一个虚拟 IP(VIP)提供服务,它负责检查请求报文的目标 IP 和端口。
调度转发:VS 根据预设的调度算法(如轮询、最少连接等),从后端的 RS(Real Server,真实服务器) 列表中选择一台最合适的节点。
报文修改与分发:VS 通过修改请求报文的目标 MAC 地址(或 IP 地址,取决于工作模式),将请求转发给选中的 RS。
响应处理:RS 处理完请求后,将响应数据直接(或经过 VS)返回给客户端。整个过程对客户端透明,客户端始终只与 VIP 交互。
3.核心术语
CIP(Client IP):客户端的源 IP 地址
VIP(Virtual IP):虚拟服务器 IP,对外提供服务,供客户端访问
DIP(Director IP):调度器内网 IP,用于 VS 与 RS 之间的通信
RIP(Real Server IP):真实服务器 IP,实际处理业务请求
访问流程:CIP <--> VIP == DIP <--> RIP(CIP 访问 VIP 进入集群,VS 通过 DIP 将请求转发给选中的 RIP,实现内外网隔离与请求调度。)
4.工作模式
(1)核心原理
LVS-NAT(网络地址转换模式)
原理:修改请求报文的目标 IP 地址(从 VIP 改为选中的 RIP),本质是多目标 IP 的 DNAT
特点:请求和响应报文都必须经过 VS,VS 成为瓶颈
LVS-DR(直接路由模式)
原理:操纵封装新的 MAC 地址,VS 只修改请求报文的目标 MAC 地址为 RS 的 MAC
特点:响应报文由 RS 直接返回客户端,性能最好,最常用
LVS-TUN(IP隧道模式)
原理:在原请求 IP 报文之外新加一个IP首部,通过隧道将报文转发给 RS
特点:支持跨网段部署,RS 需要有隧道支持
LVS-FULLNAT(全地址转换模式)
原理:同时修改请求报文的源 IP 和目标 IP(CIP修改为DIP,VIP修改为RIP)
特点:VS 可完全代理连接,但需记录连接状态
(2)NAT 模式数据逻辑
LVS-NAT 模式的工作流程:始于客户端发送访问请求,数据包中包含来源 CIP 和目标 VIP 及端口(如VIP:9000)。VS 服务器接收到请求后,通过 DNAT 转换将数据包中的目标地址由 VIP:9000修改为选中的 RS 的 RIP 及相应端口(如RIP:9000port),然后将请求转发给 RS。RS 处理完成后发送响应数据包,包中来源为 RIP、目标为 CIP 及相应端口。VS 服务器再次拦截响应包,通过SNAT 转换将数据包来源由 RIP 修改为 VIP,并将目标端口从9000修改为80(或其他服务端口),最终将修改后的响应包回传给客户端。整个过程中,客户端始终只感知与 VIP 的交互,对后端 RS 的切换和转换完全透明。
LVS-NAT 模式的核心特点是:请求和响应报文都必须经过 VS 调度器,这意味着所有流量汇聚于 VS,虽然实现简单,但在高并发场景下 VS 极易成为系统性能瓶颈,尤其在响应流量远大于请求流量时更为明显。
关于 LVS 的部署有一个至关重要的注意事项:IPVS 的工作点位于 PREROUTING 和 INPUT 链之间,当访问请求通过 PREROUTING 链后,会被 IPVS 直接拦截并进行 NAT 转发,而不会进入本机 INPUT 链。因此,如果在 PREROUTING 链中配置了 iptables 规则,会严重干扰 IPVS 的正常工作,导致调度异常或转发失败。基于这一原理,在生产环境配置 LVS 时,必须提前清空所有 iptables 防火墙策略,避免规则冲突影响 LVS 的稳定运行。
(3)DR 模式数据逻辑
LVS-DR(直接路由)模式的核心优势在于响应流量不经过调度器,从而大幅提升集群性能。其数据传输逻辑是:客户端发送数据帧给VS调度主机,帧中包含客户端 IP +客户端 MAC+VIP+VIP 的 MAC;VS接收到数据帧后,仅修改帧中的目标MAC地址为选中的RS1的MAC(数据变为:客户端 IP +客户端 MAC+VIP+RS1 的 MAC),而不修改目标 IP;RS1 接收到这个帧后,直接处理请求并将响应数据包回传给客户端,响应包内容为 VIP+RS1 的 MAC +客户端 IP +客户端 IP 的 MAC,整个过程 VS 只负责请求分发,响应由 RS 直接返回。
DR 模式有以下几个显著特点:
VIP 配置要求:Director 和各 RS 上都配置有相同的 VIP,这是 RS 能够直接响应客户端请求的基础
请求定向机制:必须确保前端路由器将目标 IP 为 VIP 的请求报文全部发往 Director,而不能发往 RS。这有两种实现方式:
在前端网关做静态绑定,将 VIP 和 Director 的 MAC 地址绑定
在 RS 上使用 arptables 工具限制 ARP 响应:
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s VIP -j mangle --mangle-ip-s RIP
更推荐的方式是修改RS的内核参数,调整ARP通告及应答级别:
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
网络与路由限制:
RS 的 RIP 可以使用私网地址或公网地址,但必须与 DIP 在同一物理网络
RIP 的网关绝对不能指向 DIP,否则 RS 响应时会走 DIP 回传,破坏 DR 模式的设计初衷
RS 和 Director 必须在同一个物理网络(同一广播域)
功能限制与优势:
不支持端口映射------VS 转发时只能修改 MAC 地址,不能修改端口号,因此 RS 的服务端口必须与 VIP 的端口一致
广泛兼容性------RS 可使用大多数操作系统,对后端服务器没有特殊要求
高性能------请求经由 Director,响应直接由 RS 返回客户端,大幅减轻 Director 负载
(4)TUN 模式数据逻辑
LVS-TUN 模式通过 IP 隧道技术实现跨网段的请求转发,其核心优势是允许 Director 和 RS 不在同一物理网络。数据传输过程如下:客户端发送请求数据包(源 IP 为 CIP,目标 IP 为 VIP)到达 VS 调度器;VS 不修改原始请求报文,而是在原 IP 报文之外重新封装一个 IP 首部,新首部的源 IP 为 DIP、目标 IP 为选中的 RS 的 RIP,然后通过隧道发送给 RS1;RS1 收到后解封装,取出原始请求报文进行处理,生成的响应报文包含源 IP 为 VIP、目标 IP 为 CIP,响应数据包直接通过路由网络回传给客户端,完全不经过 Director。
TUN模式具有以下几个显著特点:
地址要求:DIP、VIP、RIP 都必须配置公网地址,因为隧道封装后的报文需要在公网路由
路由限制:RS 的网关一般不能指向 DIP,确保响应报文直接返回客户端,避免经过 Director 破坏性能优势
流量路径:请求报文经由 Director 封装转发,但响应报文由 RS 直接返回客户端,实现请求响应分离
功能限制:不支持端口映射,VS 无法修改服务端口,RS 的服务端口必须与 VIP 端口一致
系统要求:RS 的操作系统必须支持隧道功能(通常需要加载IP隧道模块),对 OS 有特定要求
(5)FULLNAT 模式数据逻辑
LVS-FULLNAT 模式通过同时修改请求报文的源 IP 和目标 IP(CIP→DIP,VIP→RIP)实现转发,其核心特点是:VIP 使用公网地址对外服务,而 RIP 和 DIP 可使用私网地址且无需在同一网络,RS 收到请求后直接响应给 DIP,但请求和响应报文都需经过 Director 导致性能瓶颈;该模式支持端口映射,部署灵活性高,但内核默认不支持,需安装补丁或使用商业版实现。
(6)重要工作模式总结
|--------------|-----------|-------|--------|
| | NAT | TUN | DR |
| RS操作系统 | 不限 | 支持隧道 | 禁用 arp |
| 调度器和服务器网络 | 可跨网络 | 可跨网络 | 不可跨网络 |
| 调度服务器数量服务器数量 | 少 | 多 | 多 |
| RS服务器网关 | 指向到调度器DIP | 指向到路由 | 指向到路由 |
nat 与 fullnat:请求和响应报文都经由 Director
nat:RIP 的网关要指向 DIP
fullnat:RIP 和 DIP 未必在同一 IP 网络,但要能通信
dr 与 tun:请求报文要经由 Director,但响应报文由 RS 直接发往 Client
dr:通过封装新的 MAC 首部实现,通过 MAC 网络转发
tun:通过在原 IP 报文外封装新 IP 头实现转发,支持远距离通信
5.调度算法
(1)类型
IPVS 调度器根据是否考虑后端真实服务器(RS)的当前负载状态,分为以下两种类型:
静态调度方法:仅依据预设的算法规则进行调度,完全不考虑 RS 当前的负载情况。
典型的静态算法包括:轮询(RR)、加权轮询(WRR)、源地址哈希(SH)、目标地址哈希(DH)等。
动态调度方法:在调度时会根据 R S当前的负载状态进行计算,通常通过开销值(Overhead)来衡量,选择开销值较小的 RS 进行调度。
典型的动态算法包括:最少连接(LC)、加权最少连接(WLC)、最短期望延迟(SED)、永不排队(NQ)等。
(2)静态
RR:轮询 RS 分别被调度,当 RS 配置有差别时不推荐
WRR:加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少
SH:实现 session sticky,源 IP 地址 hash;将来自于同一个 IP 地址的请求始终发往第一次挑中的 RS,从而实现会话绑定
DH:目标地址哈希,第一次轮询调度至 RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的 RS,典型使用场景是正向代理缓存场景中的负载均衡,如宽带运营商
(3)动态
LC:least connections(最少链接发)
适用于长连接应用 Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)
WLC:Weighted LC(权重最少链接)
默认调度方法 Overhead=(activeconns x 256+inactiveconns)/weight
SED:Shortest Expection Delay
初始连接高权重优先 Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当 node1 的权重为1,node2 的权重为10,经过运算前几次的调度都会被 node2 承接
NQ:Never Queue
第一轮均匀分配,后续 SED
LBLC:Locality-Based LC
动态的 DH 算法,使用场景:根据负载状态实现正向代理
LBLCR:LBLC with Replication
带复制功能的 LBLC,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的 RS
(4)新增调度算法
FO(Weighted Fail Over)算法是一种静态加权调度策略,常用于灰度发布场景。其核心逻辑是:
VS遍历RS链表,选择未过载(未设置IP_VS_DEST_F_OVERLOAD标志)且权重最高的RS进行调度。当某RS需要承接大量链接或进行维护时,可手动对其设置过载标记,VS将自动停止向其调度新连接,实现优雅下线。
OVF(Overflow-Connection)算法是一种基于活动连接数与权重的动态调度策略。其调度规则是:
优先将新连接分配给权重最高且未过载的RS,但增加了一个关键约束------该RS的当前活动连接数必须小于其权重值。当权重最高的RS连接数达到权重上限后,VS自动将流量切换到下一个满足条件的RS。
一个RS被选中的前提是:未过载、权重不为零、活动连接数小于权重值。
(四)LVS 部署命令介绍
1.LVS 软件相关信息
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
2.ipvsadm 命令
管理集群服务
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
-s scheduler(调度算法)\] \\ \[-p \[timeout\]\] \\ \[-M netmask\] \\ \[--pepersistence_engine\] \\ \[-b sched-flags
ipvsadm -D -t|u|f service-address 删除
ipvsadm --C 清空
ipvsadm --R 重载
ipvsadm -S [-n] 保存
管理集群中的 real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)
ipvsadm -d -t|u|f service-address -r server-address 删除RS
ipvsadm -L|l [options] 查看rs
ipvsadm -Z [-t|u|f service-address] 清除计数器
3.增删改命令
(1)管理集群服务中的增删改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A #添加
-E #修改
-t #tcp服务
-u #udp服务
-s #指定调度算法,默认为WLC
-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f #firewall mask 火墙标记,是一个数字

(2)管理集群中 RealServer 的增删改
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息



pvs规则:/proc/net/ip_vs
ipvs连接:/proc/net/ip_vs_conn
(五)实战案例
1.部署 NAT 模式集群案例
(1)要求
Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端 Web 服务器相连
Web 服务器采用仅主机网卡与 Director 相连
Web 服务器网关指向 192.168.220.100
后端 web 服务器不需要连接外网
(2)实验环境
|--------|---------|----------------------------------------------------|-----------------------------------------------------------------------------------------|
| 主机名 | 角色 | IP | 作用 |
| vsnode | 调度器(VS) | eth0:192.168.220.100(dip) eth1:172.168.75.100(vip) | dip:内网通信地址,用于与 RS1、RS2 交互,接收 RS 的响应状态,转发客户端请求给 RS vip:对外服务的虚拟 IP,客户端访问的目标地址,配置在调度器上接收请求 |
| RS1 | 服务器(RS) | eth0:192.168.220.10(rip) | 实际处理业务的服务器1,需在loopback 接口配置 VIP并抑制 ARP |
| RS2 | 服务器(RS) | eth0:192.168.220.20(rip) | 实际处理业务的服务器2,需在loopback 接口配置VIP并抑制ARP |
在 RS1 和 RS2 中安装 WEB 服务器并启动:




分别导入两个页面:


用 vsnode 进行访问,测试是否对 RS 可达:

给 RS1 和 RS2 设定网关(命令是一样的):

(3)NAT 模式实现步骤
下载:

开启内核路由功能:

编写策略:

测试1:

更改权重:

测试2:

(4)规则持久化
保存已设定好的规则,重启后能继续用。
利用自定义文件进行持久化:

利用守护进程进行规则持久化:

2.部署 DR 模式集群案例
(1)实验环境
|--------|--------|----------------------------------------------------|------------------------------------------------------------------------------------------------------|
| 主机名 | 角色 | IP | 作用 |
| router | 路由器/网关 | eth0:172.168.75.100(vip) eth1:192.168.220.100(dip) | vip:充当客户端与集群之间的路由器,负责将目标 IP 为 VIP 的请求路由到调度器。eth0 配置了VIP,对外接收客户端请求。 dip:作为调度器的网关,连接内网 RS,转发经调度的请求给 RS |
| vsnode | 调度器 | eth0:192.168.220.50(dip) | 真正的 LVS 调度器。通过此 IP 与内网的 RS1、RS2 通信,接收来自router 的请求并根据算法调度给后端 RS。 |
| RS1 | 服务器 | eth0:192.168.220.10(rip) | 处理实际业务的服务器1。必须配置VIP(通常配置在 lo 回环接口上,此处未显示配置命令,但 DR 模式要求 RS 有 VIP),直接响应客户端。 |
| RS2 | 服务器 | eth0:192.168.220.20(rip) | 处理实际业务的服务器2。同样需要配置 VIP(在 lo 接口),直接响应客户端。 |
| client | 客户端 | eth0:172.168.75.99(cip) | 模拟互联网用户,发送请求到 VIP |
(2)DR 模式实现步骤
路由器
清空原有策略,并重新开启内核路由:

数据转发策略:

调度器
编辑网络文件:




激活:


客户端



检测:

RS1
配置网关并激活(同上一个实验)
在lo上设定vip:



arp 禁止响应:

RS2
与 RS1 步骤相同

禁止 arp 响应(与 RS1 一样)
测试
能否互相 ping 通:



3.防火墙标签解决轮询错误
在 RS 两台主机中同时开始 http 和 https 两种协议:


在 vsnode 中添加 https 的轮询策略:

轮询错误展示(当上述设定完成后 http 和 https 是独立的 service,轮询会出现重复问题):

解决方案(使用火墙标记访问 vip 的80和443的所有数据包,设定标记为6666,然后对此标记进行负载):

