文章目录
官方网站
- http://www.linuxvirtualserver.org/zh/lvs1.html(LVS项目介绍)
- http://www.linuxvirtualserver.org/zh/lvs2.html(LVS集群的体系结构)
- http://www.linuxvirtualserver.org/zh/lvs3.html(LVS集群中的IP负载均衡技术)
- http://www.linuxvirtualserver.org/zh/lvs4.html(LVS集群的负载调度)
概念
- LVS:【Linux Virtual Server】即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器
- LVS目标 :使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
- LVS集群采用三层结构:
- 负载调度器【load balancer】,它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池【server pool】,是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
- 共享存储【shared storage】,它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务,通常共享存储为可选项层。
- IPVS:【IP Virtual Server】IP虚拟服务器软件,是LVS实现IP负载均衡技术的软件
- 可以提供三种负载均衡方式
- VS/NAT【Virtual Server via Network Address Translation】通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
- VS/TUN【Virtual Server via IP Tunneling】采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
- VS/DR【Virtual Server via Direct Routing】VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
- IPVS调度器实现了如下八种负载调度算法:
- 轮叫【Round Robin】调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
- 加权轮叫【Weighted Round Robin】调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
- 最少链接【Least Connections】调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
- 加权最少链接【Weighted Least Connections】在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
- 基于局部性的最少链接【Locality-Based Least Connections】“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
- 带复制的基于局部性最少链接【Locality-Based Least Connections with Replication】"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
- 目标地址散列【Destination Hashing】"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
- 源地址散列【Source Hashing】"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
- 可以提供三种负载均衡方式
三种负载均衡方式
名词解释
报文:【message】是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变
数据帧:【Frame】数据链路层,传递的单位是frame 帧,就是数据链路层的协议数据单元,它包括三部分:帧头,里面有mac地址,通过这个地址可以在底层的交换机这个层面里顺着网线找到你的计算机。数据部分,ip数据包,意思是使用ip地址定位的一个数据包。帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。
数据包:【Packet】网络层,TCP/IP协议通信传输中的数据单位,处于网络层,在局域网中,“包”是包含在“帧”里的。packet是整个tcpip通信协议里网络层的传输单位,也是最小的单位。数据包中有着目的地的IP地址及其来源的IP地址和其他的校验信息。它也被称为头。以及来自传输层待传送的信息。这个信息会被分成多个IP数据包发送出去。
DS:【Director Server】指的是前端负载均衡器。
RS:【Real Server】后端真实的工作服务器。
VIP:【Virtual IP】虚拟IP地址,向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:【Director Server IP】主要用于和内部主机通讯的IP地址
RIP:【Real Server IP】,后端服务器的IP地址
CIP:【Client IP】访问客户端的IP地址
IP隧道:【IP tunneling】是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术【IP encapsulation】。IP隧道主要用于移动主机和虚拟私有网络【Virtual Private Network】,在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。
VS/NAT
流程:
- 客户通过VIP访问网络服务时,请求报文到达调度器,
- 调度器根据连接调度算法从一组真实服务器中选出一台服务器
- 将报文的目标地址VIP改写成选定的真实服务器RIP的地址,报文的目标端口改写成选定服务器的相应端口,
- 将修改后的报文发送给选出的服务器。到真实服务器RS;同时,调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务 器。
- 当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址RIP和源端口改为VIP和相应的端口,
- 再把报文发给用户
VS/DR
流程:
- 客户通过VIP访问网络服务时,请求报文到达调度器
- 调度器根据连接调度算法从一组真实服务器中选出一台服务器
- 调度器不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。
- 因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文
- 当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文
- 然后根据路由表将响应报文直接返回给客户
注意:VS/DR的体系结构,调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只 是用于处理目标地址为VIP的网络请求。
VS/TUN
调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发 现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
流程:
- 客户通过VIP访问网络服务时,请求报文到达调度器
- 调度器根据各个服务器的负载情况,动态地选择一台服务器
- 将请求报文封装在另一个IP报文中添加源地址DIP与目标地址RIP,
- 再将封装后的IP报文通过路由器转发给选出的服务器
- 服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求
- 然后根据路由表将响应报文直接返回给客户