LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法)

一、集群简介

什么是集群

计算机集群简称集群,是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接;但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度以及可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性价比要高得多。

集群就是一组独立的计算机,通过网络连接组合成一个集合来共同完一个任务。

LVS在企业架构中的位置:

上述的架构只是众多企业里面的一种,绿色线代表用户访问请求的数据流量方向,User-->LVS负载均衡-->Apache/Nginx 服务器-->Mysql 服务器&&Memcache服务器&&共享存储服务器。且我们的Mysql、共享存储也能够使用LVS再次进行负载均衡。

小结:集群的概念,所谓的集群其实就是一组相互独立的计算机,通过高速网络组成一个计算机系统,每个集群节点都是运行其自己进程的一个独立服务器。对网络用户来讲,网站的后端就是一个单一的系统,协同工作来向用户提供系统资源,系统服务。

那么我们为什么要使用集群?

集群的特点:

(1)高性能(performance),一些需要很强的运算处理能力的应用场景,如天气预报,核试验等。这就是不是几台计算机能够处理的了的,这需要成千上万台计算机一起来完成这个工作。

(2)价格有效性,通常一套系统集群架构,至需要几台或者数十台服务器即可,与动辄上百台的专用超级计算机更具性价比。

(3)可伸缩性,当服务器负载压力增长的时候,系统能够扩展来满足需求,且不降低服务质量。

(4)高可用性,尽快部分硬件和软件发生故障,但是整个系统的服务必须是7*24小时运行的。

集群的优势:

 (1)透明性

 如果一部分服务器宕机了业务不受影响,一般耦合度没有那么高,依赖关系没有那么高。比如NFS服务器宕机了其他就挂载不了了,这样依赖性太强。

 (2)高性能

 访问量增加,能够轻松扩展。

 (3)可管理性

 整个系统可能在物理上很大,但很容易管理。

 (4)可编程性

 在集群系统上,容易开发应用程序,门户网站会要求这个。

集群分类及不同分类的特点
计算机集群架构按照功能和结构一般分成以下几类:

1、负载均衡集群(Loadbalancingclusters)简称LBC

2、高可用性集群(High-availabilityclusters)简称HAC

3、高性能计算集群(High-perfomanceclusters)简称HPC

4、网格计算(Grid computing)

网络上面一般认为是有三个,负载均衡和高可用集群是互联网行业常用的集群架构。

(1)负载均衡集群

负载均衡集群为企业提供了更为实用,性价比更高的系统架构解决方案。负载均衡集群把很多客户集中访问的请求负载压力可能尽可能平均的分摊到计算机集群中处理。客户请求负载通常包括应用程度处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序为大量用户提供服务。每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
负载均衡运行时,一般通过一个或多个前端负载均衡器将客户访问请求分发到后端一组服务器上,从而达到整个系统的高性能和高可用性。这样计算机集群有时也被称为服务器群。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。

负载均衡集群的作用

<1>分担访问流量(负载均衡)

<2>保持业务的连续性(高可用)

(2)高可用性集群

一般是指当集群中的任意一个节点失效的情况下,节点上的所有任务自动转移到其他正常的节点上,并且此过程不影响整个集群的运行,不影响业务的提供。

类似是集群中运行着两个或两个以上的一样的节点,当某个主节点出现故障的时候,那么其他作为从 节点的节点就会接替主节点上面的任务。从节点可以接管主节点的资源(IP地址,架构身份等),此时用户不会发现提供服务的对象从主节点转移到从节点。

高可用性集群的作用:当一个机器宕机另一台进行接管。常用的高可用集群开源软件有:keepalived,heartbeat。

(3)高性能计算集群

高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPCcluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。

HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。

常用集群软硬件:

常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat

常用商业集群硬件有:F5,Netscaler,Radware,A10等

二、LVS负载均衡集群介绍

负载均衡集群的作用:提供一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载带宽、增加吞吐量,加强网络数据处理能力、提高网络的灵活性和可用性。

(1) 把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验。

(2) 单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。

(3) 7*24小时的服务保证,任意一个或多个设备节点设备宕机,不能影响到业务。在负载均衡集群中,所有计算机节点都应该提供相同的服务,集群负载均衡获取所有对该服务的如站请求。

LVS介绍

LVS是linux virtual server的简写linux虚拟服务器,是一个虚拟的服务器集群系统,可以再unix/linux平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立。

