项目引入
经过前期加班加点地忙碌,我们的网站顺利上线了!年中促销活动也如约而至,虽然公司全体对这次活动进行多方面地准备和“布防”,可是意外还是发生了。就在促销优惠购物活动的当天,猛然增加的用户访问量直接导致浏览器购物车提交页面显示“server is too busy”,如此巨大的访问量是我们没有预计到的,服务器繁忙导致许多用户的订单提交不成功,公司客服部的电话响个不停,我们运维部门的压力徒增。
Philip立刻召开了部门紧急会议。
Philip:这次年终促销活动对我们的网站平台是一次真实的“压力”测试,测试结果是我们的平台显然还有亟待完善的地方。George你之前和Amanda处理了平台系统搭建的大部分工作,关于这次事件,你认为是什么原因。
George:用户访问频次的巨量提升是客观因素,对我们的服务器是不小的冲击。但我估计我们对数据库的容量设计没有到位,这次访问压力事件的爆发很可能出在数据库访问瓶颈上。
Philip:是的,业务情况总有淡旺季,这次促销活动能吸引到这么多用户也是市场那边都没有预估到的。Amanda你觉得数据库设计这块,我们应该从什么方向下手。
我:老大您有一点提醒我了,网站上的用户访问总是有常态和“非常态”,我们的数据库应该有成熟的伸缩架构设计,能够在像这次事件的情况下快速对数据库扩容,尽快缓解用户访问压力。
为解决此类问题,会上决定重新设计构建电商系统集群,先测试稳定后再将现有系统迁移过来。
知识总图
任务一:认识服务器集群
1.任务描述
随着mobileshop的业务量增加,规模扩大,对服务器的要求也原来越高,单台服务器已经不能满足业务增长的访问请求,这时候我们所采用的办法是在不影响原有的业务情况下增加服务器数量,下面我们深入学习服务器集群相关知识。
2.认识服务器集群
集群(cluster)是将若干台相互独立的计算机,通过网络连接,使它们协同工作,共同完成一项或者多项工作,这样的计算机群体,我们把它叫做计算机集群。集群技术是一种主流技术、也是当前大型移动电商系统部署主要的解决手段。
3.服务器集群的分类
• 高可用集群,简称HAC
• 负载均衡,简称LBC
• 高性能集群,简称HPC
1、高可用集群
高可用集群高可用集群的英文全称是High Availability,简称HAC。高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。
2、负载均衡集群
负载均衡集群负载均衡集群也是由两台或者两台以上的服务器组成。分为前端负载调度和后端服务两个部分。负载调度部分负责把客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供应用程序服务的部分。与HA Cluster不同的是,负载均衡集群中,所有的后端节点都处于活动状态,它们都对外提供服务,分摊系统的工作负载。
3、高性能集群
科学计算集群高性能计算集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大计算能力,包括数值计算和数据处理,并且倾向于追求综合性能。HPC与超级计算类似,但是又有不同,计算速度是超级计算追求的第一目标。最快的速度、最大的存储、最庞大的体积、最昂贵的价格代表了超级计算的特点。随着人们对计算速度需求的提高,超级计算也应用到各个领域,对超级计算追求单一计算速度指标转变为追求高性能的综合指标,即高性能计算。
4.常用集群软硬件的介绍及选型
企业运维中常用的集群软硬件产品
在互联网企业中常用开源负载均衡软件有:LVS、Nginx、Haproxy,常用于高可用开源软件有:Keepalived、Heartbeat。
常用负载均衡硬件有:F5、Netscaler、Radware、A10等,工作模式相当于Haproxy的工作模式。
对于集群负载均衡产品如何选型?
现在对网络负载均衡的使用,是随着网站规模的提升,根据不同的阶段来使用不同的技术。
第一阶段:利用Nginx或者Haproxy进行单点的负载均衡。
第二阶段:随着网络服务进一步扩大,这时使用LVS或者商用F5就是首要选择。
第三阶段:这时网络服务已经成为主流产品,开源的LVS,已经成为首选,这时LVS会成为主流。
如何选择开源集群软件产品?
中小型互联网企业网站,首选Nginx负载均衡,考虑负载均衡的高可用功能,建议首先Keepalived软件,
大型互联网企业,负载均衡产品可以选择LVS+ Keepalived在前端做四层转发,再后面是应用服务器。
任务二:负载均衡部署
1.任务描述
在项目2中我们了解了Nginx作为Web服务器的特点,此外Nginx还能作为负载均衡来使用。Nginx作为负载均衡具有很多优点,本节中将深入解析Nginx作为负载均衡的配置和管理。
2.负载均衡部署
负载均衡知识网结构
正向代理:
局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
反向代理:
客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。
普通请求和响应过程
但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。
可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。
图解负载均衡:假设有15个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理5个请求,这个过程就叫做负载均衡。
负载均衡介绍
为了解决大容量、高并发访问的问题,移动电商采取集群分布
式部署的方式,将应用拆分后,部署到不同的服务器,实现大
规模集群分布式系统。
负载均衡原理
负载均衡(Load Balance),就是将负载(工作任务,访问
请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。
• 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,
进行处理,并返回相应数据。
• 负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。
这是一种把网络请求分散到一个服务器集群中的可用服务器上去的设备。
负载均衡的作用
1.提高响应速度
2.实现服务器高可用
3.扩展性
4.安全防护
5.对外提供一个IP地址
负载均衡分类
1.DNS负载均衡
历用域名解析实现负载均衡,在DNS服务器配置多个A记录,这些A记录对应的服务器构成
集群。一般部分使用DNS解析,作为第一级负载均衡,如图所示:
1.DNS负载均衡
在实践应用中,将DNS作为第一级负载均衡,A记录对应着内部负载均衡的多个IP地址,
通过内部负载均衡将请求分发到真实的应用服务器上,如图所示:
2. IP负载均衡
在网络层通过修改请求目标地址进行负载均衡,称为IP负载均衡。
后端服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器再将数据包
源地址修改为自身的IP地址,发送给用户浏览器。如图所示:
3.链路层负载均衡
在通信协议的数据链路层修改MAC地址,进行负载均衡,称为链路层负载均衡。
实际处理服务器IP和数据请求目的IP一致,不需要经过负载均衡服务器进行地址转换,
可将相应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽称为瓶颈,也称为
直接路由模式(DR模式),如图所示:
4.混合型负载均衡
把多个服务器群当作一个新的服务器群,即为混合型负载均衡。此种方式有时也用于
单台均衡设备的性能 不能满足大量连接请求的情况。是目前大型互联网公司普遍使用的方式。
根据适用的场景不同分为两种方式,方式一:
4.混合型负载均衡
方式二:
负载均衡算法
1.轮询
将所有请求一次按顺序分发到后端服务器上,不关心服务器实际连接数和系统负载。
适合服务器硬件相同的场景。
2.随机
通过系统的随机算法,将请求随机分配到各个服务器。
3.最少链接
根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理
当前的请求。
4.Hash(源地址散列)
根据IP地址进行Hash计算,得到IP地址。
5.加权
在轮询、随机、最少链接、Hash等算法的基础上,通过分配不同的权重,进行负载服务器
分配。
Nginx负载均衡概述
Ngnix具有反向代理负载均衡功能及环境缓存功能,是工作在七层Http协议的负载均衡系统。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡及Haproxy等专业代理软件,但是Nginx部署起来更为简单方便;在缓存服务功能方面,它又类似于Squid等专业的缓存服务软件。
均衡策略
nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash。扩展策略包含fair,通用hash、consistent hash等。
Nginx负载均衡
Nginx一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用,具体使用根据场景而定。
(1)入口负载均衡架构
Nginx服务器在用户访问的最前端,根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)。如图所示:
(2)内部负载均衡架构
LVS作为入口负载均衡,将请求转发到二级Nginx服务器,Nginx再根据请求转发到具体的应用服务器。如图所示:
(3)Nginx高可用
Nginx高可用,至少包含两个Nginx服务器,即一台主服务器和一台备服务器,两者之间使用
Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。如图所示:
Nginx负载均衡安装
1.安装依赖包 2.编译安装Nginx (查看实验指导书)
Nginx负载均衡配置与调试
Nginx配置文件详解
Nginx主配置文件主要分成四个部分:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和location(URL匹配特定位置的设置)。
其中main部分设置的命令将影响其他所有设置,server部分设置主要用于指定主机和对应的端口,upstream部分设置主要用于负载均衡后端对应的服务器,location部分设置用于匹配网页位置。这四者之间的关系为:server继承main,location继承server,upstream既不会继承其他部分的设置也不会被继承。
Nginx配置文件结构
任务三:实现服务器集群的高可用
1.任务描述
单台服务器部署存在隐患,一旦服务器故障,其所在的业务应用将不能使用,必须提高服务器对业务持续支持访问。
2.Keepalived是什么?
Keepalived起初是为LVS 设计的,专门用来监控集群系统中各个服务节点的状态。它根据layer3,4&5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入到服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
Keepalived后来又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写。它出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断地、稳定地运行。因此,Keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也具有HA cluster 功能.下面详细介绍下VRRP协议的实现过程。
3.Keepalived工作原理
在 Keepalived 服务之间,只有作为主节点会一直发送 VRRP 广播包,告诉备它还活着,此时备节点不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
Keepalived工作在TCPIP参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。根据TCP/IP参考模型各层所能实现的功能,Keepalived运行机制如下:
在网络层,运行着四个重要的协议:互联网协议IP、互联网控制报文协议ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么就认为此节点发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。
在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据传输服务,IP地址和端口,代表一个TCP连接的一个连接端。要获得TCP服务,须在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群节点是否正常的。比如,对于常见的 Web服务默认的80端口、SSH 服务默认的22端口等,Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。
在应用层,可以运行FTP、TELNET、SMTP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式,例如用户可以通过编写程序来运行Keepalived,而 Keepalived将根据用户的设定检测各种程序或服务是否允许正常,如果 Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。
想要深入了解keepalived,就要从vrrp通信来看
VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
VRRP是通过一种竟选协议机制来将路由任务交给某VRRP路由器的。
VRRP用 ip协议广播的方式(默认多播地址:224.0.0.18)实现高可用对之间通信。
工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
4.构建高性能主站点集群
Keepalived高可用软件介绍
Keepalived是Linux下一个轻量级的高可用解决方案,Keepalived主要是通过虚拟路由冗余来实现高可用功能。
Keepalived体系结构拓扑图
Keepalived的体系结构从整体上分为两层,分别是用户空间层(User Space)和内核空间层(Kernel Space)。
内核空间层处于最底层,它包括IPVS和NETLINK两个模块。用户空间层位于内核空间层之上,Keepalived的所有具体功能都在这里实现,包括Scheduler I/O Multiplexer、Memory Management、Control Plane和Core components。
5.构建高性能MySQL集群