学科分类号:520.6070湖南xxxxx学院本科生毕业设计档案材料论文题目:大型Web网站数据存储与性能调优DataStorageandOptimizationforLargeWebSite学生姓名:xx学号xx系部:计算机科学技术系专业年级:xx级计算机科学与技术指导教师:xx职称:教授xx学院教务处2011制1一、毕业设计开题报告书(一)选题的根据1、本选题的理论、实际意义现在我们所处的时代是一个信息大爆炸的时代,由于信息技术发展,特别是互联网的出现,产生并要处理的数据已经达到了PB(1PB=1024TB)级、EB(1EB=1024PB)级、甚至更多,势必要求Web服务器的性能也越来越高。所以在网站的建设中必须对服务的要求做好做全,对于一些突发的事件也要考虑到网站的建设中。在网站建设中有可能遇到千万人同时访问某个网站,所以一个Web服务器网站就得需要多个数据库同时工作,就是网上所说的数据库集群和并发控制。同时在空间上我们可以将数据分布在地理位置不同的数据中心,这样不仅可以有效的避免断电事故,而且也减小了对主数据库的负载,提高了Web服务器的性能。对于产品宣传,日常管理,售后服务以及电子商务等服务企业来说,Web服务器的性能直接影响着他们的效益,对于这些企业都希望自己的Web服务器能满足不间断的应用服务需求,但是处于成本的考虑,很多企业会选择使用MySQL软件来管理网站的后台数据。同时还要考虑到系统的稳定,不能使系统处于宕机的状态,在系统稳定方面来说,个人觉得Linux已经做得比较好了,而且这个系统是开源的,熟悉Linux的技术人员比较多利于系统管理、优化,出现的问题很多可以在网上找到相应的解决方法。仔细分析了以上服务业对网站的需求后,本次课题研究了基于Linux平台的大型Web网站服务器集群与架构。使用稳定性较好的Linux系统来做服务器系统。在LinuxWeb数据库中选取了目前被广泛使用的,成本低廉的数据库软件MySQL进行设计改进。在数据库软件中MySQL是一款非常优秀的开源数据库管理软件,非常适合用多台PCServer组成多点的存储借点阵列(这里指的不是MySQL自身提供的集群功能),每单位的数据存储非常低廉。用多台PCServer安装MySQL组成一个存储节点阵列,通过MySQL自身的Replication或者应用自身的处理,可以很好的保证容错(允许部分节点失效),保证应用的健壮性和可靠性。而且MySQL数据库服务器的Master-Slave模式,利用数据库服务器在主从服务器间进行同步,应用只把数据写到主服务器,而读数据时则根据负载选择一台从服务器或者主服务器来读取,将数据按不同策略划分到不同的服务器(组)上,分散了数2据库的压力,也保证了Web服务数据能够不间断的被客户访问。2、综述国内外有关本选题的研究动态和自己的见解很长一段时间,人们只能通过传统的媒体(如电视、报纸、杂志和广播等)来获得信息。但是随着计算机技术的发展,人们获取信息的方式已不再满足于传统媒体那种单方面的传输和获取,而希望有一种主观的选择性。当今,网络已经提供各种类型的数据库系统,如文献期刊、气象信息、论文检索等等。在计算机网络发展的推动下,信息的获取变得非常及时、迅速和便捷。1993年,的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得上最为流行的信息传播方式。现在,Web服务器成为Internet上最大的计算机群,Web文档之多、链接的网络之广,令人难以想象。可以说,Web为Internet的普及迈出了开创性的一步,是近年来Internet上取得的最激动人心的成就。Web应用是Internet上一种最重要、最广泛的应用形式,现在越来越多的应用采用基于Web服务器的B/S计算模式。随着应用复杂性和使用者的增加,Web服务器的系统容量正面临着巨大的挑战。采用大容量的服务器替代原有系统会导致巨大的开销,无法保护原来的投资,而且这种办法也不是一种真正的解决之道。Web服务器集群技术为Web服务器系统容量的不断扩展提供了良好的途径,它将一组Web服务器通过一定的形式组织在一起,构成单一的服务器映像,以提供强大的服务能力。这种系统具有较高的性能价格比和良好的系统可靠性,并且能够通过添加服务器的方式来不断扩充系统的容量,因此,Web服务器集群技术已经成为构建大型Web网站系统的关键技术之一。目前国内许多网站自身的确存在不少问题,主要表现在:第一,规模小、联系不紧密,处于各自为政的分散状态;第二,国内网站在首页页面上通常会放置太多内容,也存在很多广告,使整体版面过于杂乱;第三,安全性低。国内只有交易、银行等网站才会注意到安全连接的问题。正是由于中国商业网站现存在的种种问题和不足,在面对外来强大竞争对手时,不免产生担忧和底气不足,对未来的发展心存疑虑和困惑。但这并不能从根本上解决问题,也不是商业网站发展壮大的长远之计。对本土商业企业资源的整合、共享、利用是大势所趋,引进先进的设计理念迫在眉睫。由于经济方面的关系,国外网站的建设要比国内的乐观。国外网站的规模比较大,而且渐渐趋向于多元化。在网站的稳定性方面也高于国内的许多网站。3(二)研究内容本课题研究的主要内容包括MySQL主从复制,MySQL代理Proxy与MySQL读写分离。1、MySQL主从复制MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。当从服务器连接主服务器时,主服务器上开启一个IO线程将主服务器上更新的二进制日志文件传输给从服务器,从服务器开启两个线程,一个线程用于I/O,主要用来处理客户端对该服务器网站的请求,另外一个线程执行Master的Binlog中SQL语句,按照读取的主服务器二进制日志文件,将主服务器上发生的任何更新,在从服务器上再执行一遍,以达到与主服务器同步的要求。2、MySQL代理ProxyMSQL代理是一个介于MySQL客户端和MySQL服务器之间的简单程序,可用来监视、分析或者传输他们之间的通讯。它在客户端和服务器端建立一个数据库连接池,当MySQL客户端访问MySQL服务器时,先把请求放在这个数据库连接池中,通过分析判断客户端发来的是什么类型的请求,来决定MySQL客户端与哪个MySQL服务器进行连接。可以看出它在逻辑上可以区分开各个MySQL数据库的职责,能够更高效的处理客户端发来的请求,保证了充足的打开的连接,完成事务的处理和查询处理,降低了单个MySQL数据库的负担。3、MySQL读写分离MySQL服务器中主数据库主要负责写入和查询数据,而从数据库只负责查询数据。当客户端向该网站发送请求时,MySQLProxy会在客户端和服务器端建立一个连接池,通过分析客户端发出的请求来把连接分配给服务器。当客户端用户对这个网站执行查询操作时,MySQLProxy会把客户端发来的请求分配给从数据库,让从数据库来完成客户端查询数据的请求。当客户端用户在网站上执行写操作时(如:注册用户),MySQLProxy就会把客户端发来的请求分配给主服务器,在主服务器上先进行更新,然后通过主从复制将服务器上主数据库的更新同步到从数据库中。客户端用户用MySQL客户端程序如MySQL登陆到MySQL代理,可以执行读写操作,客户端对数据的读写由MySQLProxy程序来调度实现读写分离。4(三)研究方法、拟解决的关键技术、实验方案及可行性分析1、研究方法①文献检索法:通过查阅相关文献资料并对其进行研究分析;通过查阅书籍,网络和向指导老师请教的方法进行知识准备,由浅入深,由易到难,由简到繁的进行研究。查看各文献了解别人的研究内容,全面了解掌握其核心技术,指导本系统分析设计与实现。②案例分析法:通过案例分析借鉴成功项目的经验,使项目做起来更加得心应手。③面向对象软件工程法:世界万物都可以抽化成对象,以人的思维在计算机中展现现实世界。按照面向对象方法学首先进行面向对象的分析,结合名词抽取法的分析理念,识别出系统的使用者,系统大体的架构与功能模块。然后进行面向对象的设计,结合以用例为驱动的设计思想,逐一的分析系统的功能模块,识别出系统的各个用例。④模块的重用与复用法:根据面向对象的分析与设计后得到的网站的模型,再结合以前网站设计的经验,进行网站的设计。重用以前项目的相同功能模块,从而大大的缩短开发的时间,提高了网站设计的效率。2、拟解决的关键技术Oracle对服务器的要求相对较高,相同配置下对于数据处理要求不大的应用比如网站,论坛;MySQL不论是从安装,管理配置上都比Oracle更合适,但是对于大型的网站,单个MySQL数据库又满足不了日常需求,比如备份,数据同步等等高可用。所以这个时候就要启用MySQL的AB主机复制功能,也就是俗称的数据同步。MySQL作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台MySQL作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力这样的方案来进行部署与实施的。如下图1所示:5图1主从复制方式MySQL主从复制的主要原理是Slave请求连接Master;Master开启1个线程(IO线程)将自己的二进制文件传输给Slave;Slave开启两个线程,1个线程用于I/O,另外一个线程执行Master的Binlog中SQL语句,对库进行同样的操作;从而达到同步的目的。MySQL代理Proxy主要原理如图2所示:6图2MySQL代理MySQL代理是一个介于MySQL客户端和MySQL服务器之间的简单程序,可用来监视、分析或者传输他们之间的通讯。他的灵活性允许你最大限度的使用它,这些包括负载平衡、容错、分析查询和修正等等,其最大用处就是实现MySQL的读写分离,降低单个MySQL数据库的负担,在逻辑上区分开各个MySQL数据库的职责。MySQLProxy真正意义上实现了读写分离。(其实如果你手动做读写分离,MYSQL主从复制架构就可以实现)它是在客户端和服务器端建立了一个数据库连接池,它通过分析客户端发出的请求来把连接分配给服务器以达到负载均衡的目的。有了这个连接池,我们就可以保证充足的打开的连接,完成事务的处理和查询处理。我们可以用MySQL客户端程序如MySQL登陆到MySQL代理,然后执行读写操作,以测试读写分离的正确性。3、实验方案MySQL主从复制1IP规划:2安装相关系统包73安装MySQL4拷贝配置文件5修改用户远程登录权限6修改配置文件(/etc/my.cnf)主服务器server-id=1从服务器server-id=2..3..4依次增加7启动服务(主从相同)#serviceMySQLstart8授权(仅主服务器)9查询主数据库状态(主服务器上)10配置从服务器11测试MySQL代理Proxy1IP地址规划:给MySQL读、写服务器,MySQL-Proxy代理服务器各分配一个IP2安装过程中所要用到的包如:libevent,lua,MySQL和MySQLProxy3配置MySQL-Proxy4测试:建议开3个以上的线程来测试,开启多个连接后通过netstat–anp查看MySQL进程连接不同的MySQL数据库MySQL读写分离1硬件需求:两台已安装完成的MySQL主从服务器,一台MySQL代理,一台客户机。2编译环境:3安装读写分离需要的包:MySQL客户机所要安装的包有:pkg-config,libevent,glib,lua,check,MySQL-devel,MySQL-Proxy。4编写MySQL-Proxy启动脚本:使MySQL-Proxy开机启动。5安装MySQL客户机:8#rpm-ivhMySQL-client-community-5.1.46-1.rhel4.i386.rpm6测试