LVS相关知识总结

一. 集群的定义

集群就是将一组独立服务器组合成为整体对外提供服务。分为负载均衡、高可用和高性能。

二.集群的分类

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
相关推荐
lightqjx2 小时前
【Linux系统】基础 IO
linux·c语言·重定向·缓冲区·文件io·文件的系统调用
我星期八休息2 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
各类产品分享2 小时前
什么是AR智慧运维系统,主要能解决什么问题
运维·ar·ar智慧运维解决方案
RisunJan3 小时前
Linux命令-skill(发送信号给进程)
linux·运维·服务器
潘正翔3 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
changjiahong3 小时前
lvs总结
服务器·数据库·lvs
Echo flower3 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
骊城英雄3 小时前
彩笔运维勇闯机器学习--逻辑回归
运维·机器学习·逻辑回归
孪生质数-3 小时前
AI 应用实践篇——让大模型真正开始工作
linux·运维·服务器·人工智能·深度学习·语言模型·llama