LVS(Linux virtual server)

1.简介:

LVS是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。

LVS是四层负载均衡,建立在OSI模型的第四层——传输层之上,支持TCP/UDP的负载均衡

LVS的优势

高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景

2.集群:

负载均衡集群-LBC

使用环境:减轻单台服务器的压力,将用户请求分担给多台主机一起处理

实现方法:硬件:典型代表F5 软件:LVS Nginx HaProxy RAC 等

使用范围:业务并发较大的应用程序

高可用集群-HAC

使用环境:最大限度的保证用户的应用持久,不间断的提供服务

实现原理:心跳检测 实现方法:硬件:F5 软件:heartbeat Linux-HA keepalived

使用范围:需要持续提供服务的应用程序

高性能运算集群-HPC

使用:提供单台计算机所不具备的计算能力

负载均衡集群和高性能运算集群的原理对比: 负载均衡集群通过提高单位时间内的执行的任务数来提升效率 高性能运算集群通过缩短单个任务的执行时间来提高效率

3.LVS集群类型:

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT 
lvs-dr:操纵封装新的MAC地址 (常用,因涉及ARP广播协议内网不可有路由)
lvs-tun:在原请求IP报文之外新加一个IP首部 (大型企业使用)
lvs-fullnat:修改请求报文的源和目标IP (需第三方支持,阿里)

nat模式

客户端与Internet,Internet与vs之间为80端口

vs与RS之间为9000端口

1.客户端发送访问请求,请求数据包中含有 请求来源地址(CIP), 访问目标地址(VIP) 访问目标端口 (9000port)
2.VS服务器接收到访问请求做 DNAT(目标地址转换)把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求, 发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
4.VS服务器接收到响应数据包, 改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
缺陷:
*lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

dr模式(企业中最常用的)

直接路由, LVS 默认模式 , 应用最广泛 , 通过为请求报文重新封装一个 MAC 首部进行 转发,源MAC DIP 所在的接口的 MAC ,目标 MAC 是某挑选出的 RS RIP 所在接口的 MAC 地址;源 IP/PORT,以及目标 IP/PORT均保持不变 DR 模式中, RS 接收到访问请求后不需要回传给 VS 调度器,直接把回传数据发送给 client ,所以 RS vs 上都要有 vip

客户端与路由器为vlan1,路由器与RS之间为vlan2

使用VIP通信,RS同样使用VIP通信,但是RS收到LVS给的VIP会占用RS的VIP,所有RS需要自己的另外一个IP去响应客户端(RS需要两个IP):本实验对回环设置为VIP

客户端:

 (客户端IP)

路由器:

   (内网IP)

LVS:

   (DIP)

ip a a 192.168.0.200/32 dev lo(配置回环为VIP)

ipvsadm -A -t 192.168.0.200:80 -s wrr

ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1

ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2

RS:

RS1:

RS2:

ip a a 192.168.0.200/32 dev lo(配置回环为VIP)

先对all修改,才能对lo(指定网卡)生效
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore(选择1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上是,才给予响应):对内响应,对外不响应

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce(选择2:必须避免将接口信息向非本网络进行通告):主机内网络响应

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

测试:

for i in {1..10}

do

curl 192.168.0.200

done

*配置完网络后不要忘记

mncli connection reload

nmcli connection 网卡

TUN模式,fullnet模式(了解)

*分布式与集群的区别
分布式:不同服务器负责不同任务,工作。

集群:不同服务器负责任务与工作相同。

4.LVS调度算法:

lvs静态调度算法

RR:roundrobin
轮询 RS 分别被调度,当 RS 配置有差别时不推荐
WRR:Weighted RR
加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少
SH:
Source Hashing
实现 session sticky ,源 IP 地址 hash ;将来自于同一个 IP 地址的请求始终发往第一次挑中的RS ,从而实现会话绑定
DH:
DestinationHashing
目标地址哈希,第一次轮询调度至 RS ,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

lvs动态调度算法

主要根据 RS当前的负载 状态及 调度算法 进行调度 Overhead=value 较小的 RS 会被调度

LC

least connections

(最少链接发)

适用于长连接应用 Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns (非活 动链接数)

WLC

Weighted LC
(权重最少链接)
默认调度方法 Overhead= (activeconns x 256+inactiveconns)/weight

SED

Shortest Expection Delay
初始连接高权重优先 Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当 node1 的权重为 1 node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接

NQ

Never Queue
第一轮均匀分配,后续 SED

LBLC

Locality-Based LC
动态的 DH 算法,使用场景:根据负载状态实现正向代理

LBLCR

LBLC with Replication
带复制功能的 LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制 到负载轻的RS

相关概念(术语):

        VS:Virtual Server:负责调度

        RS:Real Server:负责提供服务

        CIP:Client IP

        VIP:Vitrual server IP :外网IP

        DIP:Director IP VS:内网IP

        RIP:Real server IP

访问流程:CIP <--> VIP == DIP <--> RIP

5.防火墙标签解决轮询错误

问题:两个集群分开控制,会导致我们希望同时访问到server1和server2

却访问的是sever1和server1,server2和server2

RS:

yum install mod_ssl -y        ###RS上安装mod_ssl模块,使其支持https

systemctl restart httpd        ###重启httpd使模块生效

LVS:

curl -k https://192.168.0.20        ###-k忽略证书,确保访问成功

ipvsadm -A -t 192.168.0.200:443 -s rr

ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g 

ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g 

ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g

ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g

ipvsadm -C        ###删除所有

使用标记解决轮询调度问题:

vs调度器中设定端口标签,设定80443是一个整体

LVS:
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66        ###打标记

iptables -t mangle -nL        ###查看

ipvsadm -A -f 66 -s rr         ###访问66标记进行轮询

ipvsadm -a -f 66 -r 192.168.0.10 -g

ipvsadm -a -f 66 -r 192.168.0.20 -g

6.LVS持久链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值