2020-03-28 Nginx反向代理与动静分离集群架构应用实
1. 集群简介
简单来说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(集群中的每台计算机)都是运行各自服务的独立服务器。这些服务器之间可以彼此通信,协同向用户提供应用程序、系统资源和数据,并以单一系统的模式加以管理。当用户客户机请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。
打开谷歌、百度的页面,看起来很简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面是由成千上万台服务器集群协同工作的结果。那么,这么多的服务器的维护和管理及相互协调工作也许就是你未来的工作职责了。
若要用一句话描述集群,就是一堆服务器做同一件事,这些机器可能需要整个技术团队架构、设计和统一协调管理,这些机器可以分布在同一个机房,也可以分布在全国甚至全球各个地区的多个机房。下图是一个中等规模网站集群架构逻辑图。
2. 为什么要使用集群
(1)高性能(Performance)
一些国家重要的计算密集型应用(如天气预报、核试验模拟等)需要计算机有很强的运算处理能力。以全世界现有的技术,即使是大型机,其计算能力也是有限的,很难单独完成此任务。因为计算时间可能会相当长,也许几天,甚至几年或更久。因此,对于这类复杂的计算业务使用了计算机集群技术,集群中有几十台、上百台,甚至成千上万台计算机协同计算。
大家耳熟能详的大型网站谷歌、百度、淘宝等,都不是几台大型机可以支持的,都有上万台服务器组成的高性能集群,分布于不同的地点。下图所示是一个大型计算机设备的超强硬件配置。
假如需要配一个每次只需要服务10个并发请求的LNMP环境,那么单台服务器一定会比多个服务器集群响应要快。只有当并发或总请求数量超过单台服务器的承受能力时,服务器集群才会体现出优势。
(2)价格有效性(Cost-effectiveness)
通常一套系统集群架构,只需要几台或数十台服务器主机即可。与动辄价值上百万的专用超级计算机相比便宜了很多。在达到同样性能需求的条件下,采用计算机集群架构比采用同等运算能力的大型计算机具有更高的性价比。
早期的淘宝、支付宝的数据库等核心系统就是用的价值上百万的小型机服务器。后因使用维护成本太高以及扩展设备费用成几何级数增涨,甚至发展为扩展“瓶颈”,人员维护也十分困难,最终使用PC服务器集群替换之,比如,把数据库系统从小机结合Oracle数据库迁移到MySQL开源数据库结合PC服务器上来。不但成本下降了,扩展和维护也更容易了。
(3)可伸缩性(Scalability)
当服务负载、压力增长时,针对集群系统进行较简单的扩展即可满足需求,且不会降低服务质量。
通常情况下,硬件设备若想扩展性能能力,不得不购买增加新的CPU和存储器设备,如果加不上去了,就不得不购买更高性能的服务器,就拿我们现有的服务器来讲,可以增加的设备总是有限的。如果采用集群技术,则只需要将新的单个服务器加入现有的集群架构中即可,从访问的客户角度来看,系统服务无论是连续性上还是性能上都几乎没有区别,系统在不知不觉中完成了升级,加大了访问能力,轻松地实现了扩展。集群系统中的节点数目可以增长到几千乃至上万个,其可伸缩性远超单台超级计算机。
(4)高可用性(Availability)
单一的计算机系统总会面临设备损毁的问题,如CPU、内存、主板、电源、硬盘等,只要一个部件坏掉,这个计算机系统就可能会宕机,无法正常提供服务。在集群系统中,尽管部分硬件和软件也会发生故障,但整个系统的服务可以是7×24小时可用的。
集群架构技术,可以使得系统在若干硬件设备发生故障时仍可以继续工作,这样就将系统的停机时间减至最小。集群系统在提高系统可靠性的同时,也大大减小了系统故障带来的业务损失,目前几乎100%的互联网网站都要求7×24小时提供服务的。
(5)透明性(Transparency)
多个独立计算机组成的松耦合集群系统构成一个虚拟服务器;用户或客户端程序访问集群系统时,就像访问一台高性能、高可用的服务器一样,集群中一部分服务器的上线下线不会中断整个系统服务,这对用户也是透明的。
(6)可管理型(Manageability)
整个系统可能规模很大,但其实很容易管理,就像管理一个单一映像系统一样。在理想状况下,软硬件模块的插入能做到即插即用。
(7)可编程性(Programmability)
在集群系统上开发及修改各类应用程序更容易。
3. 集群的分类
3.1 集群的常见分类
计算机集群架构按功能和结构可以分成以下几类:
- 负载均衡集群(Load Balancing Clusters,LBC或者LB)。
- 高可用性集群(High-Availability Clusters,HAC)。
- 高性能计算集群(High-Performance Clusters,HPC)。
- 网格计算(Grid Computing)。
3.2 不同种类的集群介绍
(1)负载均衡集群
负载均衡集群为企业提供了更为实用、性价比更高的系统架构解决方案。负载均衡集群可以把很多客户集中的访问请求负载压力尽可能平均地分摊在计算机集群中进行处理。客户访问请求负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合使用同一组应用程序为大量用户提供服务的模式,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间的动态分配,以实现负载均衡。
负载均衡集群运行时,一般是通过一个或多个前端负载均衡器将客户访问请求分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。
负载均衡集群的作用如下:
- 分担用户访问请求及数据流量(负载均衡)。
- 保持业务连续性,即7×24小时服务(高可用性)。
- 应用于Web业务及数据库从库等服务器的业务。
负载均衡集群典型的开源软件包括LVS、Nginx、Haproxy等。其架构如下图所示。
服务器节点负载均衡图示(2)高可用性集群
高可用性集群一般是指在集群中任意一个节点失效的情况下,该节点上的所有任务会自动转移到其他正常的节点上。此过程并不影响整个集群的运行。
提示:不同的业务会有若干秒的切换时间,db业务的切换时间明显长于Web业务。
当集群中的一个节点系统发生故障时,运行着的集群服务会迅速做出反应,将该系统的服务分配到集群中其他正在工作的系统上运行。考虑到计算机硬件和软件的容错性,高可用性集群的主要目的是使集群的整体服务尽可能可用。如果高可用性集群中的主节点发生了故障,那么这段时间内将由备节点代替它。备节点通常是主节点的镜像。当它代替主节点时,它可以完全接管主节点(包括IP地址及其他资源)的服务,因此,使集群系统环境对于用户来说是一致的,即不会影响用户的访问。
高可用性集群使服务器系统的运行速度和响应速度尽可能地快。它们经常利用在多台机器上运行的冗余节点和服务来相互跟踪。如果某个节点失败,它的替补者将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,集群里的任何一台机器宕机,业务都不会受影响(理论情况下)。
高可用性集群的作用如下:
- 当一台机器宕机时,另一台机器接管宕机机器的IP资源和服务资源,提供服务。
- 常用于不易实现负载均衡的应用,比如负载均衡器,主数据库、主存储对之间。
高可用性集群常用的开源软件包括Keepalived、Heartbeat等,其架构如下图所示。
服务器负载均衡器高可用图示(3)高性能计算集群
高性能计算集群,也称并行计算。通常,高性能计算集群设计为集群开发的并行应用程序,以解决复杂的科学问题(天气预报、石油勘探、核反应模拟等)。高性能计算集群对外就像一个超级计算机,这种超级计算机内部由数十个至上万个独立服务器组成,并且在公共消息传递层上进行通信以运行并行应用程序。实际是将任务分隔,然后下发到集群节点进行计算,计算后返回结果,然后继续领信任务计算,如此往复。
4. 常用的集群软硬件介绍及选型
4.1 企业运维中常见的集群软硬件产品
互联网企业常用的开源集群软件有:Nginx、LVS、Haproxy、Keepalived、Hearbeat。
互联网企业常用的商业集群硬件有:F5、Netscaler、Radware、A10等,工作模式相当于Haproxy。
淘宝、赶集网、新浪等公司使用过Netscaler负载均衡产品。集群硬件Netscaler的产品如下图所示。
集群硬件F5产品如下图所示。
F5负载均衡产品图4.2 对于集群软硬件产品如何选型
- 当企业业务重要,技术力量又薄弱,并且希望出钱购买产品及获取更好的服务时,可以选择硬件负载均衡产品,如F5、Netscaler、Radware等,此类公司多位传统的大型非互联网企业,如银行、证券、金融、宝马、奔驰等。
- 对于门户网站来说,大多会并用软件及硬件产品来分担单一产品的风险,如淘宝、腾讯、新浪等。融资企业会购买硬件产品,如赶集等网站。
- 中小型互联网企业由于起步阶段无利润或者利润很低,会希望通过使用开源免费的方案来解决问题,因此会雇佣专门的运维人员进行维护。
相比较而言,商业的负载均衡产品成本高、性能好,更稳定,缺点是不能二次开发,开源的负载均衡软件对运维人员的能力要求较高,如果运维及开发能力强,那么开源软件的负载均衡是不错的选择,目前的互联网行业更偏向使用开源的负载均衡软件。
4.3 如何选择开源集群软件产品
中小企业互联网公司并发访问和总访问量不是很大的情况下,建议首选Nginx负载均衡,理由是Nginx负载均衡配置简单、使用方便、安全稳定、社区活跃,使用的人逐渐增多,呈流行趋势,另一个实现负载均衡的类似产品为Haproxy(支持L4和L7负载)同样优秀,但社区不如Nginx活跃。
如果要考虑Nginx负载均衡的高可用功能,建议首选Keepalived软件,理由是安装、配置简单,使用方法方便,安全稳定,和Keepalived服务类似的高可用软件还有Heartbeat(使用比较复杂)。
如果是大型企业互联网公司,负载均衡产品可以使用LVS+Keepalived在前端做4层转发(一般是主备或主主,如果需要扩展可以使用DNS或前端使用OSPF),后端使用Nginx或者Haproxy做7层转发(可以扩展到百台),再后面是应用服务器,如果是数据库和存储的负载均衡和高可用,建议选择LVS+Heartbeat,LVS支持TCP转发且DR模式效率很高,Heartbeat可以配合DRBD,不但可以进行VIP的切换,还可以支持块设备级别的数据同步(DRBD),以及资源服务的管理。