当前位置: 首页 > news >正文

LVS工作模式和算法的总结

一、工作模式

1.名词解释

LVS的工作模式有四种:NAT、DR、TUN、FNAT。

NAT:LVS改写目标IP/端口,所有流量必经LVS,性能由LVS决定

DR:LVS只改MAC,响应流量直接回客户端,性能高,要求LVS与RS同二层。

Full-NAT:LVS同时改源/目标IP,彻底解除同网段束缚,牺牲性能换灵活。

常用的为前两种,在解释这四种工作模式之前进行名词解释:RS:后端的真实存在的服务器(Real Server)、CIP:客户端请求IP、VIP:虚拟的IP、DIP:后端和LVS调度器相连的VIP上的IP、RIP:RS的IP。

2.LVS-NAT模式

这种工作模式很简单,主要涉及到三层报文的修改:

阶段客户端→LVS:源IP(CIP),目的IP(VIP)

阶段LVS→RS:源IP(CIP),目的IP(RIP)----进行DNAT将目的IP修改为RS的IP

阶段RS→LVS:源IP(RIP),目的IP(CIP)----RS原样发回

阶段LVS-客户端:源IP(VIP),目的IP(CIP)----LVS进行SNAT将IP改为自己的VIP

经过上面观察可以知道ipvsadm对于经过配置ipvsadm规则匹配上的流量进行了DNAT和SNAT转换。但是这不意味着会对RS自发上网的流量进行转换。LVS-NAT 模式下,LVS 只处理“连接追踪表中有记录”的流量。这个“记录”是通过首次命中 VIP 的入站报文建立的,所以后续RS回来的报文进行匹配连接追踪表中的记录,才会SNAT。

配置命令

#RS上面不用做什么配置,只需要一个用来测试的网页即可
yum install nginx -y
echo "$(hostname -I):test messages" > /usr/share/nginx/html/index.html
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
#将自己的物理网卡网关指向DIP
nmcli con mod ens160 ipv4.method manual ipv4.address "$RIP"/24 ipv4.gateway $DIP connection.autoconnect yes#LVS
dnf install ipvsadm -y
nmcli con add type dummy ifname lvstest ipv4.method manual ipv4.address ${VIP}/24
connection.autoconnect yes
nmcli con up dummy-lvstest
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
sysctl -p
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
cat > ipvsadmConfig << EOF #算法这里wrr为加权轮询,自己可以选择
-A -t 192.168.118.150:http -s wrr
-a -t 192.168.118.150:http -r 192.168.118.100:http -m -w 1
-a -t 192.168.118.150:http -r 192.168.118.200:http -m -w 1
EOF
ipvsadm-restore -n < ipvsadmConfig

3.LVS-DR模式

相较于NAT模式,响应流量不再经过 LVS,直接由 Real Server 回给客户端,因此 LVS 只处理“进流量”,带宽和负载压力骤减,整体吞吐量比 NAT 高一个量级。但是它只在二层上面做手脚:

客户端→LVS:目的MAC是LVS的接口MAC

LVS→RS:保留三层,将二层的MAC目的改为RS的MAC,并将源MAC改为自己LVS接口MAC

RS→客户端:RS直接将MAC换为自己MAC,下一跳的MAC改为网关MAC;不再经过LVS

通过对上面观察,有两个值得注意的地方:

1.现实操作中,肯定应该是网关将客户端的请求给到LVS上,那么网关上应该做一个DNAT,将访问这个IP的流量打到内网的VIP上面,将RS回来的包做一个SNAT。

2.RS应该也有VIP,因为它可以直接将处理完的数据重新封装,回给客户端。那么它和LVS都有VIP,那么它应该做arp_ignore,忽略掉网关的找VIP的arp包。

3.由2推理,如果RS→客户端会携带自己RS接口MAC和VIP(RS也有VIP)给到网关,那么这个网关的arp表必然会被污染,因为后续RS的数据包给到网关后那么VIP对应的MAC就会被刷新,那么下一次流量就会绕过LVS,知道mac缓存时间到期

