1.1集群简介
1.1.1集群的含义
集群是一种并行或分布式系统。
集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
1.2为什么要使用集群
1.2.1集群的基本特点
1.提高性能
一些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机其计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。
2.降低成本
通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。
3.提高可扩展性
用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。
4.高可用性
集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。
1.2.2集群架构的优势
1.透明性
2.高性能
3.高可用
4.可管理性
5.可编程性
1.3 集群的分类
1.3.1 集群的常见分类
负载均衡集群(Load balancing clusters)简称LB
高可用集群(High-availability clusters),HA
高性能计算集群(High-performance clusters)HPC
网络计算(Grid computing)
提示:负载均衡集群和高可用性集群式我们互联网行业常用的集群架构模式。
1.3.2 不同种类集群的介绍
1.负载均衡集群
负载均衡集群的作用:
①分担访问流量
②保持业务连续性
负载均衡集群典型的开源软件:lvs haproxy nginx
2.高可用性集群
高可用性集群的作用:当一台机器宕机另外一台机器接管(IP资源和服务资源)
高可用性几圈典型常用开源软件:keepalived、heartbeat
3.高性能计算集群
4.网格计算集群
1.4 常用的集群软硬件
1.4.1 企业运维中常见的集群软硬件产品
1.互联网企业常用的开源集群软件有:lvs、keepalived、haproxy、nginx、apache、hearbeat
2.互联网企业常用的商业集群硬件有:F5、Netscaler、Radware、A10等,工作模式都相当于haproxy、nginx
1.4.2 企业运维中集群软硬件产品如何选型
1.当企业业务重要,而技术力量薄弱,希望出钱购买产品及更好的服务时,可以选择硬件负载均衡产品,如:F5,Netscaler,Radware,此类公司多为传统的大型非互联网企业,如银行,证券,金融等领域。
对于门户网站来说,大多会并用软件及硬件产品来分担单一产品的风险。
中等融资的企业会购买硬件产品。
2.中小型互联网企业,由于起步阶段无利润可赚或者利润很低,希望通过使用开源免费的解决方案解决问题,雇佣专门的运维人员进行维护。
相比较而言,商业的负载均衡产品成本高,性能好,更稳定,而开源的负载均衡软件对运维人员的运维能力要求较高。
1.5 Lvs负载均衡集群介绍
1.5.1 搭建负载均衡服务的需求
1.把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待相应的时间,提升用户体验。
2.单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提升。
3.7*24小时的服务保证,任意一个或多个有限后面节点设备的那个急,要求不能影响业务。
在负载均衡集群中,所有的计算机节点都会提供相同的服务。集群负载均衡器接货所有的对该服务的入站请求。然后将这些请求通过算法,尽可能的平均的分配到所有的集群节点上去。
1.5.2 LVS介绍
LVS是linux virtual server意思为linux虚拟服务器。
1.5.3 IPVS(LVS)的发展
早在2.2内核时,IPVS就已经以内核不定的形式出现。
从2.4.23版本开始,IPVS软件就是合并到linux内核的常用版本的内核补丁集合。
从2.4.24以后,IPVS已经成为linux官方标准内核的一部分。
1.5.4 IPVS的软件工作层次图
LVS负载均衡调度技术是在linux内核中实现的。我们使用该软件配置LVS时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm工具进行管理。
1.5.5 LVS相关术语约定
名称 |
缩写 |
说明 |
虚拟IP(Virtual Ip Address) |
VIP |
VIP为Director用于向客户端计算机提供服务的IP地址。 |
真实IP(Real Server Ip Address) |
RIP |
在集群下面节点上使用的IP地址。 |
Director的IP地址(Director Ip Address) |
DIP |
Director用于连接内外网的IP地址,物理网卡上的IP地址。 |
客户端主机IP地址(Client Ip Address) |
CIP |
客户端请求集群服务器的IP地址。 |
1.5.6 LVS集群的3种工作模式介绍与原理讲解
在调度器的实现技术中,IP负载均衡技术室效率最高的。
通过网络地址转换将一组服务器构成一个高性能的,高可用的虚拟服务器,我们称之为NAT(network address transaction)模式。大多数商业化的IP负载均衡调度器产品都是使用VS/NAT的方法。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN(tunneling)和通过直接路由实现虚拟服务器的方法VS/DR(Direct Routing),它们可以极大的提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们大致原理如下。
淘宝开源的负载均衡的模式:FULLNAT(full network address transaction)(将源地址和目标地址都进行更改)。
1)NAT模式--网络地址转换<==收费站模式 NAT模式: 1、NAT技术将请求的报文(DNAT)和响应的报文(SNAT)通过经过调度器地址重写然后再转发给内部的RS,报文返回的时候再改写为原来的地址。 2、只需要在调度器LB上配置WAN IP即可,当然调度器也要有私网LAN IP和内部节点通信,内部RS节点只需配置私有LAN IP。 3、每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址(DIP),这样才能保证数据报文返回时仍然经过调度器LB。 4、由于请求与相应的数据报文都经过调度器LB,因此网站访问量大的时候,调度器LB有较大瓶颈,一般最多10-20台节点。 5、NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80可以转换到RS的10.0.0.2.8080。 6、所有的NAT内部RS节点只需配置私有LAN IP即可。 7、由于数据包来回都需要经过调度器,因此,需要开启内核转发net.ipv4.ip_forward=1 执行加载sysycl-p 调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。
下面的截图取自官网:http://www.linuxvirtualserver.org/zh/lvs3.html
2)TUN模式-隧道模式 采用NAT技术时,由于请求和相应的报文都必须经过调度器地址重写,当客户请求越来越多的时候,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发至真实服务器,而真实服务器将相应处理后直接返回给客户端用户,这样调度器就只处理请求的入站报文。由于一般网络服务应答数据比请求报文大很多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。 Tun模式: 1、负载均衡器通过把请求的报文通过IP隧道的方式(把请求的报文不经过源目的地址的改写,而是直接封装成另外的报文)转发给真实服务器,而真实服务器会将相应处理后直接返回给客户端用户。 2、由于真实服务器将相应处理后的报文直接返回给客户端用户,因此,最好RS有一个外网IP地址,这样效率才会更高。理论上:只要能出网即可,无需外网IP地址 3、由于调度器LB只处理入站请求的报文。因此,此集群系统的吞吐量可以提高10倍以上,但是隧道模式也会带来一定的系统开销。TUN模式适合LAN/WAN。 4、TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题。 5、所有的RS服务器都需要绑定VIP,抑制ARP,配置复杂。 6、LAN环境一般多采用DR模式,WAN环境可以用TUN模式,但是当前在WAN环境下,请求的转发更多会被haproxy/nginx或者DNS调度等代理取代。因此,TUN模式在国内公司实际应用的已经很少了。 7、直接对外业务的访问业务,例如:web服务做RS节点,最好用公网IP地址。不直接对外的业务,例如:mysql、存储系统RS节点,最好用内网IP地址。
下面的截图取自官网:http://www.linuxvirtualserver.org/zh/lvs3.html
3)DR模式-直接路由 VS/DR是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。同VS/TUN技术一样,VS/DR技术极大的提高集群系统的伸缩性。而已,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器LB与真是服务器RS都有一个网卡连在同一个物理网段上,即必须在同一个局域网环境。 DR模式: 1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源地址仍然是VIP地址。注意:源地址,仍然是CIP,目的地址仍然是VIP。 2、由于请求的报文经过调度器,而RS相应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式对比) 3、因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点) 4、需要注意RS节点VIP绑定(lo:vip lo:vip1)和ARP抑制的问题。 5、强调:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论上讲:只要RS可以出网即可,不是必须要配置外网IP。 6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口(和NAT的区别)。 7、当前调度器LB支持几乎所有的UNIX、LINUX系统,但目前不支持windows系统,真实RS节点可以是windows。 8、总的来说DR模式效率很高,但是配置也较麻烦,因此,访问量不是特别大的公司可以用haproxy/nginx取代之。这符合运维的原则:简单、易用、高效。 9、直接对外业务的访问业务,例如:web服务做RS节点,最好用公网IP地址。不直接对外的业务,例如:mysql、存储系统RS节点,最好用内网IP地址。
下面的截图取自官网:http://www.linuxvirtualserver.org/zh/lvs3.html
1.5.7 LVS的三种模式优缺点比较
三种IP负载均衡技术的优缺点归纳在下表中:
_ |
VS/NAT |
VS/TUN |
VS/DR |
Server |
any |
Tunneling |
Non-arp device |
server network |
private |
LAN/WAN |
LAN |
server number |
low (10~20) |
High (100) |
High (100) |
server gateway |
load balancer |
own router |
Own router |
注:以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡,调度器的硬件配置与后端服务器的硬件配置相同,而且是对一般Web服务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所以,以上数据估计主要是为三种方法的伸缩性进行量化比较。
1.5.7.1 Virtual Server via NAT
VS/NAT的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。我们在Pentium 166 处理器的主机上测得重写报文的平均延时为60us,性能更高的处理器上延时会短一些。假设TCP报文的平均长度为536 Bytes,则调度器的最大吞吐量为8.93 MBytes/s.我们再假设每台服务器的吞吐量为800KBytes/s,这样一个调度器可以带动10台服务器。(注:这是很早以前测得的数据)
基于VS/NAT的的集群系统可以适合许多服务器的性能要求。如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法、VS/TUN和VS/DR。在DNS混合集群系统中,有若干个VS/NAT负载调度器,每个负载调度器带自己的服务器集群,同时这些负载调度器又通过RR-DNS组成简单的域名。但VS/TUN和VS/DR是提高系统吞吐量的更好方法。
对于那些将IP地址或者端口号在报文数据中传送的网络服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。这会带来实现的工作量,同时应用模块检查报文的开销会降低系统的吞吐率。
1.5.7.2 Virtual Server via IP Tunneling
在VS/TUN的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以用来构建高性能的超级服务器。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。
1.5.7.3 Virtual Server via Direct Routing
跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。
1.5.8 LVS的调度算法:(参考:http://www.linuxvirtualserver.org/zh/lvs4.html)
LVS的调度算法决定了如何在集群节点之间分布工作负荷。
固定调度方法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr,SED,NQ
1.5.9 LVS调度算法的生产环境选型
1、一般的网络服务,如HTTP,Mail、Mysql等,常用的LVS调度算法为:
a.基本轮调rr算法
b.加权最小连接调度wlc
c.加权轮叫调度算法wrr
2、基于局部性的最少连接LBLC和带复制的基于局部性最少连接LBLCR主要适用于Web Cache和 DB Cache集群
3、源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,他们可以保证整个系统的唯一出入口。
4、最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较长的网络服务。