云原生高级课程第一次作业:lvs知识点梳理

一、什么是集群

集群:将多台独立的服务器节点通过网络组合为一个整体对外提供服务,对外表现为单一入口,对内实现请求分发、负载分担、故障冗余,以此提升服务并发承载能力、可用性与扩展性,解决单台服务器性能瓶颈、单点故障问题。

二、集群分类

1. 负载均衡集群
核心:调度器将用户请求分发到后端多台 Real Server,分摊访问压力,提升并发量,LVS 属于典型四层 LB 集群。
2. 高可用集群
核心:解决单点故障,主节点故障后备用节点自动接管服务,保证业务持续可用,如 Keepalived+LVS 组合。
3. 高性能计算集群
核心:将复杂计算任务拆分至多节点并行运算,多用于大数据、科学计算场景

三、LVS 作用介绍

lvs是内核态四层负载均衡调度模块:

  1. 工作在 TCP/IP 四层,基于 IP + 端口做请求转发,转发效率极高;
  2. 作为调度器,将客户端请求调度至后端真实服务器;
  3. 实现大规模 Web、数据库、中间件等服务的负载均衡,支撑高并发流量;
  4. 配合 Keepalived 实现调度器自身高可用,消除调度器单点故障。

架构简易图解

客户端 → LVS 调度器  → 后端多台RS集群

四、LVS 四种工作模式及原理

1. NAT 模式

 原理:

  • 入站:客户端请求到达LVS调度器后,调度器修改目标 IP 为后端 RS 内网 IP,转发请求;
  • 出站:RS 响应报文全部经过LVS调度器,修改源 IP 为调度器公网 IP 返回客户端;
  • 所有流量进出都经过调度器,调度器容易成为瓶颈。
  • 部署要求:RS 网关指向内网网卡。

2. DR 模式

原理:

  • 入站:LVS调度器仅修改请求报文 MAC 地址,将请求转发给同网段 RS;
  • 出站:RS 直接将响应报文绕过调度器,经由网关返回客户端;
  • 仅入站流量经过调度器,性能最优,支持大规模集群;
  • 部署要求:LVS调度器与 RS 在同一物理网段,RS 配置 VIP 在 lo 回环网卡抑制 ARP 广播。

3. TUN 模式

原理:

  • LVS调度器将请求报文封装在新 IP 隧道报文内,跨网段转发给 RS;
  • RS 解封装报文后处理请求,响应报文直接回包客户端;
  •  适用场景:调度器和后端服务器跨公网 / 不同网段部署。

4. FULLNAT 模式

 原理:

  • 同时转换报文源 IP + 目标 IP,调度器将客户端 IP 转换为调度器内网 IP 访问 RS;
  •  优势:RS 无需配置网关指向调度器,跨网段部署更灵活;内核原生 LVS 默认不支持,多为阿里定制内核扩展模式。

五、LVS 13 种调度算法分类

静态调度算法

  1. RR 轮询:请求依次按顺序分发到每台 RS
  2. WRR 加权轮询:根据权重分配请求,权重越高接收请求越多
  3. DH 目标地址哈希:基于客户端目标 IP 做哈希调度
  4. SH 源地址哈希:基于客户端源 IP 做哈希调度,固定用户访问固定 RS

动态调度算法

  1. LC 最少连接:将新请求分配给当前活跃连接最少的 RS
  2. WLC 加权最少连接:结合权重 + 活跃连接数分配,生产默认首选
  3. LBLC 基于本地的最少连接:针对缓存场景,优先将请求调度至本地缓存命中节点
  4. LBLCR 带复制的本地最少连接:在 LBLC 基础上增加缓存复制机制
  5. SED 最短期望延迟:计算 (当前连接数 + 1)/ 权重,数值最小优先调度
  6. NQ 永不排队:空闲 RS 优先分配请求,无空闲时使用 SED 算法
  7. FO 加权公平排队
  8. OVF 溢出调度
  9. Replicated 复制调度

六、LVS 多端口轮询问题 & 解决方案

一、原生 LVS 多端口存在的问题

默认ipvsadm基于 VIP + 端口创建VS集群服务。比如同时配置 VIP:80、VIP:443 两条独立 VS:

  1. 80 端口、443 端口两套调度表互相独立;
  2. 同一个客户端访问 80 分到 RS1,访问 443 可能分到 RS2;
  3. 业务出现问题:http 跳转 https 后会话丢失、登录失效;
  4. 无法实现跨端口统一调度、统一会话保持。

[root@vsnode boot]# ipvsadm -A -t 192.168.0.200:80  -s rr
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
[root@vsnode boot]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
[root@vsnode boot]# 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.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   1      0          0
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0
  -> 192.168.0.20:443  

#在调度器上配置两个端口

在客户端测试:

[root@client ~]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20

RS2 - 192.168.0.20

#出现了轮询重复的现象

二、防火墙标记实现原理

  1. 在调度器 Director 的iptables mangle表 PREROUTING链,对访问 VIP 的多个端口报文打上同一个数字标记;
  2. LVS 不再基于VIP:端口创建 VS,改用ipvsadm -f 标记号,基于防火墙标记创建集群服务;
  3. 所有带有相同标记的报文(80/443/8080 等)共用同一套调度规则、同一 RS 列表、同一会话持久策略;
  4. 多端口流量纳入统一调度体系,实现跨端口一致性调度。

[root@vsnode boot]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark  6666

[root@vsnode boot]# ipvsadm -A -f 6666 -s rr
[root@vsnode boot]# ipvsadm  -a -f 6666 -r 192.168.0.10 -g
[root@vsnode boot]# ipvsadm  -a -f 6666 -r 192.168.0.20 -g

在客户端检测:

[root@client ~]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS1 - 192.168.0.10

七、LVS 会话粘连解决方案

方案:利用持久连接实现会话粘连

1、设定 ipvs 调度策略

[root@vsnode ~]# ipvsadm -A -f 6666 -s rr -p 1

查看规则:

[root@vsnode ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  6666 rr persistent 1
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0  

2、测试

客户端持续访问 VIP:

[root@client ~]# curl  192.168.0.200
RS1 - 192.168.0.10
[root@client ~]# curl  192.168.0.200
RS1 - 192.168.0.10

实验现象:虽然调度算法是轮询 rr,同一客户端在超时时间内持续访问,请求始终分配至 RS1,不会切换后端节点。持久连接优先级高于调度算法。

3、连接观测

[root@vsnode ~]# watch -n 1 ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:56  FIN_WAIT    172.25.254.99:42420 192.168.0.200:80   192.168.0.20:80
IP  00:57  ASSURED     172.25.254.99:0    0.0.26.10:0        192.168.0.20:0
TCP 01:54  FIN_WAIT    172.25.254.99:46216 192.168.0.200:80   192.168.0.20:80
TCP 01:55  FIN_WAIT    172.25.254.99:46222 192.168.0.200:80   192.168.0.20:80

通过观察连接表: 客户端多条 TCP 业务连接处于 FIN_WAIT 关闭状态,同时存在一条状态为 ASSURED 的 IP 类型条目。ASSURED 为持久连接模板条目,由-p参数生成。只要该条目未超时,相同源 IP 发起的所有请求,都会固定调度至同一后端服务器。 端口全部显示为 0、协议类型显示 IP,是使用防火墙标记(-f)创建 VS 的典型特征。TCP 业务连接可以正常释放,但持久连接条目独立计时,持续维持会话绑定,以此实现会话粘连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值