锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

lvs看这篇就够了

时间:2023-10-07 00:37:02 cyb11w微压力变送器

1lvs 的由来
公司的大部分钱都花在了客户上。在营销方面,良好的营销效果将带来新的流量。如果他们自己的应用程序不能承担大的流量,它将造成巨大的经济损失。lvs负载平衡技术诞生了。当然,它也可以用于金钱。F5 等硬件
lvs 学名
Linux虚拟服务器
LVS是Linux Virtual Server简写,意思是Linux虚拟服务器是一个虚拟服务器集群系统。该项目于1998年5月由张文松博士建立,是中国最早的自由软件项目之一。
想要说明白lvs 我需要一定的网络知识。让我从一个案例开始
比如你要访问百度,访问这个动作 经历了这样一个过程,
在这里插入图片描述
众所周知,通信系统架构采用分层架构,70%表示从发送到分析,再从分析到显示的整个过程。我们都知道会话层是我们的session信息,tcp它是在传输控制层实现的,操作系统只能在握手三次后创建socket 执行请求,这里说为什么是三次握手,发送给客户端sync请求,并且收到了sync ack,说明客户端端的发送和接收没有问题。对于服务端,接收 sync 和ack 并且发送了sync ack,在开始传输数据之前,解释他们的接收和发送没有问题。可以结合下图理解

当数据传输完成后,客户端和服务端将四次挥手断开连接。流程如下
(1)首先,客户想要释放连接,并将一段时间发送到服务器端TCP其中:

标记位为FIN,表示请求释放连接;
序号为Seq=U;
然后客户端进入FIN-WAIT-第一阶段,即半关闭阶段。并停止向客户端向服务器端发送数据,但客户端仍能接收从服务器端传输的数据。
注:这里不发送的是正常连接时传输的数据(非确认报告),而不是所有数据,所以客户端仍然可以发送ACK确认报文。

(2)从客户端接收服务器端接收TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态),返回一段时间TCP其中:

标记位为ACK,表示接收客户端发送的释放连接请求;
序号为Seq=V;
确认号为Ack=U 1.表示序号是在收到客户端报告的基础上编号的Seq值加1作为本段报文的确认号Ack的值;
然后服务器端开始准备将服务器释放到客户端。
从服务器端从服务器端发出的信息TCP报告后,确认服务器收到了客户端发布的发布连接请求,然后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段

前"两次挥手"既让服务器端知道客户端想要释放连接,又让客户端知道服务器端想要释放连接的请求。
因此,可以确认将客户端关闭到服务器端的连接方向
(3)服务器端自发出以来ACK确认报文后,经过CLOSED-WAIT阶段,准备将服务器释放到客户端,并再次发送给客户端TCP其中:

标记位为FIN,ACK,表示已准备好释放连接。注:这里的ACK收到服务器端报文的确认报文认报文。
序号为Seq=W;
确认号为Ack=U 1;表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文的确认号Ack的值。
然后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并停止在服务器端向客户端发送数据,但服务器端仍能接收从客户端传输的数据。

(4)客户端从服务器端收到发送的信息TCP报纸确认服务器端已准备好释放连接,FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报纸,包括:

标记位为ACK,表示接收服务器准备释放连接信号。
序号为Seq=U 1;表示在收到服务器端报告的基础上确认号码Ack值作为本段报文序号的值。
确认号为Ack=W 1;表示在收到服务器端报告的基础上,序号Seq本段报文确认号值为值。
然后客户端开始在那里TIME-WAIT阶段等待2MSL
为什么客户端要等2MSL呢?见后文。
从客户端收到服务器端发送的服务器TCP报文结束后LAST-ACK阶段,进入CLOSED阶段。因此,服务器端到客户端的连接正式确认。

客户端等待2MSL之后,结束TIME-WAIT阶段,进入CLOSED四次挥手由此完成。

之后两次挥手不仅让客户端知道服务器端准备好了释放连接,也让服务器端知道客户端准备好了释放连接。
因此,可以确认将服务器关闭到客户端,从而完成四次挥手。
在客户端和服务器端传输,就像三次挥手一样TCP报文中,双方确认号Ack和序号Seq所有的值对方Ack和Seq在计算值的基础上,这确保了TCP一旦某一方发布了报纸传输的连贯性TCP报文丢失,便无法继续"挥手",以此确保了"四次挥手"顺利完成。
为什么握手三次,挥手四次?
被动方服务器端在建立连接时结束CLOSED进入握手阶段不需要任何准备,可以直接返回SYN和ACK报文,
开始建立连接。

被动方服务器在释放连接时,突然收到主动方客户端释放连接的请求时,不能立即释放连接,
由于需要处理必要的数据,服务器首先返回ACK确认收到报告并通过CLOSE-WAIT阶段准备好释放连接后,
才能返回FIN释放连接报文。
为什么客户端在?TIME-WAIT阶段要等2MSL?
为了确认服务器端是否收到客户端的发送ACK确认报文

