LVS(Linux virual server)详细版!你值得拥有

lvs:四层负载均衡调度器

lvs介绍:

lvs:四层负载均衡调度器,四层内核转发速度快,可以更改mac地址、ip、端口等,阿里的四层SLB(Server LoadBalance)是基 于LVS(四层负载均衡服务器)+keepalived(七层路由冗余协议)实现

lvs架构:

VS:virtualserver负责调度

RS:realserver负责真正处理业务服务的主机

CIP:Client IP 客户机的IP

VIP: Virtual serve IP VS外网的IP

DIP: Director IP VS内网的IP

RIP: Real server IP

lvs工作原理:

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

具体怎么改 要看用的什么模式 ----nat dr tun fullnet

具体发到哪里 要看用的什么算法 ---静态 动态 新型算法

lvs的四种模式:

vs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP

1.DR模式
1)DR介绍:

但与NAT模式不同的是,DR模式下,请求和响应数据包在传输过程中不会修改IP地址,而是直接通过数据链路层(如MAC地址)进行转发。

假设你是一家餐馆的老板,你雇佣了几个服务员(后端服务器)来为顾客服务。当有顾客(客户端)进来时,迎宾员(调度器)会根据顾客的需求和服务员的空闲情况,直接将顾客引导到合适的服务员那里,而不需要改变顾客的姓名或身份(IP地址)。

2)解决vip响应问题

DR模型中各个主机上均需要配置VIP 解决地址冲突有三种方法:
1)在前端网关做静态绑定
2)在各RS(webserver的机子)使用arptables
3)在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
   0:默认值 表示可使用本地任意接口上配置的任意地址进行响应
   -->意思就是只对内部ip进行响应 比如同一个主机里面有ens33和lo换回ip  那么只能ens33和lo进行响应 向外就不可以响应
   1:仅在请求的目标ip配置在本地主机的接收到请求报文的接口上时,才给予响应--->你的电脑(或任何网络设备)有多个网络接口,每个接口都有自己的IP地址。这些接口可能连接到不同的网络或子网。当网络上的其他设备想要与你的电脑通信时,它们可能会发送ARP(地址解析协议)请求来询问:“嘿,哪个设备的MAC地址拥有这个特定的IP地址?”

现在,如果你的电脑配置了arp_ignore参数为1,那么它只会对那些询问它“自己”的IP地址的ARP请求作出回应。换句话说,只有当ARP请求中的目标IP地址与你的电脑当前接收该请求的接口上的IP地址完全匹配时,你的电脑才会发送一个ARP响应,告诉请求者:“我就是那个IP地址的拥有者,这是我的MAC地址。”

如果ARP请求中的目标IP地址与你的电脑上的任何接口的IP地址都不匹配,那么你的电脑就会忽略这个ARP请求,不会发送任何响应。
-->意思就是我现在发送过来的ARP请求中的ip地址 要和我webserver机上的接口要有相对应的  才可以进行响应 没有就不响应

限制通告级别:arp_announce
   0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
   -->不管哪个网络接口,只要它是活动的(即可以发送数据),都有可能被选作发送ARP请求的源。这意味着,如果你的电脑有多个网络接口,并且它们都连接到不同的网络,那么发送ARP请求时,可能会使用任何一个接口的IP地址作为源地址,而不考虑这个地址是否与目标地址在同一个子网内(对外所有都响应)
   1:尽量避免将接口信息向非直连网络进行通告
   -->会查看所有可用的网络接口,并尝试找到一个与目标地址在同一子网的接口。如果找到了,就使用这个接口的IP地址作为源地址来发送ARP请求(不在同一个子网/vlan就无法响应)
   2:必须避免将接口信息向非本网络进行通告
   -->会基于路由决策来选择最合适的接口,并使用该接口的IP地址作为源地址来发送ARP请求(要本机主机以内的网络才可响应 根据路由策略 有的才响应)

3)实验项目:(具体实验请看上一个博客内容有详细介绍)

