一、什么是集群
1. 定义
集群(Cluster):将多台独立的物理服务器 / 虚拟主机,通过网络组合成一个整体对外提供服务,对外表现为单一服务节点,对内由多台机器共同分担压力。
2. 核心价值
提升并发承载能力(性能扩容)
实现故障自动转移(高可用,一台宕机不影响整体)
横向无限水平扩展,性价比高于单台高配服务器
二、集群三大分类
1. 负载均衡集群 LB(Load Balance)
代表:LVS、Nginx、HAProxy
核心:请求分发,把用户流量按规则打散到后端多台 Real Server
目标:分担压力、提高吞吐量,解决单台服务器并发瓶颈
本次 LVS 属于此类集群
2. 高可用集群 HA(High Availability)
代表:Keepalived、Corosync+Pacemaker
核心:故障自动切换,消除单点故障
典型架构:主备(Master-Backup),主节点挂了备节点立刻接管 VIP
本次项目搭配 Keepalived+VRRP 实现 LVS 调度器高可用
3. 高性能计算集群 HPC(High Performance Computing)
代表:分布式计算、大数据集群
核心:把巨型计算任务拆分给多台服务器并行运算
多用于科学计算、渲染、大数据运算,Web 架构极少使用
三、LVS 是什么与作用
1. LVS 全称
Linux Virtual Server,Linux 虚拟服务器,由章文嵩博士开发,Linux 内核四层负载均衡模块(ipvs)。
2. 核心定位
工作在OSI 四层(传输层),基于 IP + 端口做转发,性能极强,百万级并发无压力,几乎不消耗 CPU 资源。
3. 主要作用
四层流量负载均衡,分发 TCP/UDP 请求到后端 RS 真实服务器;
配合 Keepalived+VRRP 实现调度器双机高可用,解决 LVS 单点故障;
构建大规模 Web 服务集群,支撑高并发访问;
屏蔽后端服务器真实 IP,提高内网安全性。
4. 架构角色固定名词
Director(调度器 / DS):LVS 所在机器(KA1、KA2),做流量分发;
Real Server(RS 后端真实服务器):提供业务服务节点(rs1、rs2);
VIP:虚拟浮动 IP,用户访问入口(172.25.254.100);
DIP:调度器内网物理 IP;
RIP:后端 RS 内网真实 IP。
四、LVS 四种工作模式原理(重点)
模式 1:DR 直接路由模式(本次项目使用,最常用)
原理
用户请求→VIP→Director,LVS 只修改二层 MAC 地址,目标 MAC 改为某一台 RS 网卡 MAC;
数据包通过交换机二层转发直达 RS;
RS 本地 lo 回环网卡绑定 VIP(/32 掩码)+ARP 内核抑制,接收数据包;
响应数据包不经过 Director,RS 直接网关回包给客户端。
优缺点
✅ 性能最高、Director 压力最小;
❌ 要求:DS 和 RS 必须在同一个局域网、同一 VLAN;RS 必须配置 lo 绑定 VIP+arp_ignore/arp_announce 参数。
本次项目配置要点
RS:lo.nmconnection 绑定172.25.254.100/32 + sysctl ARP 抑制四条参数。
模式 2:NAT 网络地址转换模式
原理
入站:Director 修改数据包目标 IP(VIP→RIP)转发给 RS;
出站:RS 回包必须经过 Director,修改源 IP(RIP→VIP)再发给客户端;
本质:依靠调度器做 SNAT+DNAT 双向地址转换。
优缺点
✅ 跨网段可用,RS 可以在不同子网,配置最简单;
❌ 所有返回流量都经过 DS,Director 容易成为瓶颈,并发上限低。
模式 3:TUN IP 隧道模式
原理
Director 在原有 IP 包外层封装一层新 IP 头(IPIP 隧道),发给 RS;
RS 内核解封装,取出内层数据包,发现目标是 VIP,处理请求;
响应包直接原路返回客户端,不经过 DS。
优缺点
✅ 支持跨公网、跨网段部署,RS 可以异地机房;
❌ 需要所有服务器开启 IPIP 隧道模块,配置复杂,公网环境有 MTU 问题。
模式 4:FULLNAT 完全 NAT 模式(内核较新版本支持)
原理
同时做:
入站:目的 IP VIP→RIP
入站:源 IP CIP→DIP
双向全部转换,请求和回包都经过 DS。
特点
可以实现客户端 IP 透传、跨网段,但是性能损耗最大,生产极少使用。
五、LVS 13 种调度算法(ipvsadm 调度策略)
分为静态算法(固定规则,不看后端状态)和动态算法(根据负载 / 连接数自动调整)
(一)静态算法 4 种
RR 轮询:请求挨个依次分发,平均分配,不考虑服务器性能差异;
WRR 加权轮询:给 RS 设置权重,权重越高分到请求越多(性能好机器权重拉高);
DH 目标地址哈希:同一客户端目标 IP 固定分配到同一台 RS;
SH 源地址哈希:同一客户端源 IP 固定调度到同一 RS(简易会话保持)。
(二)动态算法 9 种(推荐生产使用)
LC 最少连接:当前活跃连接数最少的 RS 优先调度;
WLC 加权最少连接(默认算法):带权重的最少连接,LVS 默认策略;
LBLC 基于本地的最少连接:目标 IP 做哈希,同时兼顾连接数;
LBLCR 带复制的 LBLC:缓存热点请求,减轻后端压力;
SED 最短期望延迟:计算公式(active+1)*256/weight,值越小越优先;
NQ 永不排队:空闲 RS 直接分配,无空闲再走 SED;
FO 流量均衡:根据上下行流量负载调度;
OVF 溢出调度:基于溢出阈值分发;
PEBLC:预测型最少连接,预判后端负载波动。
生产选型最简建议
服务器配置一致:RR / LC
服务器性能不同:WRR / WLC(最通用)
需要简单会话绑定:SH 源哈希
六、LVS 多端口轮询问题 & 解决方案
1. 问题描述
LVS 一个 VS 虚拟服务默认只能绑定单个端口,例如-A -t 172.25.254.100:80。
如果后端同时提供 80(HTTP)、443(HTTPS)、22(SSH)、3306(MySQL) 多端口服务,单条规则无法实现统一 VIP 访问。
解决方案:
1.在rs主机中同时开始http和https两种协议
[root@RS1 ~]# dnf install httpd -y
[root@RS1 ~]# systemctl restart httpd
[root@RS2 ~]# dnf install httpd -y
[root@RS2 ~]# systemctl restart httpd
2.在vsnode中添加https的轮询策略
(1)首先安装ipvsadm的安装包
(2)增加策略
-A:新增虚拟服务 VS
-t:TCP 协议
-s rr:轮询算法
-a:添加后端 RS
-r:后端真实服务器 IP
-g:DR 直接路由模式(Forward 列显示 Route,代表 DR)
1.创建 80 端口 VS 服务,轮询调度 rr,DR 模式 (-g)
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
2.创建 443 端口第二条 VS,同一组后端
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
3. ipvsadm -Ln输出结果
Route = DR 模式生效
Weight 权重都是 1,RR 轮询均分请求
ActiveConn/InActConn 为 0:暂无客户端访问,正常
[root@vsnode ~]# ipvsadm -Ln
以上配置解决了LVS 多端口轮询问题,多端口新建多条 VS 规则,最直观、最易维护的方案。
(3)当上述设定完成后http和https是独立的service,轮询会出现重复问题
(错误展示)
这种错误分两种情况
情况 A:你没有分开创建 80、443 两条 VS
如果你只配置了单一端口 VS(例如只做 80),自然不会出现这个现象。
情况 B:虽然两条 VS,但是测试命令不一样
截图测试命令:curl 192.168.0.200;curl -k https://192.168.0.200,就是连续发起 2 条独立连接
,2 次 TCP 连接,分别匹配 80、443 两个独立调度组
如果测试方式是:1. 反复只 curl http(只走 80 VS)→ 正常交替 RS1、RS2,看不到问题
2. 反复只 curl https(只走 443 VS)→ 正常交替 RS1、RS2,看不到问题
!只有一次 http + 一次 https 组合测试,才容易复现 “两次落在同一台 RS” 的 bug!
解决方案:使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载,把 VIP:80 和 VIP:443 合并成同一个调度服务,不再分开调度!
iptables mangle 表给访问 VIP 的 80、443 数据包统一打上标记 6666
[root@vsnode ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
ipvsadm 不基于端口创建 VS,基于 fwmark 创建 VS
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr
[root@vsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@vsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g
此时访问 80、443 流量进入同一个调度器,轮询统一管理,不会出现跨端口调度紊乱。
七、LVS 会话保持(会话粘滞)解决方案
1. 业务场景
登录状态、购物车、验证码依赖 Session,同一用户整个会话必须始终访问同一台 RS,否则登录失效。
2.解决方案会话粘滞解决方案
-p 超时时间:LVS 内核持久连接表,指定时间内同一客户端 IP 永远调度同一台 RS
属于四层原生会话保持,比 SH 源哈希更稳定,企业常用
注意:测试 1 秒太短,正式改为 -p 更多时间
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr -p 1
Service already exists
[root@vsnode ~]# ipvsadm -Ln
测试 [root@client ~]# curl 192.168.0.200
RS1 - 192.168.0.10
监控观察[root@vsnode ~]# watch -n 1 ipvsadm -Lnc