当客户端发出最后一个ACK在确认报文时,服务器端无法确定能够收到该报文。因此,客户端正在发送ACK确认报纸后,将设置2个时间MSL的计时器。MSL指的是Maximum Segment Lifetime:一段TCP报纸在传输过程中的最大生命周期。2MSL即服务器端发出FIN发布的报文和客户端ACK确认报纸能保持最大有效时间。

服务器端在1MSL未收到客户端发送的内部信息ACK如果确认报纸,将再次发送给客户端FIN报文;

当tcp 建立连接后,我们需要发送数据,这里就像写信一样,需要发件人地址和收件人地址,tcp层层封装数据格式大致如下
源端口号->目标端口号
网络层封装后
会带上 IP地址
此时的报文内容
源端口号->目标端口号
源IP地址->目标IP地址
最后,通过链路层带Mac地址
源端口号->目标端口号
源IP地址->目标IP地址
源MAC地址->目标MAC地址

这时数据包已经好了,但是这个数据包怎么能到达百度服务器呢?
这里需要补充的知识是我们的互联网流程;
比如我们家有两部需要上网的手机,都需要访问百度
手机A IP地址192.168.1.8
手机B IP地址192.168.1.6
另一种设备是路由器 ,路由器具有网络地址转换的功能
他要把手机A 和B的地址 通过自己的转化功能,转发到网关出口,然后通过下一跳机制,通过城域网 广域网 最后跳到百度服务器所属的网络 并找到相应的IP地址。
看图比较好理解。

好了,知道了这个问题,就知道了数据包是怎么到达百度的,但是百度每天都要接受很多访问,所以服务器肯定不行。如果有三个,但是这个www.baidu.com 分配给那台计算机,分配给那台不好,所以出现了 多台服务器是负载均衡的概念ip。此时,机器需要专门承担和分发流量,然后简化目前的拓扑图如下所示。

图中的CIP为客户端,vip数据转发 DIP是目标ip RIP真正接受服务ip。

首先,我们来谈谈为什么这里不需要7层负载,因为7层负载很慢,7层需要3次握手才能建立连接,如果以前使用过Tomcat操作系统需要从内核转移到工作内存java虚拟机,还要开辟资源,cpu也要切换转态,所以比较慢。这里使用的四层负载不需要握手,就像流量的中转站,所以很快。这就是vip出生了,知道为什么慢,才知道怎么做才能变快。
在这里,我们总结负载平衡的好处
当业务开始时,单个服务器通常首先用于提供外部服务。随着后期业务的增长,流量也越来越大。当单个服务器访问量越大时,服务器承受的压力越大,性能将无法满足业务需求,超过指定的访问压力将崩溃,以避免此类事情的发生。
我们将采用其他方案,将多个服务器组成集群系统,以提高整个服务器的处理性能,通过统一入口(流量调度器)提供外部服务,平衡地将大量用户请求分发给不同的后端集群服务器。因此,负载平衡可以分担服务器的压力。
均衡使用负载给我们带来的好处:提高系统的整体性能,扩展系统,提高系统的高可用性;

接下来,我们将介绍下一件事,即lvs3中的工作模式,这里我们现在把流程成黑盒,先来看看第一个
DR 模型
再说DR在模型之前,另一个知识点是netfilter 的基本原理
因为 LVS 是基于 Linux 内核中 netfilter 负载均衡系统实现框架,netfilter 其实很复杂很重要,平时说的也很重要。 Linux 防火墙就是 netfilter,但我们操作的还是 iptables,iptables 和 netfilter 是 Linux 防火墙组合工具,一起完成系统防护工作。
iptables 和 Netfilter 它位于核心空间。iptables 只是用户空间编写和传递规则的工具而已,真正工作的还是 netfilter。
两者的区别:
Netfilter 是内核态的 Linux 防火墙机制,作为一个通用、抽象的框架,提供了一套完整的 hook 函数管理机制提供基于协议类型的数据包过滤、网络地址转换和连接跟踪功能。在数据包流过程中,可根据规则设置干个关卡(hook 函数)来执行相关操作,共设置了 5 个点,包括:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
● prerouting: 在对数据包做路由选择之前,将应用此链中的规则;
● input: 当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
● forward: 当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则;
● output: 当防火墙本机向外发送数据包时,将应用此链中的规则;
● postrouting: 在对数据包做路由选择之后,将应用此链中的规则;

一个图看一下工作原理

当数据包通过网络接口进入时,经过链路层之后进入网络层到达PREROUTING,然后根据目标 IP 地址进行查找路由。
如目标 IP 是本机,数据包会传到INPUT上,经过协议栈后根据端口将数据送到相应的应用程序;应用程序将请求处理后把响应数据包发送至OUTPUT里,最终通过POSTROUTING后发送出网络接口。
如目标 IP 不是本机,并且服务器开启了FORWARD参数,这时会将数据包递送给 FORWARD,最后通过POSTROUTING后发送出网络接口。
DR 实现原理过程