LVS实战项目:DR模式的实现-CSDN博客

2.nat模式
1)nat介绍:

NAT就像是一个地址翻译官,负责在内部网络和外部网络之间翻译IP地址。内部网络中的设备通常使用私有IP地址(这些地址在外部网络上不可见),而NAT设备(如路由器)会将这些私有IP地址转换成外部网络可以识别的公有IP地址,以便设备能够访问互联网。

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口

(9000port)

2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口

3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口

(9000port)

4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)

5.VS服务器把修改过报文的响应数据包回传给客户端

6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

2)常见命令:
-A   添加集群策略
-a   添加集群的realserver
-t   tcp模式
-u   udp模式
-m   NAD
-i   隧道
-s   调度算法
-C   清除整个 IPVS 表,即删除所有虚拟服务和服务器
-D   删除指定策略的realserver
-Ln  显示
-w   权重
-Z   将虚拟服务表中的所有计数器清零。这些计数器通常包括当前的连接数量、包转发数量等统计信息 但不会删除或修改任何虚拟服务或真实服务器的配置
-E   编辑一个已存在的虚拟服务
-f   标签模式
-p   时间显示 默认360秒
ipvsadm-save 保存命令
3)实验项目:
基本配置

lvs开启内核路由

进行lvs集群策略配置

3.TUN模式:隧道模式

TUN是一种虚拟网络设备,常用于实现网络层(如IP)的隧道技术。TUN设备允许用户空间的程序读取或写入IP数据包,从而可以在不修改实际网络硬件或驱动的情况下实现自定义的网络行为。TUN设备常用于VPN(虚拟专用网络)等场景中,用于封装和传输加密的数据包。 你可以把TUN想象成一条秘密通道(隧道),这条通道连接了两个地方(比如你的家和公司)。当你想要安全地传输一些重要的文件时,你可以通过这条秘密通道发送加密的文件包。在隧道的两端,有专门的设备(TUN设备)负责解密和转发这些文件包,确保它们能够安全地到达目的地。

4.fullnet模式

FULLNAT模式是NAT模式的一种扩展,它在请求和响应方向上都会进行地址和端口的转换。在FULLNAT模式下,不仅客户端的请求会被转换成后端服务器的地址和端口,后端服务器的响应也会被转换成客户端的地址和端口。这种方式增加了处理的复杂性,但也提供了更高的灵活性和安全性。 继续上面的餐馆例子,但这次餐馆老板为了安全起见,决定在服务员和顾客之间设置一个翻译官(FULLNAT设备)。当顾客点餐时,翻译官会先记录下顾客的需求,并将其翻译成服务员能懂的语言,然后让服务员准备食物。当食物准备好后,翻译官又会将服务员的语言翻译成顾客能懂的语言,并亲自将食物送到顾客手中。

5.静态调度算法 -s

RR 轮询算法:默认权重相当于是1 你一下我一下

WRR 加权轮询算法:根据权重的大小进行分配 说明是有权重设定的

SH 源ip地址hash 将来自于同一个ip地址的请求始终发往第一次挑中的rs,从而实现会话绑定 (源地址ip过来会在客户端进行session会话 实现hash 改变一种形式被记录在首次去的服务器上 使得被记录下来 下次送往规定记录的地方去 如果下次来的不是session会话中对应的ip 则会丢失)

DH 目标ip地址hash 先进行轮询 分别一个去一次 然后再进行目的ip地址的记录 下一次去的时候直接观察目标地址ip是否一致

适用场景:正向代理缓存场景中的负载均衡

6.动态调度算法

LC:最少链接发 --负载值=活动链接数×256+非活动链接数

WLC:权重最少链接 --除以权重(导致高权重的 被除下来很小 后续会一直传给高权重那个主机 导致负载过重) --先去性能不好的 就是权重小的 用完之后去给权重的 导致负载过重

SED:初始连接高权重优先--负载值=(活动链接数×256+非活动链接数+1)/权重

