集群与负载均衡,分布式计算入门学习
1.集群的概念
计算机集群通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。
是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信,应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。
比如单个重负载的 运算分担到多台设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,一般分为几种:
***高可用性集群:一般是指当集群中某个节点失效的 情况下,其上的任务会自动转移到其他正常的节点上,还指可以将集群中的某节点进行离线维护再上线,该过程不影响整个集群的运行;
***负载均衡集群:负载均衡集群运行时,一般通过一个或多个前端负载均衡器,将工作负载分发到一组服务器上,从而达到整个系统的高性能和高可用性;
***高性能计算集群:高性能计算集群采用将计算任务分配到集群的不同节点而提高计算能力,因而主要应用在科学计算领域;
2.负载均衡的概念:
它是利用一个集群中的多台单机,完成许多并行的小的工作。一般情况下,如果一个应用使用的人多了,那么用户请求的相应时间就会增大,机器的性能也会受到影响,如果使用负载均衡集群,那么集群中任意一台机器都能响应用户的请求,这样集群就会在用户发出服务请求之后,选择当时负载最小,能够提供最好的服务的这台机器来接受请求并响应,这样就可以用集群来增加系统的可用性和稳定性。
3.分布式的概念:
集群:同一个业务,部署在多个服务器上。分布式:一个业务分拆成多各子业务,或者本身就是不同的业务,部署在不同的服务器上
简单地说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行任务数来提升效率的。举例:比如新浪网,访问的人多了,他可以做一个集群,前面放一个负载均衡服务器,后面几台服务器完成同一业务,如果还有业务访问的时候,响应服务器看哪台服务器的均衡不是很重,就将那台去完成,并且一台服务器垮了,其他的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务可能就失败了。
4.负载均衡技术实现
负载均衡技术通过设置虚拟服务器IP(VIP),将后端多台真实服务器的应用资源虚拟成一台高性能的应用服务器,通过负载均衡算法,将用户的请求转发给后台内网服务器,内网服务器将请求的响应返回给负载均衡器,负载均衡再将响应发送给用户,这样向互联网用户隐藏了内部网络结构,阻止了用户直接访问后台(内网)服务器,使得服务器更加安全,可以阻止对核心网络栈和运行在其他端口服务的攻击。
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内容容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力,比如:一台机器不能满足,则增加两台或多台机器,共同承担访问压力。
负载均衡最重要的一个应用就是利用多台服务器提供单一服务,这种方案有时也称为服务器农场,通常,负载均衡主要应用于Web网站,大型的Internet Relay Chat网络,高流量的文件下载网站,NNTP服务(网络新闻传输协议)和DNS服务,现在负载均衡也开始支持数据库服务,称之为数据库负载均衡器。
5.服务器负载均衡的三大基本元素:负载均衡算法,健康检查和会话保持
负载均衡设备的实现原理是把多台服务器的地址映射成一个对外的服务IP(我们称之为VIP,关于服务器的映射可以直接将服务器IP映射成VIP地址,也可以将服务器IP:Port,不同的映射方式会采取相应的健康检查,在端口映射时,服务器端口与VIP端口不相同),这个过程对用户是不可见的,用户实际上不知道服务器是做了负载均衡的,因此他们访问的还是一个目的IP。
6.详细的访问流程:
用户(IP:207.17.117.20)访问域名(www.a10networks.com),首先通过DNS查询解析出这个域名的公网地址:199.237.202.124,接下来用户207.17.117.20会访问199.237.202.124这个地址,因此数据包会达到负载均衡设备,接下来负载均衡设备会把数据分发到合适的服务器,看下图:
负载均衡设备在将数据包发给服务器时,数据包是做了一些变化的,如上图所示,数据包达到负载均衡设备之前,源地址是:207.17.117.20,目的地址是:100.237.202.124,当负载均衡设备将数据转发给选中的服务器时,源地址还是:207.17.117.20,目的地址变为172.16.20.1,我们称这种方式为目的地址NAT(DNAT,目的地址转换)。一般来说,在服务器负载均衡中DNAT是一定要做的(还有一种模式叫做服务器直接返回--DSR,是不做DNAT的),而源地址根据部署模式的不同,有时候也需要转换成别的地址,我们称之为:源地址NAT(SNAT),一般来说,旁路模式需要做SNAT,而串接模式不需要,本示意图为串接模式,所以源地址没有做NAT。
7.负载均衡算法:
一般来说,负载均衡服务器都会默认支持多种负载均衡分发策略,例如:
(1)轮询:将请求顺序循环地发到每个服务器,当其中某个服务器故障,AX就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其回复正常;
(2)比率:给每个服务器分配一个加权值为比例,根据这个比例,把用户的请求分配到每个服务器,当其中某个服务器发送故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
(3)优先权:给所有服务器分组,给每个组定义优先权,将用户的请求分配到优先级最高的服务器组(在同一组内,采用预先设定的轮询或比率算法,分配用户的请求);当最高优先级中所有服务器或指定数量的服务器出现故障,AX将把请求送给次级优先级的服务器组,这种方式,实际为用户提供一种热备份的方式。
(4)最少连接数:AX会记录当前每台服务器或者服务端口上的连接数,新的连接将传递给连接数最少的服务器,当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参与下一次的用户请求的分配,直到其恢复正常。
(5)哈希算法:将客户端的源地址,端口进行哈希运算,根据运算的结果转发给一台服务器进行处理,当其中某个服务器发送故障,就把其从服务器队列中拿出,不参与下一次的 用户请求的分配,直到其恢复正常。
(6)基于数据包的内容分发:例如判断HTTP的URL,如果URL中带有.jpg的扩展名,就把数据包转发到指定的服务器。
8.健康检查:
健康检查用于检查服务器开放的各种服务的可用状态,负载均衡设备一般会配置各种健康检查方法,例如Ping,TCP,UDP,HTTP,FTP,DNS等。Ping属于第三层的健康检查,用于检查服务器IP的连通性,而TCP/UDP属于第四层的健康检查,用于检查服务端口的UO/DOWN,如果要检查的更准确,就要用到基于7层的健康检查,例如创建一个HTTP健康检查,Get一个页面回来,并且检查页面内容是否包含一个指定的字符串,如果包含,则服务时UP的,如果不包含或者取不回页面,就认为该服务器的Web服务是不可到别的服务器。比如,负载均衡设备检查到172.16.20.3这台服务器的80端口是DOWN的,负载均衡设备将不把后面的连接转发到这台服务器,而是根据算法将数据包转发到别的服务器。创建健康检查时可以设定检查的间隔时间和尝试次数,例如设定间隔时间为5秒,尝试次数为3次,那么负载均衡设备每隔5秒发起一次健康检查,如果检查失败,则尝试3次,如果3次都检查失败,则把该服务标记为DOWN,然后服务器仍然会每隔5秒对DOWN的服务器进行检查,当某个时刻发现服务器健康检查又成功了,则把该服务器重新标记为UP。健康检查的间隔和尝试次数要根据综合情况来设置,原则是既不会对业务产生影响,又不会对负载均衡设备造成较大负担。
9.会话保持
如何保证一个用户的两次http请求转发到同一个服务器,这就要求负载均衡设备配置会话保持。
绝大部分的负载均衡设备都支持两大类基本的会话保持方式:源./目的地址会话保持和cookie会话保持,另外像hash,URL Persist等也比较常用的方式,但是所有设备都支持,基于不同的应用要配置不同的会话保持,否则会引起负载的不均衡甚至访问异常。