负载均衡集群LVS调度算法实战
目录:
一、复习LVS的四种模式
二、LVS介绍
三、调度算法
四、实操演示
一、复习LVS的四种模式
1.第一种为NAT模式
2.第二种为DR模式
3.第三种为tun模式
4.第四种为fullnat模式。
Snat与dnat的比较:
/**
*Nat在iptable里面采取的是使用私有的地址将信息发送到互联网
*上。
与之对应的是SNAT,snat是将原地址进行了转换。
Snat适用*的场景是内网(私网地址)访问互联网,本质上是一个地址互换的
*过程。
请求报文如果替换的是原地址,那么这种模式就叫做snat,*如果替换的是目标地址,那么这种模式就叫做dnat。Dnat适用的
*场景是互联网用户访问局域网中的服务器(私网地址)。
**/
Nat模型的特点:
/**
*请求报文时替换的是目标地址;请求报文与响应报文时都需经过vs,
*且支持端口映射。
VS上可以同时拥有两个地址,一个是vip(虚拟*地址),一个是dip;在nat模式中这两个地址都会被使用,其中,*dip是用于连接内网的,vip是用于连接外网的;此模式下的nat的*配置类似于路由器的配置。注意,nat模式下可以只配置一个网卡。
*dr模型下的数据报文进入到vs服务器。
Vs服务器会修改目标地址*(数据链路层),这个特性决定了它不能跨路由,故vs服务器与*rellserver之间是不能够存在路由器的,只能存在交换机(地理位置*相隔较近)。
在这个过程中,获取对方地址的方式是广播。Dr模型的*局限是无法修改端口,不支持端口映射。
**/
二、LVS介绍
lvs-tun(隧道)模式
1.lvs-tun :
转发方式∶不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP ),将报文发往挑选出的目标RS; RS直接响应给客户端(源IP是VIP,目标IP是CIP )
(1) DIP, VIP, RIP都应该是公网地址
//DIP,VIP,RIP不一定都是公网地址,VIP,RIP可以是私网地址。
(2) RS的网关一般不能指向DIP
//RS如果指向了DIP,便失去了存在的意义。
⑶请求报文要经由Director,但响应不能经由Director
//Director在此处指的就是vs服务器。
(4)不支持端口映射
//因为实际修改的只是ip头部,而不是数据报文的头部。
(5)RS的OS须支持隧道功能
//RS在收到端口后,理论上应该存在两个端口,ip头部与数据
//报文头部,这时的rs会去掉一个,留下一个.但是这种模式,一//般的系统都不支持。
Tun模式辅助理解示意图:
/**
*客户端发送请求,到达lvs调度器;lvs服务器存在两个地址,*一个是vip地址,另一个是dip地址;请求到达lvs服务器之*后,如果是tainull模式,该模式会在src的位置对数据报文进*修改。该模式与以往的不同的是,它会在原有的地址上新建一*数据报文头部(dip rip1),这样就存在两个数据报文头部,这*会出现数据报文覆盖的问题。
新的ip报文在传送的过程中可能*经过路由器,这时我我们的后端服务器也必须配置一个对应的*vip地址。
好处是可以实现跨机房,跨区域调度。回应数据报文*是否必须经过原路径返回?
答案是否定的,这时的数据报文可 *以经过其他的路由器回到客户端,都可以不经过lvs服务器。
*好处是可以实现跨机房,跨异地,跨区域的远程调度连接,如*一些大公司在全国各地都有自己的服务器来对外提供服务。
*tun模式下的rs服务器还需进行部分特殊设置才可以。
**/
TUN模式IP包调度过程:
/**
*如图所示,客户端发送请求后,经过lvs服务器之后,到达了web
*端服务器,调度时会添加一个新的数据报文头部,到达real server
*之后,real server在回应时会把原来新加的报文头部删除掉,获取*初始的报文头部,然后直接回应。
图中绿色的线便是real server
*通过另一条线路的回应过程。回应时时的源地址是VIP,目标地址是*CIP。这样的好处是容错性高,进而实现异地容灾。
**/
lvs-fullnat模式
.lvs-fullnat :通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP -->DIP
VIP --> RIP
辅助理解示意图:
/**
*客户端发送请求在经过一级转换后,dip变成了原地址,rip变为了
*目标地址,特别注意与nat模式的区别,这里的cip被替换成了dip
*vip被替换成了rip中的某一个ip。
这样做的好处是跨异地处理(线*路之间可以加路由器)。区别是返回日志不同,替换地址不同。
**/
(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络﹔因此,RIP的网关一般不会指向DIP
(2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
(3)请求和响应报文都经由Director
(4)支持端口映射
//nat模式是系统内核默认支持的,fullnat模式是系统内核默认不支//持的。nat模式与Fullnat模式本质上的区别是一个只替换了原地//址,
//另一个即替换了原地址也替换了目标地址。
注意:此类型kernel默认不支持
LVS工作模式总结:
|
VS/NAT
|
VS/TUN
|
VS/DR
|
Server |
any |
Tunneling |
Non-arp device |
Server network |
private |
LAN/WAN |
LAN |
Server number |
low(10~20) |
High(100) |
High(100) |
Server gateway |
Load balancer |
own router |
Own router |
1. lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat : RIP的网关要指向DIP
lvs-fullnat : RIP和DIP未必在同一IP网络,但要能通信
2.lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr :通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun :通过在原IP报文外封装新IP头实现转发,支持远距离通信
三、调度算法
ipvs scheduler
1. ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
两种∶静态方法和动态方法
2.静态方法∶仅根据算法本身进行调度
//上午静态调度指的就是在进行定义完之后仅仅只根据自身固定的算法来进行调度
//而不考虑各RS当前的负载状态的方法就叫做静态方法。
//与之相反的是动态算法会考虑RS当前的负载状态。如果RS目前//的压力较大,调用的资源也会相应的减少,反之,调用的资源就会//变多。
1、RR : roundrobin,轮询
//轮询指的就是几台服务器同时对外进行服务的一种调度方式
//简言之,就是轮流提供服务。
2、WRR : Weighted RR,加权轮询
//加权调度需要考虑到后端服务器的性能,加权调度可以做到安照一定的比例给服务器分配任务,尽可能的做到物尽其用,整体最优化。
3、SH : Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
SH辅助理解示意图如下:
/**
*新问题,当客户端访问服务器时,会存在一个信息存储不均衡的
*问题,存储的信息无法与调度的对象完全同步,导致调度失败。
*Hash的含义指的是将记录下来的ip地址进行hash运算,进而
*出一个摘要,注意这里的hash值与ip地址挂钩,密切相关。
*第四种是目标地址Hash,两次调度的结果相同,这里看的是上
*一次调度的结果,上一次是调度到哪一个机器,那么这一次也就
*调度哪一个机器上去。
**/
4、DH : Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如︰宽带运营商
DH辅助理解示意图如下:
/**
*DH会通过目标地址将数据存放在缓存器中去,以此来提高缓存
*(cache)的利用率,从而进一步提高互联网的访问速度,节省
*宽。当后端服务器压力过大时,可以适当的给其添加一些缓存服
*器,这样用户在访问时,便会先来到缓存服务器进行访问,如果
*没有,再进入后端服务器进行访问。
缓存服务器会在后端服务器与
*用户需求之间记录用户所需的数据,以此来提高缓存利用率。
*根目标地址来访问便可以将用户常用的页面,视频等等缓存下来,
*以此来提高缓存的利用率。
**/
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
//动态方法下的调度算法需要考虑到后端的负载情况
1、LC : least conhections适用于长连接应用
Overhead=activeconns*256+inactiveconns
LC辅助理解示意图:
/**
*LC可以实现资源的最大合理应用话,防止出现资源浪费和机器
*负载过重的情况出现,更好的实现了均衡负载。
该算法可以通过*Overhead=activeconns*256+inactiveconns该公式计算出正*在使用的活动连接。计算结果值越大,被调度的可能性便越小,计*算结果值越小,被调度的可能性便越大。LC算法存在的一个主要*缺陷是无法考虑到后端的性能问题。
**/
2、WLC : Weighted LC,默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
WLC辅助理解示意图:
/**
*WLC算法可以用来弥补LC算法无法考虑到后端机器性能的问
*题。
该算法可以通过
*Overhead=(activeconns*256+inactiveconns)/weight这个公式*计算出对应的权重。同时,WLC算法也存在一个缺陷:无法解决用*户初次连接LVS服务器时的调度问题。
**/
3、SED : Shortest Expection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
SED辅助理解示意图:
/**
*SED算法可以用来弥补WLC无法解决用户初次分配时出现的调*度问题的缺陷。
SED算法可以通过*Overhead=(activeconns+1)*256/weight这个公式计算出第一次*调度时应该选择的最优服务器。同时,该算法也存在一个问题:容
*易导致性能优异的服务器过量负载,而性能较差的服务器负载过小。
**
4、NQ: Never Queue,第一轮均匀分配,后续SED
NQ辅助理解示意图:
/**
*NO算法解决了SED算法存在的缺陷问题。该算法会在第一次
*分配时给每一天后端服务器都分配一些任务,在第二次任务分配*时再使用Overhead=(activeconns+1)*256/weight公式进行性能*调优,调度分配,性能优者多分配一些,性能一般的就少分配一些。
**/
5、LBLC : Locality-Based LC,动态的DH算法,使用场景∶根据负载状态实现正向代理
LBLC算法辅助理解示意图:
//该算法的主要理念是根据负载状态实现正向代理。
6、LBLCR: LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
LBLCR算法的辅助理解示意图:
/**
*其主要的原理是通过复制功能从根本上解决了LBLC负载不均衡
*的问题,进而提高了设备的使用效率。
**/
ipvs
1. ipvsadm/ipvs :
2. ipvs :
grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64支持的协议:TCP ,r UDP,AH,ESP,AH_ESP,SCTP
ipvs辅助理解示意图:
/**
*ping测试不出调度效果,因为无法到达后端的real server。
**/
3.ipvs集群︰
管理集群服务
管理服务上的RS
ipvsadm包构成
4.ipvsadm :
5.程序包: ipvsadm
- Unit File: ipvsadm.service
- 主程序∶/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config
ipvsadm命令
1.ipvsadm命令∶
2.核心功能︰
集群服务管理:增、删、改
集群服务的RS管理∶增、删、改查看
ipvsadnil -A|E-tluf service-address [-s scheduler] [-p [timeout] [-M netmask] [--pepersistence_engine] [-b sched-flags]
ipvsadm -D -tlulf service-address 删除
ipvsadm -C清空
ipvsadm -R重载
ipvsadm -s [-n]保存
ipvsadm -ale -tlulf service-address -r server-address [options]
ipvsadm -d -tlu|f service-address -r server-address
ipvsadm -Lll [options]
ipvsadm -z [-tlulf service-address]
三,实操演示
#grep -I ipvs /boot/config-3.10.0-693.e17.x86_64
#grep -i ipvs /boot/config-3.10.0-693.e17.x86_64
#grep -i ipvs -C 10/boot/config-3.10.0-693.e17.x86_64
运行以上代码的结果如下:
##
schedu1er
#
CONFIG_IP_vS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VSLC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_vs_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_vS_SH=m
CONFIG_IP_vs_SED=m
CONFIG_IP_Vs.NQ=m
#disepel
#yum info ipvsadm
运行结果如下图:
#yum install ipvsadm(安装程序包)
#rpm -ql ipvsadm(查看程序包的内容)
#rpl -ql tables