--先给性能好的 传输性高的 但是一直给性能好的也会导致负载过重 权重低的那个闲的要死 高权重的忙的要死

NQ:第一次均衡分配 后面就是SED

LBLC:动态的DH算法 适用场景:根据负载状态实现正向代理

LBLCR:带有复制性的LBLC,解决负载不均衡问题,从负载中的复制到负载轻的rs主机上

eg:如果之前一直都是传输来的是腾讯的消息 然后传给腾讯的服务器 但是直到负载过度之后 就可以将自己的服务器中的复制到爱奇艺那里 进行分担 这样之后的也可以往爱奇艺服务器上面传输 就不会造成负载过度了

7.新型调度算法

FO:当一个承载过多的链接后,可以做个过载标志,让vs调度器不要来找它,换个新的主机继续

OVF:基于真实服务器的活动连接数量和权重值实现。

先连接到权重高的真实服务器上,直到活动连接数量超过权重值,就会调度到下一个权重值最高的真实服务器。

要求:没有被标记过过载标志的 连接数量小于权重值的 权重值不为零

8.防火墙mark标签解决轮询错误/调度问题 -f

①设定标签定义集群服务 ipvsadm -A -f 标签

②利用标签不用备注端口号就可以解决挨个轮询问题(避免出现同时访问端口80和加密端口443时出现同样的结果)--设定端口标签 人为使80和443成为一个整体,不用手动敲端口 会自动识别

比如:

ipvsadm -A -f 192.168.0.200:80 -s rr
ipvsadm -a -f 192.168.0.200:80 -r 192.168.0.10:80 -g
ipvsadm -a -f 192.168.0.200:80 -r 192.168.0.20:80 -g
ipvsadm -A -f 192.168.0.200:443 -s rr
ipvsadm -a -f 192.168.0.200:443 -r 192.168.0.10:443 -g
ipvsadm -a -f 192.168.0.200:443 -r 192.168.0.20:443 -g
出现两个集群:
ipvsadm -Ln 
192.168.0.200:80
192.168.0.10:0
192.168.0.20:0

192.168.0.200:443
192.168.0.10:0
192.168.0.20:0

curl 192.168.0.200;curl -k https:192.168.0.200
webserver1 - 192.168.0.10
webserver1 - 192.168.0.10
curl 192.168.0.200;curl -k https:192.168.0.200
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

两个集群是会分开行动的 所以各自进行论轮询 会出现一样的信息
实现不了自动识别同一ip跳过显示

解决方案:

rs:
yum install mod_ssl -y  --安装mod_ssl加密模块 让rs支持https
systemctl restart httpd 
netstat -antlupe | grep httpd 过滤看一下端口

lvs:
curl -k https://192.168.0.10     https加密 端口为443
    -k   忽略证书 可以直接显示
iptables -t mangle -A  PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
(
-d 目的地
multiport 多端口  
-P  协议
)
ipvsadm -A -f 6666 -s rr
ipvsadm -A -f 6666 -r 192.168.0.10 -g
ipvsadm -A -f 6666 -r 192.168.0.20 -g   不加端口 可以多端口自动识别
ipvsadm -Ln

client:
curl 192.168.0.200;curl -k https://192.168.0.200

9.session会话问题解决 --lvs持久链接 SH/LC
lvs 持久链接
在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单 纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh 算法,但是 sh 算法比较简单 粗暴,可能会导致调度失衡
解决方案
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把 这个源的主机调度到了那个RS
如果在短期(默认 360S )内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS 上。
如果过了比较长的时间(默认最长时间360s )同源访问再次来访,那么就会被调度到其他的 RS
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC

负载均衡是什么:

就是客户端给予的一个特定的任务 在LB调度器上可以分担给多个特定的后端服务器 实现负载均衡 提高并发处理能力 保证业务的高可用性

1.用负载均衡的理由

