LVS概念
LVS(Linux Virtual Server):Linux 虚拟服务器
LVS是个负载均衡设备,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,所以说后端的服务称作real server。LVS分为两段,前一段称为ipvsadm(管理集群服务的命令行工具),后面一段叫做ipvs(内核模块)
LVS的类型
1、LB:Load Baiancing,负载均衡集群
特性:将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行
2、HA(High Availability):高可用集群
特性:提高服务的可用性
计算方法:在线时间/(在线时间/故障处理时间)
3、HP(High Performance):高性能集群
特性:提高服务的性能
LVS集群专业术语
-
vs:Virtual Server、Director,Dispatcher、Balancer
-
rs:Real Server
-
CIP(Client IP):客户端IP
-
VIP(Virtual Server IP):虚拟IP,用于与客户端通信的地址
-
DIP(Director IP):调度器IP,于与Real Server通信的地址
-
RIP(Real Server IP):后端真实服务器的IP地址
LVS集群的类型
一、LVS-NAT
多目标的DNAT,通过Director将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发。
特点:
1、RIP和DIP必须在同一IP网络,且应该使用私有地址,RS的网关要指向DIP(包组响应报文必须经由vs)
2、支持端口映射
3、VS必须是Linux,RS可以是任意OS
4、请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈
二、LVS-DR
Director通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址,ip首部不会发生变化(CIP<–>VIP)
核心要点:
1、每个RS主机上都应有VIP,并且RIP配置在物理接口上,VIP配置在内置接口lo的别名上(lo:0),来自Director的请求报文进来时,经由RIP再到lo:0再到用户空间的进程,回去时控制响应报文先经过lo:0(此时源IP已封装成VIP)再由RIP离开,保证客户端接收到的报文源IP是VIP,目标IP是CIP。
2、让RS主机禁止响应ARP广播级别和通告级别
-
响应级别设定目的:当客户端请求过来时,让Director上的VIP响应,而不是让RS上的VIP响应,保证请求报文一定走Director。
-
通告级别设定目的:当Director向RS转发时,经由的是RIP的接口,由于RS和Director都有VIP,会造成地址冲突,通过设定ARP通告级别可让其总是避免向非本网络通告(经由的是RIP接口,不会向非RIP接口的网络通告),因此解决了地址冲突问题。
过程:
1、客户请求在前端路由器发送ARP广播来获取Director的VIP所在网卡的MAC地址,获知后,在请求报文上封装MAC首部(源MAC是路由器接口的MAC,目标MAC是Director上VIP接口的MAC),保证将报文发送至Director。
2、Director接收到报文后,看到目标地址和目标MAC是自己,于是拆封MAC首部,请求报文进入INPUT链,之后发现是集群服务,于是准备向后端主机转发。
3、Director将请求报文(源地址CIP/目标地址VIP)再次封装一个MAC首部(源MAC是DIP的MAC/目标MAC是RIP的MAC)发往后端挑选出来的RS,RS发现目标MAC是自己,拆了MAC首部,发现目标地址是VIP,于是继续向lo:0转发,最终到达用户空间的进程给予响应,开始构建响应报文。
4、控制响应报文先经过lo:0(此时源IP已封装成VIP)再由RIP离开,保证客户端接收到的报文源IP是VIP,目标IP是CIP;此时可能需要另外一个路由器,如图所示,RIP的网关指向此路由,向外转发。
特点:
1、RS的RIP可以使用私有地址,也可以使用公网地址
2、RS跟Director必须在同一物理网络,RS的网关必须不能指向DIP
3、不支持端口映射
4、请求报文必须由Director调度,但响应报文必须不能经由Director
5、RS可以使用大多的OS
三、LVS-TUN
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是源IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP)。
特点:
1、RIP,DIP,VIP全得是公网网址。
2、RS网关不能指向也不可能指向DIP。
3、请求报文经由Director转发,但响应报文将直接发往CIP。
4、不支持端口映射。
5、RS的OS必须支持隧道功能。
四、LVS-FULLNAT(不是标准类型)
NAT模型的一种延伸,通过同时修改请求报文的源IP地址(CIP–>DIP)和目标地址(vip–>RIP)进行转发。
特点:
1、VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通。
2、RS收到的请求报文源IP为DIP,因此响应报文将直接响应给DIP。
3、请求和响应报文都经由Director。
4、支持端口映射
LVS的调度算法
根据其调度时是否考虑后端主机的当前负载,可分为静态方法个动态方法。
静态调度:仅根据算法本身进行调度
1、RR(Round Robin):轮询/论调/轮叫
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。(这里是不考虑每台服务器的处理能力)
2、WRR(Weighted RR):加权轮询,以权重之间的比例实现在各主机之间进行调度
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
3、SH(Source Hashing):源地址哈希,主要实现会话绑定,能够将此前建立的session信息保留
源地址哈希调度算法正好与目标地址哈希调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的哈希表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的哈希函数与目标地址哈希调度算法的相同。它的算法流程与目标地址哈希调度算法基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。
4、DH(Destinon Hashing):目标地址哈希,把同一个IP地址的请求,发送给同一个server
目标地址哈希调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址哈希调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的哈希表找出对应的服务器,若该服务器是可用的且未超负荷,将请求发送到该服务器,否则返回空。
动态调度:根据算法及个RS当前的负载状态进行调度
1、LC(leadt connections):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
当前各RS负载值(Overhead)的计算方法:
Overhead=Active(当前活动连接数)*256+Inactive(非活动连接数)
2、WLC(Weighted LC):加权最少连接
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
当前各RS负载值(Overhead)的计算方法:
Overhead=(Active*256+Inactive)/weigth(权重)
3、SED(Shretest Expecttions Delay):最短期望延迟
基于wlc算法
当前各RS负载值(Overhead)的计算方法:
Overhead=(Active+1)*256/weigth
4、NQ(Never Queue):永不排队(改进的sed)
无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。
5、LBLC(Locality-Based Least Connection):基于局部性的最少连接
基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个台服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6、LBLCR(Locality-Based Least Connections with Replication):带复制的基于局部性最少链接
带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
ipvsadm命令
1、管理集群服务:
添加: ipvsadm -A -t|u|f service-address [-s scheduler] service-address: -t:vip:port,tcp协议的集群服务 -u:vip:port,udp协议的集群 -f: FWM,防火墙标记 修改: ipvsadm -E -t|u|f service-address [-s scheduler] 删除: ipvsadm -D -t|u|f service-address [-s scheduler]
2、管理集群服务中的RS
添加: ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight] -t|u|f service-address:事先定义好的某集群服务 -r server-address:某RS的地址,在NAT模型中,可以使用IP:PORT事先端口映射 [-g|i|m]:LVS类型 -g:DR -I:TUN -m:NAT [-w weight]:定义服务器权重 修改: ipvsadm -e -t|u|f service-address -r server-address [-g|i|m] [-w weight] 删除: ipvsadm -d -t|u|f service-address -r server-address
3、查看集群服务:
ipvsadm -L|l [options] -n,--numeric:数字格式显示端口 --exact:精确值 -c,--connection:显示IPVS连接 --stats:统计数据 --rate:速率 --timeout:显示tcp、tcpfin和udp会话的超时时间值 --sort:跟协议、地址、端口进行排序,默认为升序
4、清空所有集群服务:
ipvsadm -C -C:清空ipvs规则
5、保存和重载规则:
保存: ipvsadm -S > /PATH/TO/SOME_RULE_FILE ipvsadm-save > /PATH/TO/SOME_RULE_FILE 重载: ipvsadm -R < /PATH/TO/SOME_RULE_FILE ipvsadm-restore < /PATH/TO/SOME_RULE_FILE
6、清空计数器:
ipvsadm -Z [-t|u|f service-address]
原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/69014
评论列表(1条)
画的图不错,如果有一定的抓包分析过程会更好,尤其是封装和解包过程,这部分就更容易理解理解原理了。