lvs负载均衡

LVS(Linux Virtual Server)是一种高效的服务器集群系统,工作在传输层,提供高性能、高可用的负载均衡解决方案。文章详细介绍了LVS的三种工作模式——NAT、TUN和DC,以及其10种调度算法,包括轮询、最少连接等。此外,还通过实战案例展示了如何搭建HTTP负载均衡集群,涵盖了NAT、DC和TUN模式。
摘要由CSDN通过智能技术生成

一、lvs是什么?

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

lvs官网

二、lvs的作用

LVS主要用于多服务器的负载均衡。它工作在传输层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。

因为lvs工作在传输层,所以相对于其他的负载均衡的解决办法(DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的)

LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。

三、lvs三种工作模式

NAT模式

image-1664190859701

  • NAT(network adDCess translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外王,以及外部用户可以访问位于公司内部的私有的ip主机。
  • 工作过程:
    • (1):用户通过互联网DNS服务器解析到公司负载均衡设备上的外网地址,相对于真实服务器而言,LVS外网ip又称为vip,用户通过访问vip,即可连接后端的真实服务器,而此时用户对这一切都是不可知的,用户认为自己还在访问真实的后端服务器,也不知道自己访问的vip只是一个调度器。
    • (2):用户将请求发送至调度器上,此时LVS根据算法选择一个后端的真实服务器,将数据请求包转发给真实服务器,并在转发之前LVS会修改数据包中的目标地址以及目标端口,此时修改为真实的服务器ip地址
    • (3):真实的服务器将响应的数据包返回给LVS调度器,调度器在响应数据包后会将源地址和源端口修改为vip及调度器相应端口,修改完成后,由调度器响应数据包发送给终端
  • LVS调度器中有一个连接Hash表,该表会记录连接请求及其转发信息,当同一个连接下一个数据包发送给调度器时,该Hash’表可以直接找到之前连接的记录,并根据记录信息选出相同真实服务器及其端口信息。
  • NAT的优点是服务器可以运行在任何支持TCP/IP的操作系统,他只需要在调度器上配置一个ip 服务器组可以用私有的ip地址。
  • NAT的缺点是伸缩能力有限,当服务器节点数目上升到20时,调度器本身有可能成为系统的新瓶颈,因为请求和响应的报文都需要经过调度器。

TUN模式

image-1664191012323

  • LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
  • IP(隧道)是一种数据包分装技术,他可以经原始的数据包分装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的vip地址的数据包分装,通过隧道转发给真实的后端服务器,通过将客户端发往调度器的原始数据包分装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务的ip地址以及对应端口),lLVS(Tun)模式要求真实的服务器可以与外部网络连接,真实服务器在受到请求数据包后直接给客户端返回响应数据。
  • LVS(Tun)技术对服务器有要求,即所有服务器必须支持"IP Tunneling"或者IP Encapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。

DC模式

image-1664191144612

  • 在LVS(TUN)模式中,需要LVS调度器与真实的服务器之间创建隧道连接,这样就会增加服务器的负担。DC模式也叫路由模式,该模式中LVS依然仅承担数据的请求以及根据算法调度出合理的后端服务器,最终由后端真实服务器负责响应数据包发送返回给客户端。与隧道模式不同的是,DC模式要求调度器与后端服务器必须在统一个局域网内u,VIP地址需要在调度器与后端所有服务器之间共享,因为最终的真实服务器会给客户端回应数据包时需要设置源IP为VIP,目标IP为客户端IP,这样客户端访问的时调度器VIP地址,回应的源地址也是VIP,这样客户端是感觉不到后端服务器的存在。由于多台计算机都设置了同样的VIP地址,所以在直接路由模式中要求调度器的VIP是对外可见的,客户端将请求数据包发送到调度器主机,而所有的真实服务器的VIP必须配置在Non-ARP的网络上ARP是一个协议。调度器根据算法在选出真实的服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实的MAC地址,通过交换机将该数据帧发给真实的服务器。

四、LVS的10种调度算法

  • 1 静态算法:
    • (1) rr(round robin):轮询调度算法:
      轮询调度算法的原理就是依次将用户的访问请求,平均的分配到每一台web服务节点上,从1开始,到最后一台服务器节点结束,然后在开始新一轮的循环,这种算法简单,但是没有考虑到每台节点服务器的具体性能
    • (2) wrr(weight):权重调度算法
      由于每台服务器的性能会高低不同,wrr将会根据管理员设定的权重值来分配访问请求,权重值越大的,被分到的请求数也就越多,此种算法有效的解决了rr轮询算法的缺点
    • (3) sh(source hashing)源地址散列:
      主要实现会话绑定,解决session会话共享问题,源地址散列会根据请求的源ip地址,作为关键字,在静态分配的hash表中找出对应的服务器,若该服务器没有超过负荷,就将请求分配到该服务器
    • (4) dh(destination hashing)目标地址散列,把同一个ip地址的请求,发送给同一个server
      目标地址散列调度算法是针对目标ip地址的负载均衡,是一种静态映射算法,把目标ip地址作为关键字,在静态分配的hash表中找到对应的服务器,若该服务器可用并没有超过负荷,则将请求发送到该服务器
  • 2 动态调度算法:
    • (1) LC(least connection)最少连接:
      当有用户发起访问请求时,lc算法将会把请求分配到集群中连接数最少的服务器上
    • (2) wlc(weight least connection scheduling)加权最少连接:
      加权最少连接算法是最少连接的升级版,各个服务器用想应的权重值表示其处理连接的性能,默认权重值为1,加权最少连接调度在调度访问请求时,会尽量使服务器的已建立连接和权重值成比例
      也就是活动的连接数除以权重,谁小,挑谁
    • (3) sed(shortest expected)最短延迟调度:
      在wlc基础上进行改进,不在考虑非活动状态,把当前处于活动状态的数目+1,数目最小的,则接受下次访问请求,+1的目的是为了考虑加权的时候,非活动链接过多,当权限过大,会导致非空闲的节点一直处于无连接状态
    • (4) nq(nerver queue)永不排队,改进的sed
      无需队列,如果有SR节点的连接数为0,那么直接将访问请求分配过去,不需要进行sed运算
    • (5) LBLC(locality based leastconnection)基于局部性的最少连接
      此算法是根据请求报文的目标ip地址的负载均衡调度,目前主要用于cache集群系统,因为cache集群中的客户请求报文的目标ip地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载剧本平衡的请求下,将相同的目标ip地址的请求调度到同一个服务器,来提高整个web服务的访问局部性和主存cache的命中率,从而调整整个集群系统的处理能力
      基于局部性的最少连接调度算法根据请求的目标ip地址找出该目标地址最近使用的SR,若该SR可用,将发送请求,若该服务器不可用,则用最少连接的原则选出一台可用服务器来进行匹配
    • (6) LBLCR(Locality-Based Least Connections withReplication)带复制的基于局部性最少连接,此种算法是针对目标ip地址的负载均衡,该算法根据请求的目标地址ip找出该地址对应的服务组,按最少连接的原则从服务组中选出一台服务器,若服务器没有超载,则发送请求到该服务器,若该服务器超载或者不可用,则按照最小连接的原则从这个集群中选出一台服务器,将该服务器添加到服务组中,在将请求发送到该服务器,同时当该服务器组中有一段时间没有被修改,将最忙的服务器从组中剔除,以降低复制的程度

