当前位置: 首页 > 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.dtcms.com/a/287782.html

相关文章:

  • 【RK3576】【Android14】摄像头MIPI开发调试
  • 基于单片机智能插座设计/智能开关
  • 了解pycharm的基本运用
  • Qt笔记整理(1)
  • 使用PyInstaller打包 Python 工程
  • 【C++基础】内存对齐原则与性能影响:面试高频考点与真题解析
  • CSS篇——第二章 六十五项关键技能(下篇)
  • 统计学习方法的三要素
  • Github Actions Workflows 上传 Dropbox
  • 物联网-规则引擎的定义
  • 解决问题七大步骤
  • python基础复习
  • 【RL第一篇】强化学习入门:核心概念全面详解
  • 永磁同步电机控制算法--弱磁控制(变交轴CCR-VQV)
  • vue2 面试题及详细答案150道(141 - 150)
  • VUE2 学习笔记1
  • ndexedDB 与 LocalStorage:全面对比分析
  • 4 ASPICE的支持过程
  • docker构建springboot镜像
  • 【初识数据结构】CS61B中的基本图算法:DFS, BFS, Dijkstra, A* 算法及其来历用法
  • 字节跳动开源Seed-X 7B多语言翻译模型:28语种全覆盖,性能超越GPT-4、Gemini-2.5与Claude-3.5
  • 【开源项目】GPT学术优化 - GPT Academic
  • 探秘边缘安全架构设计要点解析
  • Linux 自旋锁
  • 四阶电商SEO审计指南:诊断流量漏洞→重建增长引擎(附免费工作簿)
  • 音频3A处理简介之AEC(回音消除)
  • 文生图-StoryGAN:用于故事可视化的顺序条件GAN
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 路由器SDH POS接口
  • Ps 2025安装包(Adobe Photoshop 2025)安装包免费免激活版下载 附图文详细安装教程