刘金秀 陈怡华 谷长乐
摘 要:随着互联网的迅猛发展,传统的商务模式正在发生巨大变化:商家的销售模式和消费者的购物模式都在快速向互联网转变。本论文要解决的问题是Web应用系统的高并发和高可用问题,为此作者设计了一个在Linux操作系统下的Nginx+Keepalived的高可用架构。
关键词:Nginx;Keepalived;Mycat;高可用
Abstract:With the rapid development of the internet,the traditional business model is undergoing tremendous changes:the sales model of merchants and the shopping model of consumers are rapidly changing to the internet. The problem to be solved in this thesis is the high concurrency and high availability of the Web application system. For this reason,the author designs a high availability architecture of Nginx + Keepalived under Linux operating system.
Keywords:Nginx;Keepalived;Mycat;high availability
0 引 言
21世纪是信息大爆炸的时代。随着互联网的迅猛发展,传统的商务模式受到了巨大的冲击。近两年,整个社会都在大力推荐“互联网+”。在这样的大环境下,传统的商务模式正在发生翻天覆地的变化:商家的销售模式和消费者的购物模式都在快速向互联网转变。目前国内有阿里巴巴、淘宝、京东、当当网、唯品会、苏宁易购、一号店等电商平台,他们的线上销售做得比较成功,特别是京东,其拥有自己的京东物流和良好的售前售后服务,这无疑让他们的线上销售如虎添翼。
当前,中小企业对线上销售有很大的需求,但是因为种种原因,他们有的只能依托阿里巴巴和京东等这样的平台进行销售,有的是自己开发一个电商系统,进行线上销售。这样的线上销售方式存在着一些问题:依托大平台的企业,其商品的特色和性价比很容易淹没在大品牌效应中;另外,它们还需要向平台交付较高的管理费用,对很多小型企业来说,随着时间增长累计经费投入将成为一个很大的负担。很多企业可能会选择自己开发系统,然而,企业自己开发的系统,往往会因为架构原因,出现高可用和高并发问题。
基于这样的社会需求和技术需要,本文通过对市场上的架构进行研究分析,设计了一个可以处理高并发和高可用问题的架构——Nginx+Keepalived+Mycat集群架构,该集群架构可以满足一般电商企业的业务要求,也可以满足企业非电商业务的需求。
本文首先介绍了服务器集群以及集群中用到的一些技术,包括服务器集群分类,构建集群需要的软件,然后对不同服务器架构进行了比较,最后选择了一个适合中小型企业搭建自己的高可用Web系统的架构。
1 服务器集群介绍
1.1 服务器集群
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。一旦在服务器上安装并运行了集群服务,该服务器即可加入群集。集群化操作可以减少单点故障数量,并且实现了群集化资源的高可用性。[1]
1.2 集群技术的分类
高可用集群:高可用的英文全称是High Availability,此类集群可以给用户提供持久不间断的服务。
负载均衡集群:该类集群一般是由提供负载调度的前端服务和后端业务处理服务的多台服务器组成,该结构的后端服务器都对外提供服务,通过前端服务器的调度分摊系统的工作负载。
科学计算集群:这类集群致力于提供单个计算机不能完成的处理工作,倾向于追求综合性能。
本文讨论的对象是高可用和负载均衡集群。
1.3 LNMJ集群技术
LNMJ是一组开源软件包,主要包括Linux、Nginx、MySQL和Java EE。搭建这种集群,需要使用Nginx、Keepalived、Mycat等开源软件,其中,Nginx作为反向代理服务器,以解决负载均衡问题,它还可以作为静态Web服务器;Keepalived可解决高可用问题,又可以解决Nginx的单点故障问题;Mycat可以用来搭建双主双备的MySQL数据库服务器集群。
2 高可用负载均衡的集群架构设计
高可用和负载均衡架构原理图如图1所示。该架构中使用的技术介绍如下。
2.1 Nginx
Nginx是一款轻量级的高性能的Web代理服务器,目前在全球范围内新的大型网站很多使用Nginx服务器。同Apache的Httpd相比,它具有消耗资源少,可代理的后端服务器多的特点,因此市场占有率增长很快,目前占全球Web服务器的三成。
Nginx使用的场景是:有高并发的系统、需要解决负载均衡的系统和高可用场景。Nginx有两个功能:一是作为前端服务器响应静态页面的功能,二是作为集群中的反向代理服务器功能。
在图1中,主备Nginx服务器通过Keepalived保持通信,这里的Nginx是作为反向代理服务器来使用。[2]
2.2 Keepalived
Keepalived是用C语言写的一个开源路由软件。它使用VRRP协议实现高可用性,目的是为Linux系统和基于Linux的基础架构提供一个简单而强大的负载均衡和高可用设施。
图1的主备服务器中的Keepalived配置了虚拟IP(以下简称VIP),只有当主Nginx服务器中的Nginx服务停止,Keepalived在规定时间内在系统进程中发现主服务器的Nginx进程不存在,主服务器的Keepalived就停止服务。只有当主服务器中的Keepalived停止,备Nginx服务器的才会接管主Nginx的工作,以保证整个系统的高可用性,当主Nginx恢复工作,备Nginx会将管理权限交给主Nginx。[3]
2.3 MySQL双主热备
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)[4]。
MySQL的双主热备原理如图2所示。图中的左右Master是同一个Master。
2.4 Mycat
目前,Mycat是国内最活跃的、性能最好的开源数据库中间件。Mycat可以创建面向企业应用开发的大数据库集群。
基于以上介绍的技术,我们搭建如图3所示的Nginx下的高并发Web架构图。在图3的架构中,Mycat处于应用程序和数据库服务器之间,作为应用服务器和数据库服务器的桥梁,对用户的数据库操作请求进行处理,并且配置了读写分离,以提高电商系统中查询为主的数据库的读性能。
根据图2原理,在图3的架构中,搭建以主MySQL数据库集群node5和node6、备MySQL数据库集群node7和node8为数据库的双主从热备架构,且根据电商系统的某些大表,设计了以读为主的MyISAM和以写为主的InnoDB两种引擎,以提高读写效率,如果是小表,只使用InnoDB引擎,并且在Mycat中配置全局表,以实现跨节点join。[5]
3 不同服务器架构及比较
3.1 单Web服务器架构
平时我们使用单Web服务器(如图4所示)也就是使用一个Tomcat服务器来开发Web项目。单个的Tomcat服务器,如果没有配置,默认的最大并发数是200。通过测试,Tomcat7.0最大并发数250为性能完美的拐点,超过该并发数后,系统明显变慢,操作延迟,性能变差,丢包数增多,当并发数达到600时候,系统几乎不能使用,出现假死状态,很显然这种架构不适合具有大并发特性的电商网站。
本文作者做了两个测试,第一个测试是做并发登录测试,测试的条件是:数据表记录数为1000000,线程数为300的情况,使用虚拟机进行测试,在此种条件下,得到并发数为50、100、150、300的聚合报告,并对测试数据汇总,将一些关键数据提取到表1中,由表1可以看出,随着并发数的增加,服务器内存消耗越来越大,当并发数为150、300的时候,内存占用很高。
由表2可见,当数据表记录数是1000000,并发数是100情况下,查询没有出错;而当并发数为120时,已经出现15.83%的出错,平均查询时间为2676毫秒(近3秒);当并发数达到150时,出错率为32.67%,平均耗时2755毫秒,出错率太高,就数据库来说,这样的性能已经不满足电商网站的要求。
3.2 Nginx+Keepalived+Tomcat+Mycat架构
为了模拟一个中型的电商系统,本文使用8台虚拟机搭建LAMP高可用集群架构。虚拟机服务器的IP地址分配和安装软件如表3所示,图3的服务器集群就是基于表3而来的。
图3中的node1和node2作为主备Nginx服务器,可以解决单点故障[6]问题。当主Nginx出现故障,备Nginx服务器即刻可以接管主Nginx的工作。Nginx将客户端发来的请求根据某种算法发送到后端动态Web服务器TomcatX,Tomcat处理完用户的动态请求,将响应通过Nginx服务器返回给客户端,当业务逻辑需要访问数据库服务器时,通过Nginx访问中间件Mycat,对数据表进行处理。Mycat中配置了读写分离,以提高数据表的读写性能。
在图3架构下通过分别对系统并发操作和单独对数据库进行测试发现,数据库中的数据量越大,系统的读功能越强,查询时间越快,而写时间稍微慢,原因是配置的双主备数据库架构的影响。
4 结 论
图3的Nginx+Keepalived+Mycat后端服务器集群架构,既解决了Web系统的单点故障问题,也解决了高并发问题,适于中小型高并发系统,但对于淘宝天猫这样的系统来说,这样的架构还是不适合大型电商系统,由于上下行数据都是通过Nginx服务器传输,当数据量很大的情况下,Nginx服务器是整个架构的数据传输瓶颈,如何解决该问题,作者将在后续研究中再讨论。
参考文献:
[1] 百度百科.服务器集群 [EB/OL].https://baike.baidu.com/item/服务器集群/5309783,2019-05-21.
[2] Nginx. nginx documentation [EB/OL].http://nginx.org/en/docs/,2019-03-31.
[3] Keepalived.What is Keepalived? [EB/OL].http://www.keepalived.org/index.html,2019-05-21.
[4] 百度百科.双机热备 [EB/OL].https://baike.baidu.com/item/双机热备/2394182,2019-05-21.
[5] MyCAT官网.什么是MYCAT [EB/OL].http://www.mycat.io,2019-03-31.
[6] 百度百科.单点故障 [EB/OL].https://baike.baidu.com/item/单点故障/3570893,2019-05-21.
作者简介:刘金秀(1967.01-),女,汉族,湖南湘潭人,本科,硕士,高级工程师,研究方向:软件工程;陈怡华(1994.10-),女,汉族,广东汕头人,管理人员,研究方向:教学管理;谷长乐(1992.02-),男,汉族,湖南衡阳人,管理人员,研究方向:思想政治教育。