1、 当客户端用户发送请求给 www.baidu.com 网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过网络路由到百度 LVS 负载均衡服务器,这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址CIP)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。
2、 数据包到达网卡后,Netfilter 开始工作,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。
3、 数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务,如是定义过的 VIP 服务,会根据配置的服务信息(DIP),从 RealServer 中选择一个后端服务器 Server1,然后 Server1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 OUTPUT 链中。
4、 数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 Server1服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 Server1服务器。
5、 数据包到达 Server1服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 Server1的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 Server1相连的路由器转发给客户端。
这里有个重点就是回来的数据包是不经过vip服务器的,这里vip就只对内可见,需要对外隐藏。
这个实现需要用到RIP 的网络知识 稍后说
DR 模式的优缺点:
优点:
● 响应数据不经过 LVS,性能高;
● 对数据包修改小,信息完整性好;
缺点:
● LVS 与 RS 必须在同一个物理网络;
● RS 上必须配置 lo 和其他内核参数;
● 不支持端口映射;
DS 模式的使用场景:
● 对性能要求高的,可首选 DR 模式,还可透传客户端源 IP 地址。

NAT 实现原理过程

1、 客户端发出的请求数据包经过网络到达 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。
2、然后进入 PREROUTING 链中,根据目的 IP 查找路由,确定是否为本机 IP 地址,随后将数据包转发至 INPUT 链中,源 IP 和 目的 IP 不变。
3、 到达 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 来作为后端服务器,数据包的目的 IP 地址将会修改为 RIP,这时并以 RIP 为目的 IP 去查找路由,确定下一跳及 PORT 信息后,数据包将会转发至 OUTPUT 链中。
4、 被修改过的数据包经过 POSTROUTING 链后,到达 RS 服务器,数据包源 IP 为 CIP,目的 IP 为 RIP。
5、 RS 服务器经过处理后,将会把数据包发送至用户空间的应用程序,待处理完成后,发送响应数据包,RS 服务器的默认网关为 LVS 的 IP,应用程序将会把数据包转发至下一跳 LVS 服务器,数据包源 IP 为 RIP,目的 IP 为 CIP。
6、 LVS 服务器收到 RS 服务器响应的数据包后,查找路由,目的 IP 不是本机 IP并且 LVS 服务器开启了 FORWARD 模式,会将数据包转发给它,数据包不变。
7、 LVS 服务器收到响应数据包后,根据目的 IP 和 目的 PORT 查找相应的服务,这时,源 IP 为 VIP,通过查找路由,确定下一跳信息并将数据包发送至网关,最终回应给客户端用户。
NAT 模式的优缺点:
优点:
● 支持 Windows 操作系统;
● 支持端口映射,如 RS 服务器 PORT 与 VPORT 不一致的话,LVS 会修改目的 IP 地址和 DPORT 以支持端口映射;
缺点:
● RS 服务器需配置网关;
● 双向流量对 LVS 会产生较大的负载压力;带宽会成为瓶颈。
NAT 模式的使用场景:
● 对 windows 操作系统的用户比较友好,使用 LVS ,必须选择 NAT 模式。
TUN 实现原理过程
1、 客户端发送数据包经过网络后到 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。
2、 进入 PREROUTING 链后,会根据目的 IP 去查找路由,确定是否为本机 IP,数据包将转发至 INPUT 链中,到 LVS,源 IP 和 目的 IP 不变。
3、 到 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 后端服务器, 源 IP 为 DIP,目标 IP 为 RIP,数据包将会转发至 OUTPUT 链中。
4、 数据包根据路由信息到达 LVS 网卡,发送至路由器网关,最终到达后端服务器。
5、 后端服务器收到数据包后,会拆掉最外层的 IP 地址后,会发现还有一层 IP 首部,源 IP 为 CIP,目的 IP 为 VIP,TUNL0 上配置 VIP,查找路由后判断为本机 IP 地址,将会发给用户空间层的应用程序响应后 VIP 为源 IP,CIP 为目的 IP 数据包发送至网卡,最终返回至客户端用户。
TUN 模式的优缺点:
优点:
● 单臂模式,LVS 负载压力小;
● 数据包修改小,信息完整性高;
● 可跨机房;
缺点:
● 不支持端口映射;
● 需在 RS 后端服务器安装模块及配置 VIP;
● 隧道头部 IP 地址固定,RS 后端服务器网卡可能会不均匀;
● 隧道头部的加入可能会导致分片,最终会影响服务器性能;
TUN 模式的使用场景:
● 如对转发性要求较高且具有跨机房需求的,可选择 TUN 模式。

lvs DR 模型实战
LVS:

node01:
ifconfig eth0:8 192.168.150.100/24
node02~node03:
1)修改内核:对外隐藏 对内可见
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2)设置隐藏的vip:
ifconfig lo:3 192.168.150.100 netmask 255.255.255.255

RS中的服务:
node02~node03:
yum install httpd -y
service httpd start
vi /var/www/html/index.html
from 192.168.150.1x

LVS服务配置
node01:
yum install ipvsadm
ipvsadm -A -t 192.168.150.100:80 -s rr
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w 1
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w 1
ipvsadm -ln

验证:
浏览器访问 192.168.150.100 看到负载 疯狂F5
node01:
netstat -natp 结论看不到socket连接
node02~node03:
netstat -natp 结论看到很多的socket连接
node01:
ipvsadm -lnc 查看偷窥记录本
TCP 00:57 FIN_WAIT 192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章