一、LVS负载均衡
负载均衡集群是Load Balance 集群的缩写,翻译成中文就是负载均衡集群。经常使用的负载均衡开源软件有Nginx、LVS、Haproxy,商业的硬件负载均衡装备有F5、Netscale等。
二、负载均衡LVS基本介绍
LB集群的架构和原理很简单,就是当用户的要求过来时,会直接分发到Director Server上,然后它把用户的要求根据设置好的调度算法,智能均衡的分发后端真正服务器(real server)上。为了不区别机器上用户要求的数据不一样,需要用到了同享存储,这样保证所有用户要求的数据是一样的。
这是由章文嵩博士发起的一个开源项目,官网:http://www.linuxvirtualserver.org现在LVS已是 Linux 内核标准的一部份。使用 LVS 可以到达的技术目标是:通过 LVS 到达的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务集群,它具有良好的可靠性、可扩大性和可操作性。从而以低价的本钱实现最优的性能。
LVS集群采取IP负载均衡技术和基于内容要求分发技术。调度用具有很好的吞吐率,将要求均衡地转移到区别的服务器上履行,且调度器自动屏蔽掉服 务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。全部服务器集群的结构对客户是透明的,而且无需修改客户端和服务器真个程序。
三、LVS的体系架构
负载均衡的原理很简单,就是当客户端发起要求时,要求直接发给Director Server(调度器),这时候会根据设定的调度算法,将要求依照算法的规定智能的分发到真实的后台服务器。以到达将压力均摊。但是我们知道,http的连接时无状态的,假定这样一个场景,我登录某宝买东西,当我看上某款商品时,我将它加入购物车,但是我刷新了一下页面,这时候由于负载均衡的缘由,调度器又选了新的一台服务器为我提供服务,我刚才的购物车内容全都不见了,这样就会有十分差的用户体验。所以就还需要一个存储同享,这样就保证了用户要求的数据是一样的。所以LVS负载均衡分为三层架构(也就是LVS负载均衡主要组成部份):
如图:
LVS的各个层次的详细介绍:
3.1、Load Balancer层
位于全部集群系统的最前端,有一台或多台负载调度器(Director Server)组成,LVS模块就是安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的要求分发给Server Array层的利用服务器(Real Server)上。同时,在Director Server上还要安装队Real Server服务的监控模块Ldirectord,此模块用于检测各个Real Server服务的健康状态。在Real Server不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
3.2、Server Arrary层
由一组实际运行利用服务的机器组成,Real Server可以是WEB 服务器、MALL服务器、FTP服务器、DNS服务器、等等,每一个Real Server 之间通太高速的LAN或散布在各地的WAN相连接,在实际的利用中,Director Server也能够同时兼任Real Server的角色。
3.3、Shared Storage层
是为所有Real Server提供同享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列装备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统同享数据,但是NFS在繁忙的业务系统中,性能其实不是很好,此时可以采取集群文件系统,列如Red hat的GFS文件系统等等。一个公司得有一个后台账目吧,这才能调和。不然客户把钱付给了A,而换B接待客户,由于没有相同的账目。B说客户没付钱,那这样就不是客户体验度的问题了。
四、LVS的实现原理
(1)当用户负载均衡调度器(Director Server)发起要求,调度器将要求发往至内核空间
(2)PREROUTING 链首先会接遭到用户要求,判断目标IP确切是本地IP,将数据包发往 INPUT 链
(3)IPVS 是工作在 INPUT 链上的,当用户要求到达INPUT时,IPVS 会将用户要求和自己定义好的集群服务进行比对,如果用户要求的就是集群服务,那末此时 IPVS 会强行修改数据包里的目标IP地址和端口,并将新的数据包发往 POSTROUTING 链
(4)POSTROUTING 链将收到数据包后发现目标IP地址恰好是自己的后端服务器,那末此时通过选路,将数据包终究发送给后真个服务器
五、LVS的工作原理
LVS 的工作模式分为4中分别是 NAT,DR,TUN,FULL-NAT。其中做个比较,由于工作原理的关系的,NAT的配置最为简单,但是NAT对调度器的压力太大了,致使其效力最低,DR和TUN的工作原理差不多,但是DR中,所有主机一定要处于同一个物理环境中,而在TUN中,所有主机可以散布在区别的位置,服务器一个在纽约,一个在深圳。最多利用的是FULL-NAT。
六、LVS相关术语
(1)DS:Director Server 指的是前端负载均衡器节点。
(2)RS:Real Server 后端真实的工作服务器。
(3)VIP:向外部直接面向用户要求,作为用户要求的目标的ip地址。
(4)DIP:Director Server IP 主要用于和内部服务器通讯的ip地址。
(5)RIP:Real Server IP 后端服务器的ip地址。
(6)CIP:Client IP 访问客户真个IP地址。
七、NAT 模式-网络地址转换
这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的要求数据包时(要求的目的IP为VIP),根据调度算法决定将要求发送给哪一个后真个真实服务器(RS)。然后调度就把客户端发送的要求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就可以够接收到客户的要求数据包了。真实服务器响应完要求后,查看默许路由(NAT模式下我们需要把RS的默许路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
VS/NAT是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director便可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也能够兼为一台RealServer。VS/NAT的体系结构如图所示。
八、NAT 模式工作原理
(1)当用户要求到达Director Server,此时的要求数据报文会先到内核空间的PREROUTING链。此时报文的源IP为 CIP,目标IP为 VIP。
(2)PREROUTING检查发现数据包的目标IP 是本机,将数据包发送至INPUT链。
(3)IPVS比对数据包要求的服务会不会为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发送至POSTROUTING链。此时报文的源IP为 CIP,目标IP为RIP。
(4)POSTROUTING链通过选路,将数据包发送给Real Server。
(5)Real Server对照发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为 RIP,目标IP为 CIP。
(6)Director Server在响应客户端前,此时会将源IP地址修改成自己的VIP地址,然后响应给客户端。此时报文的源IP为 VIP,目标IP为CIP。
九、DR 模式-直接路由模式
DR模式也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有区别,VS/DR通过改写要求报文的MAC地址,将要求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开消。这类方式是三种负载调度机制中性能最高最好的,但是一定要要求Director Server与Real Server都有一块网卡连在同一物理网段上。
Director和RealServer一定要在物理上有一个网卡通过不中断的局域网相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络装备上(如lo或tunl),Director的VIP地址对外可见,而RealServer的VIP对外是不可见的。RealServer的地址便可以是内部地址,也能够是真实地址。
DR模式是通过改写要求报文的目标MAC地址,将要求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开消,对集群中的真实服务器也没有必要一定要支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,一定要在同一个局域网环境。
9.1、DR 模式工作原理图
(1)首先用户用CIP要求VIP。
(2)根据上图可以看到,不论是Director Server 或者Real Server 上都需要配置相同的VIP,那末当用户要求到达我们的集群网络的前端路由器的时候,要求数据包的源地址为CIP,目标地址为VIP;此时路由器还会发广播问谁是VIP,那末我们集群中所有的节点都配置有VIP,此时谁先响应路由器那末路由器就会将用户要求发给谁,这样一来我们的集群系统是不是是没成心义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或使用一种机制不让Real Server 接受来自网络中的ARP 地址解析要求,这样一来用户的要求包都会经过Director Server。
(3)当用户要求到达Director Server,此时要求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
(4)PREROUTING检查发现数据包的目标IP为本机,将数据包发送至INPUT链。
(5)IPVS对照数据包要求的服务会不会为集群服务,若是,将要求报文中的源MAC地址修改DIP的MAC地址,将目标MAC地址修改成RIP的MAC地址,然后将数据包发至POSTROUTING链,此时的源IP和目标IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。
(6)由于DS和RS在同一个网络中,所以是通过二层来传输,POSTROUTING链检查目标MAC地址为RIP的MAC地址,那末此时数据包将会发至Real Server。
(7)RS发现要求报文的MAC地址是自己的MAC地址,就接收报文。处理完成以后,将相应报文通过lo接口传送给eth0网卡然后向外发出。此时的源IP地址为VIP,目标IP为CIP。
(8)响应报文终究投递至客户端。
配置DR的三种方式:
- 第一种:在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通讯也不用再要求了,这个绑定是静态的,所以它也不会失效,也不会再次发起要求,但是有个条件,我们的路由装备一定要有操作权限才能够绑定MAC地址,万一这个路由器是运营商操作的,我们没法操作怎样办?第一种方式固然很简单,但未必可行。
- 第二种:在个别主机上(列如:红帽)它们引进的有一种程序arptables,它有点类似iptables,它肯定是基于arp或MAC做访问控制的,很明显我们只需要在每个Real Server上定义arptables规则,如果用户arp广播要求的目标地址是本机的vip则不予响应,或说响应的报文不让出去,很明显(gateway)是接收不到的,也就是director响应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables。
- 第三种:在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接遭到ARP要求时的响应级别;第二个是arp_announce定义将自己地址向外通告时的通告级别。[提示:很明显我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调剂更具有朴实性,它还不依赖额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置方式
arp_ignore:定义接收到ARP要求时的响应级别
0:只要本地设置的有相应的地址,就给予响应。(默许)
1:仅回应目标IP地址是本地的入网地址的arp要求。
2:仅回应目标IP地址是本地的入网地址,而且源IP和目标IP在同一个子网的arp要求。
3:不回应网络界面的arp要求,而只对设置的唯一和连接地址做出回应。
4⑺:保存未使用。
8:不回应所有的arp要求。
arp_announce:定义将自己地址向外通告的通告级别:
0:将本地任何接口上的任何地址向外通告。
1:视图仅向目标网络通告与其网络匹配的地址。
2:仅向与本地接口上地址匹配的网络进行通告。
9.2、DR模式的特性
- 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。
- Director和RS的VIP为同一个VIP。
- RS可使用私有地址,也能够是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问。
- RS跟Director Server一定要在同一个物理网络中。
- 所有的要求报文经过Director Server,但响应报文一定要不能经过Director Server。
- 不支持地址转换,也不支持端口转换。
- RS 可以是大多数常见的操作系统。
- RS 的网关绝不允许指向DIP(由于我们不允许它经过Director)
- RS上的lo接口配置VIP的ip地址
- DR模式是市面上用得最广的。
- 缺点:RS和DS一定要在同一机房。
十、Tunnel 模式
10.1、Tunnel 模式工作原理
(1)当用户要求到达Director Server,此时要求的数据报文会先拿到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
(2)PREROUTING检查发现数据包的目标IP是本机,将数据包发送至INPUT链。
(3)IPVS对照数据包要求的服务会不会为集群服务,若是,在要求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链,此时源IP为DIP,目标IP为RIP。
(4)POSTROUTING链根据最新封装的IP报文,将数据包发送至RS(由于在外层多封装了一层IP首部,所以可以理解为 此时通过隧道传输)。此时源IP为DIP,目标IP为RIP。
(5)RS接收到报文后发现是自己的IP地址,就将报文接收下来,撤除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那末此时RS开始处理要求,处理完成以后,通过lo接口发送给eth0网卡,然后向外传递。此时源IP为VIP,目标IP为CIP。
(6)响应报文终究投递至客户端。
10.2、Tunnel模式的特性
- RIP、VIP、DIP全是公网地址。
- RS的网关不会也不可能指向DIP。
- 所有的要求报文经过Director Server,但响应报文一定要不能经过Director Server。
- 不支持端口映照。
- RS的系统一定要支持隧道。
十一、LVS 的调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将要求派发下去。
动态调度算法:调度器会去判断后端服务器的繁忙程度,然后根据调度算法动态得派发要求。
11.1、rr:轮询(round robin)
这类算法是最简单的,就是按顺次循环的方式将要求调度到区别的服务器上,该算法最大的特点就是简单。轮询算法假定所有的服务器处理要求的能力都是一样的,调度器会将所有的要求平均分配给每一个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲要求顺次发下去。如果A服务器上的要求很快要求完了,而B服务器的要求一直延续着,将会致使B服务器一直很忙,而A很闲,这样便没起到均衡的左右。
11.2、wrr:加权轮询(weight round robin)
这类算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那末分发的要求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会斟酌每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的要求会是服务器A的2倍。权值越高的服务器,处理的要求越多。
11.3、dh:目标地址散列调度算法 (destination hash)
简单的说,行将同一类型的要求分配给同一个后端服务器,例如将以 .jgp、.jpg等结尾的要求转发到同一个节点。这类算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这类调度算法主要利用在使用了缓存节点的系统中,提高缓存的命中率。
11.4、sh:源地址散列调度算法(source hash)
行将来自同一个ip的要求发给后真个同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session同享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将致使要求分配的不均衡。
11.5、lc:最少连接数(least-connection)
这个算法会根据后端 RS 的连接数来决定把要求分发给谁,比如 RS1 连接数比 RS2 连接数少,那末要求就优先发给 RS1。这里问题是没法做到会话保持,即session同享。
11.6、wlc:加权最少连接数(weight least-connection)
这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派要求。
11.7、lblc:基于局部性的最少连接调度算法(locality-based least-connection)
将来自同一目的地址的要求分配给同一台RS如果这台服务器还没有满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先斟酌。
一、LVS负载均衡
负载均衡集群是Load Balance 集群的缩写,翻译成中文就是负载均衡集群。经常使用的负载均衡开源软件有Nginx、LVS、Haproxy,商业的硬件负载均衡装备有F5、Netscale等。
二、负载均衡LVS基本介绍
LB集群的架构和原理很简单,就是当用户的要求过来时,会直接分发到Director Server上,然后它把用户的要求根据设置好的调度算法,智能均衡的分发后端真正服务器(real server)上。为了不区别机器上用户要求的数据不一样,需要用到了同享存储,这样保证所有用户要求的数据是一样的。
这是由章文嵩博士发起的一个开源项目,官网:http://www.linuxvirtualserver.org现在LVS已是 Linux 内核标准的一部份。使用 LVS 可以到达的技术目标是:通过 LVS 到达的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务集群,它具有良好的可靠性、可扩大性和可操作性。从而以低价的本钱实现最优的性能。
LVS集群采取IP负载均衡技术和基于内容要求分发技术。调度用具有很好的吞吐率,将要求均衡地转移到区别的服务器上履行,且调度器自动屏蔽掉服 务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。全部服务器集群的结构对客户是透明的,而且无需修改客户端和服务器真个程序。
三、LVS的体系架构
负载均衡的原理很简单,就是当客户端发起要求时,要求直接发给Director Server(调度器),这时候会根据设定的调度算法,将要求依照算法的规定智能的分发到真实的后台服务器。以到达将压力均摊。但是我们知道,http的连接时无状态的,假定这样一个场景,我登录某宝买东西,当我看上某款商品时,我将它加入购物车,但是我刷新了一下页面,这时候由于负载均衡的缘由,调度器又选了新的一台服务器为我提供服务,我刚才的购物车内容全都不见了,这样就会有十分差的用户体验。所以就还需要一个存储同享,这样就保证了用户要求的数据是一样的。所以LVS负载均衡分为三层架构(也就是LVS负载均衡主要组成部份):
如图:
LVS的各个层次的详细介绍:
3.1、Load Balancer层
位于全部集群系统的最前端,有一台或多台负载调度器(Director Server)组成,LVS模块就是安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的要求分发给Server Array层的利用服务器(Real Server)上。同时,在Director Server上还要安装队Real Server服务的监控模块Ldirectord,此模块用于检测各个Real Server服务的健康状态。在Real Server不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
3.2、Server Arrary层
由一组实际运行利用服务的机器组成,Real Server可以是WEB 服务器、MALL服务器、FTP服务器、DNS服务器、等等,每一个Real Server 之间通太高速的LAN或散布在各地的WAN相连接,在实际的利用中,Director Server也能够同时兼任Real Server的角色。
3.3、Shared Storage层
是为所有Real Server提供同享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列装备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统同享数据,但是NFS在繁忙的业务系统中,性能其实不是很好,此时可以采取集群文件系统,列如Red hat的GFS文件系统等等。一个公司得有一个后台账目吧,这才能调和。不然客户把钱付给了A,而换B接待客户,由于没有相同的账目。B说客户没付钱,那这样就不是客户体验度的问题了。
四、LVS的实现原理
(1)当用户负载均衡调度器(Director Server)发起要求,调度器将要求发往至内核空间
(2)PREROUTING 链首先会接遭到用户要求,判断目标IP确切是本地IP,将数据包发往 INPUT 链
(3)IPVS 是工作在 INPUT 链上的,当用户要求到达INPUT时,IPVS 会将用户要求和自己定义好的集群服务进行比对,如果用户要求的就是集群服务,那末此时 IPVS 会强行修改数据包里的目标IP地址和端口,并将新的数据包发往 POSTROUTING 链
(4)POSTROUTING 链将收到数据包后发现目标IP地址恰好是自己的后端服务器,那末此时通过选路,将数据包终究发送给后真个服务器
五、LVS的工作原理
LVS 的工作模式分为4中分别是 NAT,DR,TUN,FULL-NAT。其中做个比较,由于工作原理的关系的,NAT的配置最为简单,但是NAT对调度器的压力太大了,致使其效力最低,DR和TUN的工作原理差不多,但是DR中,所有主机一定要处于同一个物理环境中,而在TUN中,所有主机可以散布在区别的位置,服务器一个在纽约,一个在深圳。最多利用的是FULL-NAT。
六、LVS相关术语
(1)DS:Director Server 指的是前端负载均衡器节点。
(2)RS:Real Server 后端真实的工作服务器。
(3)VIP:向外部直接面向用户要求,作为用户要求的目标的ip地址。
(4)DIP:Director Server IP 主要用于和内部服务器通讯的ip地址。
(5)RIP:Real Server IP 后端服务器的ip地址。
(6)CIP:Client IP 访问客户真个IP地址。
七、NAT 模式-网络地址转换
这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的要求数据包时(要求的目的IP为VIP),根据调度算法决定将要求发送给哪一个后真个真实服务器(RS)。然后调度就把客户端发送的要求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就可以够接收到客户的要求数据包了。真实服务器响应完要求后,查看默许路由(NAT模式下我们需要把RS的默许路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
VS/NAT是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director便可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也能够兼为一台RealServer。VS/NAT的体系结构如图所示。
八、NAT 模式工作原理
(1)当用户要求到达Director Server,此时的要求数据报文会先到内核空间的PREROUTING链。此时报文的源IP为 CIP,目标IP为 VIP。
(2)PREROUTING检查发现数据包的目标IP 是本机,将数据包发送至INPUT链。
(3)IPVS比对数据包要求的服务会不会为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发送至POSTROUTING链。此时报文的源IP为 CIP,目标IP为RIP。
(4)POSTROUTING链通过选路,将数据包发送给Real Server。
(5)Real Server对照发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为 RIP,目标IP为 CIP。
(6)Director Server在响应客户端前,此时会将源IP地址修改成自己的VIP地址,然后响应给客户端。此时报文的源IP为 VIP,目标IP为CIP。
九、DR 模式-直接路由模式
DR模式也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有区别,VS/DR通过改写要求报文的MAC地址,将要求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开消。这类方式是三种负载调度机制中性能最高最好的,但是一定要要求Director Server与Real Server都有一块网卡连在同一物理网段上。
Director和RealServer一定要在物理上有一个网卡通过不中断的局域网相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络装备上(如lo或tunl),Director的VIP地址对外可见,而RealServer的VIP对外是不可见的。RealServer的地址便可以是内部地址,也能够是真实地址。
DR模式是通过改写要求报文的目标MAC地址,将要求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开消,对集群中的真实服务器也没有必要一定要支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,一定要在同一个局域网环境。
9.1、DR 模式工作原理图
(1)首先用户用CIP要求VIP。
(2)根据上图可以看到,不论是Director Server 或者Real Server 上都需要配置相同的VIP,那末当用户要求到达我们的集群网络的前端路由器的时候,要求数据包的源地址为CIP,目标地址为VIP;此时路由器还会发广播问谁是VIP,那末我们集群中所有的节点都配置有VIP,此时谁先响应路由器那末路由器就会将用户要求发给谁,这样一来我们的集群系统是不是是没成心义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或使用一种机制不让Real Server 接受来自网络中的ARP 地址解析要求,这样一来用户的要求包都会经过Director Server。
(3)当用户要求到达Director Server,此时要求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
(4)PREROUTING检查发现数据包的目标IP为本机,将数据包发送至INPUT链。
(5)IPVS对照数据包要求的服务会不会为集群服务,若是,将要求报文中的源MAC地址修改DIP的MAC地址,将目标MAC地址修改成RIP的MAC地址,然后将数据包发至POSTROUTING链,此时的源IP和目标IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。
(6)由于DS和RS在同一个网络中,所以是通过二层来传输,POSTROUTING链检查目标MAC地址为RIP的MAC地址,那末此时数据包将会发至Real Server。
(7)RS发现要求报文的MAC地址是自己的MAC地址,就接收报文。处理完成以后,将相应报文通过lo接口传送给eth0网卡然后向外发出。此时的源IP地址为VIP,目标IP为CIP。
(8)响应报文终究投递至客户端。
配置DR的三种方式:
- 第一种:在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通讯也不用再要求了,这个绑定是静态的,所以它也不会失效,也不会再次发起要求,但是有个条件,我们的路由装备一定要有操作权限才能够绑定MAC地址,万一这个路由器是运营商操作的,我们没法操作怎样办?第一种方式固然很简单,但未必可行。
- 第二种:在个别主机上(列如:红帽)它们引进的有一种程序arptables,它有点类似iptables,它肯定是基于arp或MAC做访问控制的,很明显我们只需要在每个Real Server上定义arptables规则,如果用户arp广播要求的目标地址是本机的vip则不予响应,或说响应的报文不让出去,很明显(gateway)是接收不到的,也就是director响应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables。
- 第三种:在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接遭到ARP要求时的响应级别;第二个是arp_announce定义将自己地址向外通告时的通告级别。[提示:很明显我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调剂更具有朴实性,它还不依赖额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置方式
arp_ignore:定义接收到ARP要求时的响应级别
0:只要本地设置的有相应的地址,就给予响应。(默许)
1:仅回应目标IP地址是本地的入网地址的arp要求。
2:仅回应目标IP地址是本地的入网地址,而且源IP和目标IP在同一个子网的arp要求。
3:不回应网络界面的arp要求,而只对设置的唯一和连接地址做出回应。
4⑺:保存未使用。
8:不回应所有的arp要求。
arp_announce:定义将自己地址向外通告的通告级别:
0:将本地任何接口上的任何地址向外通告。
1:视图仅向目标网络通告与其网络匹配的地址。
2:仅向与本地接口上地址匹配的网络进行通告。
9.2、DR模式的特性
- 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。
- Director和RS的VIP为同一个VIP。
- RS可使用私有地址,也能够是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问。
- RS跟Director Server一定要在同一个物理网络中。
- 所有的要求报文经过Director Server,但响应报文一定要不能经过Director Server。
- 不支持地址转换,也不支持端口转换。
- RS 可以是大多数常见的操作系统。
- RS 的网关绝不允许指向DIP(由于我们不允许它经过Director)
- RS上的lo接口配置VIP的ip地址
- DR模式是市面上用得最广的。
- 缺点:RS和DS一定要在同一机房。
十、Tunnel 模式
10.1、Tunnel 模式工作原理
(1)当用户要求到达Director Server,此时要求的数据报文会先拿到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
(2)PREROUTING检查发现数据包的目标IP是本机,将数据包发送至INPUT链。
(3)IPVS对照数据包要求的服务会不会为集群服务,若是,在要求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链,此时源IP为DIP,目标IP为RIP。
(4)POSTROUTING链根据最新封装的IP报文,将数据包发送至RS(由于在外层多封装了一层IP首部,所以可以理解为 此时通过隧道传输)。此时源IP为DIP,目标IP为RIP。
(5)RS接收到报文后发现是自己的IP地址,就将报文接收下来,撤除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那末此时RS开始处理要求,处理完成以后,通过lo接口发送给eth0网卡,然后向外传递。此时源IP为VIP,目标IP为CIP。
(6)响应报文终究投递至客户端。
10.2、Tunnel模式的特性
- RIP、VIP、DIP全是公网地址。
- RS的网关不会也不可能指向DIP。
- 所有的要求报文经过Director Server,但响应报文一定要不能经过Director Server。
- 不支持端口映照。
- RS的系统一定要支持隧道。
十一、LVS 的调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将要求派发下去。
动态调度算法:调度器会去判断后端服务器的繁忙程度,然后根据调度算法动态得派发要求。
11.1、rr:轮询(round robin)
这类算法是最简单的,就是按顺次循环的方式将要求调度到区别的服务器上,该算法最大的特点就是简单。轮询算法假定所有的服务器处理要求的能力都是一样的,调度器会将所有的要求平均分配给每一个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲要求顺次发下去。如果A服务器上的要求很快要求完了,而B服务器的要求一直延续着,将会致使B服务器一直很忙,而A很闲,这样便没起到均衡的左右。
11.2、wrr:加权轮询(weight round robin)
这类算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那末分发的要求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会斟酌每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的要求会是服务器A的2倍。权值越高的服务器,处理的要求越多。
11.3、dh:目标地址散列调度算法 (destination hash)
简单的说,行将同一类型的要求分配给同一个后端服务器,例如将以 .jgp、.jpg等结尾的要求转发到同一个节点。这类算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这类调度算法主要利用在使用了缓存节点的系统中,提高缓存的命中率。
11.4、sh:源地址散列调度算法(source hash)
行将来自同一个ip的要求发给后真个同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session同享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将致使要求分配的不均衡。
11.5、lc:最少连接数(least-connection)
这个算法会根据后端 RS 的连接数来决定把要求分发给谁,比如 RS1 连接数比 RS2 连接数少,那末要求就优先发给 RS1。这里问题是没法做到会话保持,即session同享。
11.6、wlc:加权最少连接数(weight least-connection)
这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派要求。
11.7、lblc:基于局部性的最少连接调度算法(locality-based least-connection)
将来自同一目的地址的要求分配给同一台RS如果这台服务器还没有满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先斟酌。
以上就是Linux基础:深入讲授Linux负载均衡LVS的详细内容,更多关于Linux 负载均衡 LVS的资料请关注其它相关文章!
文章来源:丸子建站
文章标题:Linux基础:深入讲授Linux负载均衡LVS
https://www.wanzijz.com/view/59000.html