五、LVS-实战:搭建HTTP负载均衡集群

1.搭建搭建lvs-nat模式的http负载集群

环境需求:

主机名 主机作用 IP/DIP VIP
DC LVS服务器(DC) 192.168.48.137 172.25.0.100
SR1 apache服务器1(SR) 192.168.48.138 网关为DC网关
SR2 apache服务器2(SR) 192.168.48.141 网关为DC网关
client 客户端 (用于测试) 192.168.48.134 客户端不需要VIP

SR1配置

//关闭selinux和防火墙
[root@SR1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@SR1 ~]# setenforce 0
[root@SR1 ~]# systemctl disable --now firewalld.service 
 
//配置ip
[root@SR1 ~]# nmcli connection modify ens33 ipv4.adDCesses 192.168.202.138/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes 
[root@SR1 ~]# nmcli connection up ens33 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
 
//配置好yum源,然后安装httpd,然后配置好网站首页
[root@SR1 ~]# dnf -y install httpd
[root@SR1 ~]# echo "SR1" > /var/www/html/index.html
[root@SR1 ~]# systemctl enable --now httpd
 

SR2配置

//关闭selinux和防火墙
[root@SR2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@SR2 ~]# setenforce 0
[root@SR2 ~]# systemctl disable --now firewalld.service 
 
//配置ip
[root@SR2 ~]# nmcli connection modify ens33 ipv4.adDCesses 192.168.202.141/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes 
[root@SR2 ~]# nmcli connection up ens33 
 
//配置好yum源,然后安装httpd服务,然后配置好网站首页
[root@SR2 ~]# dnf -y install httpd
[root@SR2 ~]# echo "SR2" > /var/www/html/index.html
[root@SR2 ~]# systemctl enable --now httpd
 

DC配置

//关闭selinux和防火墙
[root@DC ~]# systemctl disable --now firewalld.service 
[root@DC ~]# setenforce 0
[root@DC ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
 
//再给DC,添加一块网卡,我这里添加的是仅主机模式网卡,以便区分,网段为:172.25.0.0
 
//设置网卡ip,172.25.0.100
[root@DC ~]# nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
ens33               2d8ea51b-2f19-4728-b52b-e396e30a4c3a  ethernet  ens33  
Wired connection 1  40dc9fe4-4f0e-30f8-898e-1c2d8422513d  ethernet  ens37  
[root@DC ~]# nmcli connection modify Wired\ connection\ 1 con-name ens37 ipv4.adDCesses 172.25.0.100/24 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@DC ~]# nmcli connection up ens37 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@DC ~]# ip a |grep ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 172.25.0.100/24 brd 172.25.0.255 scope global noprefixroute ens37
 
//开启转发功能
[root@DC ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
 
[root@DC ~]# sysctl -p
net.ipv4.ip_forward = 1
 
//配置好好两台web服务器后,最后再安装ipvsadm并添加规则
[root@DC ~]# dnf -y install ipvsadm
[root@DC ~]# ipvsadm -A -t 172.25.0.100:80 -s rr
[root@DC ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.202.138:80 -m
[root@DC ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.202.141:80 -m
[root@DC ~]# ipvsadm -Ln
IP Virtual Server veSRion 1.2.1 (size=4096)
Prot LocalAdDCess:Port Scheduler Flags
  -> RemoteAdDCess:Port           Forward Weight ActiveConn InActConn
TCP  172.25.0.100:80 rr
  -> 192.168.202.138:80           Masq    1      0          0         
  -> 192.168.202.141:80           Masq    1      0          0   
[root@DC ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DC ~]# systemctl restart ipvsadm.service 
[root@DC ~]# systemctl enable ipvsadm.service 
 

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl http://172.25.0.100
SR2
[root@client ~]# curl http://172.25.0.100
SR1
[root@client ~]# curl http://172.25.0.100
SR2
[root@client ~]# curl http://172.25.0.100
SR1

2.搭建搭建lvs-DC模式的http负载集群

环境需求:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值