一、什么是集群
集群:将多台独立的服务器节点通过网络组合为一个整体对外提供服务,对外表现为单一入口,对内实现请求分发、负载分担、故障冗余,以此提升服务并发承载能力、可用性与扩展性,解决单台服务器性能瓶颈、单点故障问题。
二、集群分类
1. 负载均衡集群
核心:调度器将用户请求分发到后端多台 Real Server,分摊访问压力,提升并发量,LVS 属于典型四层 LB 集群。
2. 高可用集群
核心:解决单点故障,主节点故障后备用节点自动接管服务,保证业务持续可用,如 Keepalived+LVS 组合。
3. 高性能计算集群
核心:将复杂计算任务拆分至多节点并行运算,多用于大数据、科学计算场景
三、LVS 作用介绍
lvs是内核态四层负载均衡调度模块:
- 工作在 TCP/IP 四层,基于 IP + 端口做请求转发,转发效率极高;
- 作为调度器,将客户端请求调度至后端真实服务器;
- 实现大规模 Web、数据库、中间件等服务的负载均衡,支撑高并发流量;
- 配合 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 种调度算法分类
静态调度算法
- RR 轮询:请求依次按顺序分发到每台 RS
- WRR 加权轮询:根据权重分配请求,权重越高接收请求越多
- DH 目标地址哈希:基于客户端目标 IP 做哈希调度
- SH 源地址哈希:基于客户端源 IP 做哈希调度,固定用户访问固定 RS
动态调度算法
- LC 最少连接:将新请求分配给当前活跃连接最少的 RS
- WLC 加权最少连接:结合权重 + 活跃连接数分配,生产默认首选
- LBLC 基于本地的最少连接:针对缓存场景,优先将请求调度至本地缓存命中节点
- LBLCR 带复制的本地最少连接:在 LBLC 基础上增加缓存复制机制
- SED 最短期望延迟:计算 (当前连接数 + 1)/ 权重,数值最小优先调度
- NQ 永不排队:空闲 RS 优先分配请求,无空闲时使用 SED 算法
- FO 加权公平排队
- OVF 溢出调度
- Replicated 复制调度
六、LVS 多端口轮询问题 & 解决方案
一、原生 LVS 多端口存在的问题
默认ipvsadm基于 VIP + 端口创建VS集群服务。比如同时配置 VIP:80、VIP:443 两条独立 VS:
- 80 端口、443 端口两套调度表互相独立;
- 同一个客户端访问 80 分到 RS1,访问 443 可能分到 RS2;
- 业务出现问题:http 跳转 https 后会话丢失、登录失效;
- 无法实现跨端口统一调度、统一会话保持。
[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.20RS2 - 192.168.0.20
#出现了轮询重复的现象
二、防火墙标记实现原理
- 在调度器 Director 的
iptables mangle表 PREROUTING链,对访问 VIP 的多个端口报文打上同一个数字标记; - LVS 不再基于
VIP:端口创建 VS,改用ipvsadm -f 标记号,基于防火墙标记创建集群服务; - 所有带有相同标记的报文(80/443/8080 等)共用同一套调度规则、同一 RS 列表、同一会话持久策略;
- 多端口流量纳入统一调度体系,实现跨端口一致性调度。
[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 业务连接可以正常释放,但持久连接条目独立计时,持续维持会话绑定,以此实现会话粘连。
1456

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