以下是LVS官网提供的4篇文章:(非常详细,我觉得有兴趣还是看官方文档吧!!)

http://www.linuxvirtualserver.org/zh/lvs1.html

http://www.linuxvirtualserver.org/zh/lvs2.html

http://www.linuxvirtualserver.org/zh/lvs3.html

http://www.linuxvirtualserver.org/zh/lvs4.html

IPVS 的发展史

早在2.2内核时,IPVS就已经以内核补丁的形式出现.

从2.4.23版本开始ipvs软件就是合并到linux内核的常用版本的内核补丁的集合.

从2.4.24以后IPVS已经成为linux官方标准内核的一部分.

lpvs是工作在内核层,我们不能够直接操作ipvs,vs负载均衡调度技术是在linux内核中实现的。因此,被称之为linux虚拟服务器。我们使用该软件配置lvs的时候,不能直接配置内核中的ipvs,而是需要使用ipvs的管理工具ipvsadm进行管理,通过keepalived也可以管理LVS。

LVS体系结构与工作原理简单描述:
LVS集群负载均衡器接受所有客户端的请求,然后根据调度算法决定哪个集群节点来处理客户端的请求。

LVS虚拟服务器的体系如下图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在这组服务器之前有一个负载调度器(load balance)。负载调度器负责将客户的请求调度到真实服务器上。这样这组服务器集群的结构对用户来说就是透明的。客户访问集群系统就如只是访问一台高性能,高可用的服务器一样。客户程序不受服务器集群的影响,不做任何修改。

就比如说:我们去饭店吃饭点菜,客户只要跟服务员点菜就行。并不需要知道具体他们是怎么分配工作的,所以他们内部对于我们来说是透明的。此时这个服务员就会按照一定的规则把他手上的活,分配到其他人员上去。这个服务员就是负载均衡器(LB)而后面这些真正做事的就是服务器集群。

底下是官网提供的结构图:

LVS的基本工作流程:

客户端将请求发送至负载均衡服务器,负载均衡服务器接受客户端的请求,然后先是根据LVS的调度算法(8种)来决定要将这个请求发送至后端哪个节点服务器。依据自己的工作模式(3种)来看应该如何把这些客户的请求发送给节点服务器,节点服务器又该如何把响应数据包发回给客户端。

接下来就是理解LVS的3种工作模式,8种调度算法;

LVS的3种工作模式:

<1>VS/NAT模式(Network address translation)

<2>VS/TUN模式(tunneling)

<3>DR模式(Direct routing)

三种工作模式的解析

1.基于NAT的LVS模式负载均衡

拓扑图如下所示:

NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如上图所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私网IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。

   第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。

   第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

    第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。

2.基于TUN的LVS负载均衡

拓扑图如下所示:

在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如上图所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。

3.基于DR的LVS负载均衡

拓扑图如下所示:

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

官方三种负载均衡技术比较总结表:

关于LVS的调度算法具体可参考链接:http://www.linuxvirtualserver.org/zh/lvs4.html

LVS的调度算法决定了如何在集群节点之间分布工作负荷。当director调度器收到来自客户端访问VIP的上的集群服务的入站请求时,director调度器必须决定哪个集群节点应该处理请求。Director调度器用的调度方法基本分为两类:

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

固定调度算法:

rr -- 轮询算法,它将请求依次分配给不同的RS节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况。

wrr --加权轮询调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

dh --目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS。

sh -- 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。

动态调度算法:

wlc -- 加权最少连接(Weight Least Connections 简称'WLC')算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。

lc  --  最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。

lblc -- 基于地址的最小连接数调度(locality-based least-connection),将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

lblcr -- 带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication  简称'LBLCR')算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器 的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。

LVS调度算法在生产环境中的选型一般有如下几种情况:

1、一般的网络服务,如http,mail,mysql等常用的LVS调度算法为:

a.基本轮询调度rr

b.加权最小连接调度wlc

c.加权轮询调度wrc

2、基于局部性的最小连接lblc和带复制的基于局部性最小连接lblcr主要适用于web cache和DB cache

3、源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。

实际适用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。

本文参考链接:

https://blog.csdn.net/u010563833/article/details/78047036
https://blog.51cto.com/atong/1348602
https://blog.csdn.net/weixin_40470303/article/details/80541639

posted @ 2019-04-25 11:25  caoss  阅读(534)  评论(0编辑  收藏  举报