集群定义:一组协同工作的服务器,各有分工,对外表现为一个整体
集群是一组协同工作的服务集合,用来提供比单一服务更稳定、更高效、更具扩展性的服务平台,在外界看来,集群就是一个独立的服务实体,但实际上,在集群的内部,有两个或两个以上的服务实体在协调、配合完成一系列复杂的工作。
集群一般有两个或两个以上的服务器组建而成,每个服务器被称为一个集群节点,集群节点之间可以相互通信,通信的方式有两种,一种是基于RS232线的心 跳监控,另一种是用一块单独的网卡来跑心跳,因而,集群具有节点间服务状态监控功能,同时还必须具有服务实体的扩展功能,可以灵活的增加和剔除某个服务实 体。
在集群中,同样的服务可以由多个服务实体提供。因而,当一个节点出现故障时,集群的另一个节点可以自动接管故障节点的资源,从而保证服务持久、不间断运行。因而集群具有故障自动转移功能。
一个集群系统必须拥有共享的数据存储,因为集群对外提供的服务是一致的,任何一个集群节点运行一个应用时,应用的数据都集中存储在节点共享空间内,而每个节点的操作系统上仅运行应用的服务,同时存储应用程序文件。
综上所述,构建一个集群系统至少需要两台服务器,同时还需要有串口线、集群软件、共享存储设备(例如磁盘阵列)等。
基于Linux的集群以其极高的计算能力、可扩展性、可用性及更加优化的性价比在企业各种应用中脱颖而出。 成为目前大家都关心的Linux应用热点,熟练掌握Linux集群知识,可以用低价格做出高性能的应用。为企业、个人节省了成本。国内大型网站新浪、网易 等都采用了linux集群系统构建高性能web应用,著名搜索引擎google采用了上万台linux服务器组成了一个超大集群,这些实例都说明了集群在 linux应用中的地位和重要性。
负载均衡集群也是有两台或者两台以上的服务器组成,分为前端负载调度和后端节点服务两个部分,负载调度部分负责把客户端的请求按照不同的 策略分配给后端服务节点,而后端节点是真正提供应用程序服务的部分与HA Cluster不同的是,在负载均衡集群中,所有的后端节点都处于活动状态,它们都对外提供服务,分摊系统的工作负载。负载均衡集群可以把一个高负荷的应用分散到多个节点来共同完成,适用于业务繁忙、大负荷访问的应用系统,但是它也有不足的地方:当一个节点出现故障时,前 端调度系统并不知道此节点已经不能提供服务,仍然会把客户端的请求调度到故障节点上来,这样访问就会失败,为了解决这个问题,负载调度系统一般都引入了节点监控系统。节点监控系统位于前端负载调度机上,负责监控下面的服务节点,当某个节点出现故障后,节点监控系统会自动将故障节点从集群中剔除,当此节点恢复正常后,节点监控系统又会自动将其加入集群中,而这一切,对用户来说是完全透明的。
高可用的含义是最大限度的可以使用,从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断的提供服务。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以自动、快速从一个节点切换到另一个节点,从而保证应用持续、不间断的对外提供服务,这就是高可用集群实现的功能
这类集群致力于提供单个计算机所不能提供的强大的计算能力,包括数值计算和数据处理,并且倾向于追求综合性 能。HPC与超级计算类似,但是又有不同,计算速度是超级计算追求的第一目标。最快的速度,最大的存储,最庞大的体积,最昂贵的价格代表了超级计算的特 点,随着人们对计算速度需求的提高,超级计算也应用到了各个领域,对超级计算追求单一计算速度指标转变为追 求高性能的综合指标。即高性能计算。HPC应用领域非常广泛,典型应用有:生命科学研究、基因测试比对、数据挖掘应用、石油和天然气勘探、图像呈现等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmxN51S5-1623391353783)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611011304516.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imSQuYxG-1623391353785)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611013930010.png)]
优点:lvs只是把原地址修改为自己,然后发送给目标,没有涉及到任何真实的流量转发和生产。所以性能强大
缺点:所有的访问都要经过负载调度器,真实服务器可以无限扩展。负载调度器是负载集群的瓶颈
解决方案:1.换调度器:提高负载调度器性能
2.业务分割:创建多个集群,“教育”和“地产”模块分割在不同的集群里
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ukPWX7Q-1623391353786)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611020221307.png)]
负载层数(osi) | 集群触发条件(触发条件会根据OSI七层模型去分类) | 架构处理 | |
---|---|---|---|
lvs | 四层(传输层)四层它可以负载均衡mysql,vsftpd,apache,nginx等(基于tcp、udp) | ip和端口判断(192.168.80.22:80) | c/s b/s |
haoroxy | 七层(应用层) | 根据主机名域名判断 | |
nginx | 七层(应用层) | 根据主机名域名判断 | b/s架构 |
f5 | 二层(数据链路层) | mac地址 |
nginx:
内核空间:ipvs(linux已经集成到内核中)
用户空间:ipvsadm(给用户提供一个控制平台,操作设置ipvs,实现集群的负载均衡)
ipvs工作流程:客户端访问,ipvs用钩子函数强行获取数据报文的使用权,查看数据包是否是需要负载均衡的,再根据自己负载的策略改写成后端的真实服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqIBeSIR-1623391353787)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611021202052.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMUcuYLq-1623391353788)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611021256508.png)]
工作流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FIxteADO-1623391353789)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611021907650.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xTY1RjF-1623391353789)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611022012426.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XypTizgO-1623391353790)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611025345264.png)]
工作流程
总结:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFvP2BUR-1623391353791)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611022500195.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VlCcaEee-1623391353791)(C:/Users/31745/AppData/Roaming/Typora/typora-user-images/image-20210611022444323.png)]
总结:
DR 访问量非常大,而且后端节点较为稳定(架构)端口一致,是所有模式中压力最小的
TUN 访问量较大,而且机器在多个不同的公网中存在,想组成集群,压力排第二
NAT 访问量较大,并且后端比较灵活(支持各种操作系统,端口可以不一致),但负载服务器的压力大
三、LVS负载均衡调度算法
根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。
1.轮询调度
轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
2.加权轮询调度
加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
3.最小连接调度
最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)
4.加权最小连接调度
加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5.基于局部的最少连接
基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。
6.带复制的基于局部性的最少连接
带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7.目标地址散列调度
目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
8.源地址散列调度U
源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。
9.最短的期望的延迟
最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。
10.最少队列调度
最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。