UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》《《《《LinuxLinuxLinuxLinux系统运维之系统运维之系统运维之系统运维之系统架构》系统架构》系统架构》系统架构》UNIXHOTUNIXHOTUNIXHOTUNIXHOT运维运维运维运维社区社区社区社区《Linux系统运维之系统架构》版权信息:Copyright(c)2010ZhaoShundong.Permissionisgrantedtocopy,distributeand/ormodifythisdocumentunderthetermsoftheGNUFreeDocumentationLicense,Version1.2oranylaterversionpublishedbytheFreeSoftwareFoundation;withnoInvariantSections,noFront-CoverTexts,andnoBack-CoverTexts.AcopyofthelicenseisincludedinthesectionentitledGNUFreeDocumentationLicense.使用说明:1.为保证本文的完整性和可用性,本文遵循GFDL协议。2.可以在找到本文的最新版本。3.本文仅供参考使用,不承担任何因文档错误而造成的任何损失。4.有任何问题可以在UnixHot运维社区讨论交流。5.有相关问题或业务合作。请邮件至admin@unixhot.com。相关文档:1.《Linux系统运维之系统架构》《Linux系统运维之系统管理》《Linux系统运维之运维监控》《Linux系统运维之性能优化》《Linux系统运维之运维规范》《Linux系统运维之MySQLDBA》《Linux系统运维之OracleDBA》打造中国最专业的运维门户网站《Linux系统运维之系统架构》修订历史记录日期版本说明2011-01-01V1.0以PDF方式网络发布。UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》内容简介本文通过生产应用实例,从运维工程师的角度对目前流行的Web架构做了实验性的讲解,该系列的文档属于手册类型,可以直接在生产环境部署运行。本文讲解的方案都是在互联网公司应用比较成熟,也比较通用的方案。如LAMP、LNMP、LVSKeepalived、Apache+Tomcat负载均衡和Nginx+Tomcat负载均衡等。目录(Contents)第1章系统架构概述1.1Web应用架构1.2JSP网站概述1.3PHP网站概述1.4什么是集群1.5集群的主要类型第2章LAMP应用2.1Apache服务器简介2.2ApacheMPM原理和设置2.3源码安装LAMP第3章LNMP应用3.1Nginx安装3.2MySQL客户端安装3.3PHP扩展模块安装3.4PHPFastCGI模式安装3.5启动测试第4章集群中的文件共享UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》4.1DAS、NAS和SAN4.2inotify+rsync触发式同步数据4.3Sersync部署第5章负载均衡中的Session解决5.1负载均衡中Session的问题5.2负载均衡中Session的解决方法5.3Nginx做负载均衡Session解决5.4ApacheTomcat负载均衡Session解决第6章ApacheTomcat负载均衡第7章NginxTomcat负载均衡第8章LB负载均衡集群2.1LVS简介2.2LVS-NAT方式部署2.3LVS-DR方式部署第9章LVSKeepalived集群5.1LVSKeepalived集群简介5.2部署LVSKeepalived5.3LVS配置5.4Keepalived配置5.5LVSKeepalived集群测试UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》第第第第1111章章章章系统架构概述系统架构概述系统架构概述系统架构概述1.1Web应用架构作为跨世纪青年,我们处于云计算和Web2.0的时代,搜索、视频、SNS、微博等WEB应用铺面而来。根据美国知名IT产业分析机构IDC的白皮书表述:以Blog、Wiki、Tagging和SNS四类应用为代表的Web2.0趋势在中国互联网市场中引起了广泛的反响。在加上目前琳琅满目的电子商务网站,团购网站。太多太多的问题等待着有人去解决。不同的Web脚本语言,不同的架构让很多架构师和运维工程师不知到如何入手。1.21.21.21.2JSPJSPJSPJSP网站概述网站概述网站概述网站概述1.2.11.2.11.2.11.2.1相关名词解释1J2EE、J2SE、J2ME三者的区别J2EE是Java2enterpriseedition是Java的一种企业版用于企业级的应用服务开发J2SE是Java2standardedition是Java的标准版,用于标准的应用开发J2ME是Java2MicroEdition是Java的微型版,常用于手机上的开发J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库。针对企业网应用的J2EE(Java2EnterpriseEdition)、针对普通PC应用的J2SE(Java2StandardEdition)和针对嵌入式设备及消费类电器的J2ME(Java2MicroEdition)三个版本2JDK、JRE、SDK三者的区别JDKJava开发工具包,JavaDevelopmentKit里面有运行环境JRE和开发时所需要的Java类库,以及一些编译调试运行的程序,如java.exe,javac.exe,javaw.exe等。JREJava运行环境JavaRuntimeEnvironment.这个仅仅只是Java运行的环境,没有Java无法运行,一般JRE被包括在JDK中,也可以单独装一个独立的JRE.SDK是一些公司针对某一项技术为软件开发人员制作的一套辅助开发或者减少开发周期的工具.比方你用的Eclipse就是Java的SDK,它全称就是EclipseSDK.UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》Java世界中,只有独一无二的一套JDK。J2ME,J2EE都是在这套JDK基础上的扩展。1.2.21.2.21.2.21.2.2JSPJSPJSPJSP应用服务器运行JSP应用的中间件主要有Tomcat、JBOSS、Weblogic、WebSphere。1.3PHP网站概述在近几年的编程语言排名上,PHP始终在第4名左右徘徊。PHP站点到处可见,而且很多我们每天都登陆的1.3.11.3.11.3.11.3.1PHPPHPPHPPHP常用开源框架1TinkPHP(本土优秀的开源PHP框架)(对外贸易的顶级开源框架)(做PHP的都知道)(学习MVC都用过)什么是集群将多台同构或异构的计算机连接起来协同完成特定的任务就构成了集群系统。1.5集群的主要类型1.5.1HA(HighAvailability)高可用性集群的主要功能就是提供不间断的服务。有许多应用程序都必须一天二十四小时地不停运转,如所有的web服务器、工业控制器、ATM、远程通讯转接器、医学与军事监测仪以及股票处理机等。对这些应用程序而言,暂时的停机都会导致数据的丢失和灾难性的后果。HA集群通过特殊软件把独立的系统连接起来,组成一个能够提供故障切换功能的集群,HA集群可以保证在多种故障中,关键服务的可用性、可靠性及数据完整性,HA集群主要用于文件服务、WEB服务,数据库服务等关键应用中。HA集群的开源项目:Heartbeat详情见官方网站:《Linux系统运维之系统架构》1.5.2LB(LoadBalancing)负载均衡集群,在LB服务器上使用专门的路由算法,将数据包分散到多个真实服务器中进行处理,从而达到网络服务均衡负载的作用。LB集群的开源项目:LVS详情见官方网站:(HighperformanceComputing)DC(DistributedComputing)PC(ParallelComputing)高性能集群通过将多台机器连接起来同时处理复杂的计算问题。模拟星球附近的磁场、预测龙卷风的出现、定位石油资源的储藏地等情况都需要对大量的数据进行处理。传统的处理方法是使用超级计算机来完成计算工作,但是超级计算机的价格比较昂贵,而且可用性和可扩展性不够强,因此集群成为了高性能计算领域瞩目的焦点。分布式高性能计算(DC)OpenMosixOpenSSI并行式高性能计算(PC)Beowulf第第第第2222章章章章LAMPLAMPLAMPLAMP应用应用应用应用2.1Apache服务器简介2.2ApacheMPM原理和设置在我们编译安装Apache之前,要考虑的是让Apache在什么样的模式下运行,因为从Apache2.0就加入了MPM(Multi-ProcessingModules,多道处理模块)。(摘自网络,很经典)Apache2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。本文不想叙述那些以功能换取速UNIXHOT打造中国最专业的运维门户网站《Linux系统运维之系统架构》度的指令,如HostnameLookups等,而只是说明在2.0中影响性能的最核心特性:MPM(Multi-ProcessingModules,多道处理模块)的基本工作原理和配置指令。毫不夸张地说,MPM的引入是Apache2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要