Web服务器的动态水平扩展-->可以在同一个调度器中添加n个服务器或者设备
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
节约公网IP地址-->server不需要公网ip  只有调度器有
隐藏内部服务器IP-->提高内部服务器安全性 
配置简单-->固定格式的配置文件
功能丰富-->支持四层和七层,支持动态下线主机 可以进行流量的转发 也可以进行报文的分析
性能较强

2.负载均衡类型

四层--转发功能:

1.修改报文头部的目标地址
2.修改源地址

支持软件:
lvs:重量级四层负载均衡
Nginx:轻量级负载均衡
haproxy:模拟四层转发

七层--代理功能:

会在中间代理部分进行预处理  所以server只知道是proxy在处理 不会知道还有client的存在 除非将client的ip进行渗透过去才可以知道
一般当存在需要处理url信息解析的时候 需要七层
如果单纯只进行ip流量识别  四层或者七层皆可

支持七层:
Nginx:基于http协议
haproxy:七层代理,会话保持、标记、路径转移等

3.正向代理和反向代理

正向代理:类似中间商 --客户端知道要访问的目标服务器 由于不能访问 需要中间商介入

我联系不上房东 就需要中间的中介给我进行代理 我和房东之间比如有一个防火墙可能直接进行不了 这个时候我需要一个可以联系上房东的人给我进行联系 这个时候我会去找中介 中介有的资源直接给我介绍 但是没有的就需要去找房东进行收集信息

假设你(客户端)想要买一件国外网站的商品,但是直接访问该网站被限制了。这时,你可以找一个代购(正向代理)来帮忙。你把购物需求告诉代购,代购会用自己的方式去访问那个网站,购买商品,然后再把商品寄给你。在这个过程中,国外网站并不知道是你想买这件商品,它只知道是代购在买

反向代理:--客户端不知道要访问哪个服务器 只有反向代理服务器会知道 是和目标服务器直接联系

  • 餐馆:就像我们的原始服务器,它负责制作美食(提供服务或内容)。但是,由于餐馆本身的位置有限,能容纳的顾客数量也有限,所以直接到店就餐可能会遇到排队等待的情况。

  • 外卖服务:这就是我们的反向代理。它位于餐馆(原始服务器)和顾客(客户端)之间。顾客不需要直接和餐馆打交道,只需要通过外卖服务下单即可。外卖服务会接收顾客的订单,然后转发给餐馆,餐馆做好菜后,外卖服务会负责将菜品送到顾客手中。

  • 顾客:就像我们的客户端,他们只需要和外卖服务(反向代理)进行交互,就可以享受到餐馆的美食,而不需要关心餐馆的内部情况,比如有多少厨师在忙碌、有多少张桌子空着等。

4.正向代理和反向代理区别

1.目的不同
正向代理:实际代理的是客户端,它的主要目的是解决客户端的访问问题,如访问限制、加速访问等。

反向代理:代理的是目标服务器,它的主要目的是提高系统的可用性、安全性和性能,如通过负载均衡来平衡后端服务器的负载,通过缓存来减少对后端服务器的请求等。
2.代理对象不同
正向代理:是客户端架构,它代理的是客户端的请求。
反向代理:是服务器架构,它代理的是后端服务器的响应。
3.服务对象不同
正向代理:在正向代理中,服务器不知道真正的用户是谁,因为所有请求都经过代理服务器转发。

反向代理:在反向代理中,用户不知道真正的服务器是谁,因为用户直接与代理服务器交互,而不需要知道后端服务器的具体信息。
4.功能不同
正向代理:主要用来解决访问问题,如访问限制、加速访问等。同时,它还可以提供缓存功能,以减少对原始服务器的请求次数。

反向代理:主要用于解决负载均衡、安全防护等问题。通过负载均衡,反向代理可以将客户端请求分发到多个后端服务器上,从而提高系统的可伸缩性和性能。同时,它还可以作为应用层防火墙,为网站提供对基于web的攻击行为的防护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值