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
相关推荐
comedate2 小时前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
暴力求解4 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
JoyCong19985 小时前
ToDesk个人版、专业版、游戏版、设计版、性能版、团队版权益介绍
大数据·运维·游戏·远程工作·远程操作
ltl5 小时前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju5 小时前
编译与调试完全指南—第17章 总结
linux
ltl5 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
Elastic 中国社区官方博客6 小时前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
我不会插花弄玉6 小时前
9.进程间通信(上)【由浅入深-Linux】
linux·共享内存·进程通信
80s7776 小时前
动态ip和静态ip有什么区别
服务器·网络·tcp/ip
mqiqe7 小时前
AgentScope Java 2.0 Agent 状态存储(AgentStateStore)深度解析:构建可恢复、可扩展的智能体运行时
java·运维·网络