一. 集群的定义
集群就是将一组独立服务器组合成为整体对外提供服务。分为负载均衡、高可用和高性能。
二.集群的分类
1.负载均衡集群 LB
作用:将流量分摊到多台后端节点,分担压力,提升并发吞吐量
核心目标:提高并发访问的能力,附带故障容错
代表软件:LVS、Nginx、HAProxy
算法:轮回、加权轮询、最小链接等
2.高可用集群 HA
作用:解决单点故障,机器宕机自动切换,减少服务中断时间
特点:两台同时工作,故障互相接管
核心目标:减少宕机时间,保证服务不中断
代表软件:Keepalived、Pacemaker+Corosync
3.高性能计算集群
作用:提升计算速度,处理海量运算
场景:气象仿真、大数据运算
三.LVS的作用
LVS是Linux内核实现的四层负载均衡,作用是将客户端TCP\UDP请求,按照调度算法分发到多台后端Real-Server,实现流量负载均衡,提高集群并发能力
四.LVS四种模式及原理
1.DR直接路由:客户请求VIP到达LVS,LVS只修改目标MAC地址,把帧发给RS;IP报文不变。RE收到请求处理完成,响应数据包直接返回客户端,不经过LVS调度器。
特点:调度器压力小,性能最好;不能跨网段
(RS本地lo网卡绑定VIP,做ARP抑制;调度器和RS必须同一局域网)


2.NAT网路地址转换:LVS修改报文IP,请求包把目标IP(VIP)改成RS真实ip,RS回应经过LVS,LVS把IP改回VIP返还客户端。
特点:RS可以是任意网段,但容易调度器瓶颈
3.TUN IP 隧道模式:LVS在原有IP报文外面,再加一层新IP头,发给 RS。 RS 解封装拿到原始请求,处理后响应直接回客户端,不走 LVS。
特点:调度器与 RS可以跨网段、跨机房;需要内核支持 IP 隧道模块。
4.FULL-NAT:目标 IP 改成 RSIP,客户端源 IP 改成 LVS 本地内网 IP; 响应回来:源 IP 改写为 VIP,返回给客户端。
特点:RS 不需要把网关指向 LVS;RS 和调度器可以不在同一个网段。同时修改源 IP + 目标 IP。
五.LVS13种算法
格式
ipvsadm -A -t|u VIP:端口 -s 算法名
ipvsadm -a -t|u VIP:端口 -r RSIP [-g|-i|-m]
一.静态调度4种
1.rr (Round‑Robin) 轮询
ipvsadm -A -t 192.168.0.200:80 -s rr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
2.wrr (Weighted Round‑Robin) 加权轮询
ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g -w 1
3.sh (Source Hashing) 源地址哈希
ipvsadm -A -t 192.168.0.200:80 -s sh
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
4.dh (Destination Hashing) 目标地址哈希
ipvsadm -A -t 192.168.0.200:80 -s dh
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
二.动态调度 9 种
5.lc (Least‑Connection) 最小连接
ipvsadm -A -t 192.168.0.200:80 -s lc
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
6.wlc (Weighted Least‑Connection) 加权最小连接 内核默认
ipvsadm -A -t 192.168.0.200:80 -s wlc
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g -w 1
7.lblc (Locality‑Based Least‑Connection) 基于本地最小连接 缓存集群使用
ipvsadm -A -t 192.168.0.200:80 -s lblc
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
8.lblcr (Locality‑Based Least‑Connection with Replication) 带复制的本地最小连接
ipvsadm -A -t 192.168.0.200:80 -s lblcr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
9.sed (Shortest Expected Delay) 最短期望延迟 (active_conn + 1)/weight
ipvsadm -A -t 192.168.0.200:80 -s sed
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g -w 1
10.nq (Never Queue) 永不排队 有空闲 RS 直接分配;无空闲使用 sed
ipvsadm -A -t 192.168.0.200:80 -s nq
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g -w 1
11.ovf (Overflow) 溢出阈值调度 设置最大连接,超过阈值不再分配;全部超限拒绝连接
ipvsadm -A -t 192.168.0.200:80 -s ovf
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
12.or (OVRF‑Retry) 溢出重试调度
ipvsadm -A -t 192.168.0.200:80 -s or
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
13.sg (Scheduling‑Gap) 间隙调度
ipvsadm -A -t 192.168.0.200:80 -s sg
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g
六.LVS的多端口轮询问题解决方案
利用防火墙标记解决】
1.在rs主机中同时开始http和https两种协议
[root@RS1+RS2 ~]# dnf install mod_ssl -y
[root@RS1+RS2 ~]# systemctl restart httpd
[root@RS1+RS2 ~]# systemctl restart httpd
2.在vsnode中添加https的轮询策略
[root@vsnode boot]# ip^Cadm -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
3.轮询错误展示
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS2 - 192.168.0.20
使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载
[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()-E -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,测试
[root@client ~]# curl 192.168.0.200
RS1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200
RS1 - 192.168.0.10
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