要处理上面的问题3,要么将网关的VIP对应的MAC写死,写为LVS的MAC,要么在RS上将VIP对应虚拟网卡做arp_announce设置,不对VIP的MAC携带给网关

配置命令

这里参考我的这一篇文章:LVS-DR的ARP污染问题-CSDN博客

4.常用算法

静态

RR:轮询算法,顾名思义将访问的流量均匀的打到后端的每一台服务器上,并不关心后端死活

WRR:可以事先的对后端服务器的性能按照一定比例将流量给到

SH:为了将同一IP访问的服务,后续能持续访问这个服务器,将源地址进行hash运算,然后对结果取后端服务器数量的模

DH:对访问的目标IP进行固定的RS绑定,也是对目标目标IP进行hash运算,然后取后端数量的模

动态

LC:最少连接数,将流量打给后端服务器上访问连接最少的服务器

WLC:加权的最少连接数

SED:初始连接高权重优先,min((active+1)/weight)

NQ:先均匀分配,后续采用SED方式分配

LBLC:动态的DH算法,比较适用于CDN/缓存集群

LBLCR:当后端RS挂掉后,会将挂掉的资源复制到负载较轻的RS上

FO:常用作灰度发布,将需要更新或者维护的服务器进行标记,可以动态控制是否访问指定RS

OVF:按权重给每个 RS 指定配额,新连接优先塞给权重最高且当前连接数还没用完配额的 RS;配额一满就换下一个权重最高的,直到全部溢出才回头再从头轮询。

LVS防火墙标记

防火墙标记是为了解决客户端访问的同一目标IP但端口不同又有需要将流量给到LVS处理,让其调度到同一台服务器上这种情况。比如将443端口和80端口不按照端口进行区分,变为一条同一条路由进行匹配;

配置示例:

#在网关上配置即可
iptables -t mangle -A PREROUTING \-d 192.168.0.100 -p tcp \-m multiport --dports 80,443 \-j MARK --set-mark 10
#LVS上(DR模式)
ipvsadm -A -f 10 -s wrr
ipvsadm -a -f 10 -r 192.168.0.11 -g -w 3
ipvsadm -a -f 10 -r 192.168.0.12 -g -w 3

上面的工作模式我这里只给了常用的,TUN模式的简单提一下:这里RS的网关一般不能指向DIP且不支持端口映射

http://www.lryc.cn/news/593109.html

相关文章:

  • 相角补偿全通滤波器设计:相位均衡(0~350Hz,15°超前)
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 计算机网络——IPv4(25王道最新版)
  • python的第三方库的基本运用
  • RISC采用的3种流水技术的功能和区别分析
  • Xss-labs 1-8以及利用python自动sq8注入
  • 定时器与间歇函数
  • 【C++】入门阶段
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • UniApp 优化实践:使用常量统一管理本地存储 Key,提升可维护性
  • 一站式PDF转Markdown解决方案PDF3MD
  • MyBatis动态SQL实战:告别硬编码,拥抱智能SQL生成
  • 【iOS】编译和链接、动静态库及dyld的简单学习
  • JMeter 元件使用详解
  • k8s快速部署(亲测无坑)
  • Jmeter系列(7)-线程组
  • uniapp相关地图 API调用
  • 考研复习-数据结构-第七章-查找
  • 考研408《计算机组成原理》复习笔记,第三章(5)——磁盘存储器
  • UniApp 自定义导航栏:解决安全区域适配问题的完整实践
  • 基于springboot的考研互助小程序
  • 如何解决Flink CDC同步时间类型字段8小时时间差的问题,以MySQL为例
  • 我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)
  • lazyvim配置
  • 实验-华为综合
  • fclose 函数的概念和使用案例
  • MySQL详解二
  • HTML零基础快速入门教程(详细篇)
  • 【取消分仓-分布式锁】
  • LVS的简介以及架构