




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EnterpriseEnterpriseJavaApplicationsonVMware:HighAvailabilityGuidelines基于VMware部署企业级Java应用程序高可用性指南基于VMware部署企业级Java应用程序高可用性指南©2010VMware,Inc.保留所有权利。此产品受美国和国际版权法及知识产权法保护。此产品拥有/download/patents.html中列出的一项或多项专利。VMware是VMware,Inc.在美国和/或其他法律辖区的注册商标或商标。此处提到的所有其他标志和名称分别是其各自公司的商标。3401HillviewAvePaloAlto,CA94304北京办公室北京市海淀区科学院南路2号融科资讯中心C座8层邮编:100190电话:+86-400-816-0688/+86-800-915-1919或+86-10-5993-4200上海办公室上海市徐汇区淮海中路1010号嘉华中心27楼2720-2721室广州办公室广州市天河北路233号中信广场7401室©2010VMware,Inc.保留所有权利。第2页(共22页)©2010VMware,Inc.保留所有权利。第3页(共22页)基于VMware部署企业级Java应用程序高可用性指南 2.1概述:实现高可用性的分阶段方法 62.2第1阶段确立零停机应用程序发布策略 72.3第2阶段:建立处理流量猝发事件的动态运行时机制 92.4第3阶段:建立灾难恢复策略 14 基于VMware部署企业级Java应用程序高可用性指南©2010VMware,Inc.保留所有权利。第4页(共22页)基于VMware部署企业级Java应用程序高可用性指南11.简介本文档介绍基于VMware部署企业级Java应用程序的高可用性体系结构以下几个方面的内容,包括:•在计划维护过程中执行零停机(无缝)应用程序发布的能力•处理流量猝发事件和维持充足SLA的能力•执行有效灾难恢复的能力为正在对企业级Java应用程序的各种高可用性选项进行评估的IT架构师提供了重要注意事项和指导。另请参见此解决方案套件中的配套文档《基于VMware部署企业级Java应用程序最佳实践指南》。©2010VMware,Inc.保留所有权利。第5页(共22页)基于VMware部署企业级Java应用程序高可用性指南22.高可用性设计许多设计可支持基于VMware部署企业级应用程序的高可用性。企业级Java应用程序体系结构有四个主要所示。图1.企业级Java应用程序体系结构通常每个层都被分离到其自己的虚拟机(VM),虚拟机允许在运行时无需停机,即可水平扩展和垂直扩展。此功能对于提供零停机应用程序部署、处理流量猝发事件的动态能力以及更好的灾难恢复机制都至关重要。2.1概述:实现高可用性的分阶段方法图2说明了实现高可用性的分阶段方法。图2.实现高可用性的分阶段方法©2010VMware,Inc.保留所有权利。第6页(共22页)基于VMware部署企业级Java应用程序高可用性指南2.2第1阶段确立零停机应用程序发布策略2.2.1背景下面是设计和实施企业级Java应用程序的零停机发布时面临的主要挑战:•通过脚本编写取消手动发布步骤-应用程序部署经常不必要地占用很长时间,因为在发布过程中有太多的手动步骤。零停机设计的第一步应是充分编写每个动作的脚本。有助于聚集每个层中所有步骤的脚本编写方法是将ApacheAnt与各种Shell脚本和VMwarevSphere™API结合使用(参见附录A中所述的VI-JavaAPI)。所有部署步骤的充分自动化还有助于自动化回滚过程。VMware可以实现对虚拟机状态拍摄快照,如果需要触发回滚,这将很有帮助。•确定故障切换点-最审慎的切换方法是从负载平衡器层进行。在负载平衡器层,您能够以用户友好型方式转移流量并最大限度地减少对应用程序SLA的影响或损坏。•处理数据库状态的同步化-最终需要有两个数据库:一个用于主站点,另一个用于辅助站点。同步化第二数据库并使其保持最新至关重要。尤其对于在发布过程中更改数据库模式的情况,更是至关重要。在某些情况下,因为只有数据更改,而不需要针对发布更改模式,所以更易于完成发布,而且不必使用多个数据库实例。•发布编排挑战–了解各种应用程序在各种虚拟机上运行的步骤和依赖关系对于策划发布编排至关重要。基于VMwarevSphere运行的Java应用程序可以从VMwarevMotion™等功能中获益,从而在不停机的情况下移动虚拟机,或利用VMwareHA在计划维护期间以最少的停机在主机之间移动虚拟机。•选择发布时间窗口-对于具有全天候活动用户群的企业级Java应用而言,选择适当发布停机时间窗口并不是一项简单的任务。VMwarevSphere功能和零停机发布策略相结合,有助于减少对协商发布时间窗口的需要。虽然如此,在非高峰时间执行发布是明智之举,因为生产1向缩小版本生产2切换的需求(请参见图3)最大限度地减小了额外基础架构复杂性。©2010VMware,Inc.保留所有权利。第7页(共22页)©2010VMware,Inc.保留所有权利。第8页(共22页)基于VMware部署企业级Java应用程序高可用性指南2.2.2零停机应用程序发布的体系结构图3显示了一个数据中心内的两个生产站点副本。该配置可提供从生产1应用程序集群向生产2应用程序集群转换的能力。还可提供从一个应用程序集群向另一个应用程序集群转换的高级别流程。图3.零停机应用程序发布的体系结构从生产1向生产2转换1.在发布日期之前,创建生产1的生产副本并将其命名为生产2。使用虚拟机模板可以快速、轻松地创建副本。2.利用负载平衡器从生产1向生产2转换(参见附录B)。3.在生产1环境中对虚拟机拍摄快照。使用主要部署脚本开始应用程序部署/发布过程(有关示例脚本,请参见附录A)。产2之间的数据库,因为在生产2活动期间可能已经引进了更多数据。(有关数据库同步技术,请5.如果QA过程确定部署成功,则可以在负载平衡器级别转换到生产1。否则,回滚到上次保存的快照(从第3步),然后切换回来。因为发布通常在非高峰时间执行,因此生产2可能是生产1的缩小版。基于VMware部署企业级Java应用程序高可用性指南2.3第2阶段:建立处理流量猝发事件的动态运行时机制处理流量猝发事件的能力要求在运行时无需停机,即能够增加虚拟机的大小、向集群添加更多ESX主机并增加虚拟机的数量。此外,如果您使用可以与VMwareAPI集成的负载平衡器将流量转移到新添加的资源,会有很大帮助。F5负载平衡器具有此功能。除了可以添加资源外,如果您不再需要它们,还可以轻松将其删除。2.3.1虚拟机的垂直可扩展性-CPU和内存热添加带有支持CPU和内存热添加的客户操作系统的虚拟机可以利用此功能,以在运行时更改虚拟机配置,而且不会对虚拟机操作造成任何中断。当您尝试增加虚拟机处理更多流量的功能时,此功能尤其有用。•提前规划并启用此功能。必须关闭虚拟机,才能启用热插拔功能。启用后,只要客户操作系统支持,便可以在运行时无虚拟机停机的条件下完成CPU和内存的热添加。•要启用热插拔/热添加功能,请单击“VM”(虚拟机)>“EditSetting”(编辑设置),然后单击“Options”(选项)选项卡。图4.虚拟机属性选项选项卡©2010VMware,Inc.保留所有权利。第9页(共22页)基于VMware部署企业级Java应用程序高可用性指南要在不停机的条件下添加CPU,请选择CPU,选择虚拟处理器处理,然后单击“Add”(添加)。(您可以类似的方式添加内存。)图5.虚拟机属性-添加CPU调整有许多其他方面。有关其他参考,请参阅第4节,包括JVM文档。始终将客户操作系统的大小设置为比使用的总体堆空间大至少1GB。如果正在虚拟机上部署多个JVM,请将每个JVM的最大堆大小添加到最终客户操作系统的内存分配中。2.3.2水平可扩展性-添加新虚拟机您可以创建新虚拟机并将其添加到DRS集群中,或者在所需要的主机上创建新虚拟机。某些负载平衡器(如F5BIG-IP)可以检测到新虚拟机,将虚拟机添加到池配置,并将流量转移到新虚拟机。©2010VMware,Inc.保留所有权利。第10页(共22页)基于VMware部署企业级Java应用程序高可用性指南2.3.3使用DRS和资源池将新主机添加到集群在另一台主机上重启虚拟机。您还可以使用DRS平衡集群中各主机之间的负载,以实现最佳性能。通过在资源池内预留所需的虚拟机内存或通过将其限制/约束为指定级别,可以在集群内使用多个资源池以管理计算机资源使用。此功能还有助于满足SLA和服务目标质量。图6.启用HA和DRS的屏幕©2010VMware,Inc.保留所有权利。第11页(共22页)©2010VMware,Inc.保留所有权利。第12页(共22页)基于VMware部署企业级Java应用程序高可用性指南图7显示了三个可用的DRS自动化级别:“Manual”(手动)、“Partiallyautomated”(部分自动化)和“Fullyautomated”(完全自动化)。在多数情况下,不熟悉虚拟化的管理员首先使用“Manual”(手动)模式,对DRS建议先观察一段时间。当确信建议有效时,再将此选项设置为“Fullyautomated”(完全自动化)。当您要管理数百台主机时,此设置尤其有用。此外,DRS允许您分离或结合虚拟机规则。例如,如果您拥有两台Web服务器用于针对应用程序进行负载平衡流量,您不会想要将两者都放置在同一台主机上,因为如果主机发生故障,两者都将瘫痪。您可以设立DRS规则,即两台Web服务器应始终位于单独的主机上。相反,如果两台虚拟机需要以创建许多流量的方式频繁地相互通信,您可以选择让它们始终位于同一台主机上。VMwareHA和VMwareDRS打开时,可以实现99.9%的正常运行时间,不需要其他任何集群技术。这表明,基础架构的其他部分具有充分冗余,而且没有底层Java应用程序代码问题。图7.显示DRS自动化级别的屏幕基于VMware部署企业级Java应用程序高可用性指南2.3.4利用负载平衡器发现新添加的虚拟机在vSphere中创建新的虚拟机非常简单,然而进行必要的网络修改来配置这些新的虚拟机,以使负载平衡器可以将流量传送给它们,却一直是一项挑战。F5BIG-IP通过其iControlAPI与VMwarevCenter集成以接收指令,该指令可以触发F5BIG-IP针对应用程序使用高峰对网络流量进行调整。当在vCenter中添加新虚拟机时,F5BIG-IP负载平衡器可以自动将这些新服务器添加到其负载平衡池,而且可以将流量传送给它们。图8说明了负载平衡器如何根据其从vCenter接收到的信息自动将流量重新配置到负载平衡池,从而开始将流量传送到新虚拟机。图8.利用负载平衡器发现新添加的虚拟机©2010VMware,Inc.保留所有权利。第13页(共22页)©2010VMware,Inc.保留所有权利。第14页(共22页)基于VMware部署企业级Java应用程序高可用性指南2.4第3阶段:建立灾难恢复策略F5BIG-IP全局负载平衡器和VMwareSRM的集成可针对两个数据中心之间(或云)的自动化灾难恢复提供一套完整的解决方案。如果发生灾难,SRM将自动编排两个站点之间虚拟机客户和虚拟基础架构的故障切换,同时BIG-IP全局负载平衡器将所有传入的客户端应用程序流量重新传送至辅助站点。通过F5iControlAPI可以轻松地将F5BIG-IP全局负载平衡器和SRM集成。图9显示了两个站点之间的典型vCenterSiteRecoveryManager设置。图9.典型VMwarevCenterSiteRecoveryManager设置基于VMware部署企业级Java应用程序高可用性指南33.小结通过利用VMware技术,有不同的方法可以实现高度可用的企业级Java应用程序。以下功能对于实现最佳可用性至关重要:•通过主要部署脚本进行完全自动化应用部署,如第2节和附录A中所讨论。这对于在发布过程中减少计划内停机至关重要•能够无停机地在运行时热插拔/热添加虚拟机CPU和内存•能够添加新主机和虚拟机并且使它们由负载平衡器自动发现和配置•利用VMwarevCenterSiteRecoveryManager和负载平衡器技术执行灾难恢复解决方案的能力您可以通过您的Java应用服务器的集群配置对这些功能进行补充。图10显示了所有功能构成了一个体系结构,其能够实现99.99%的正常运行时间。这表明,基础架构的其他部分具有充足冗余,没有底层Java应用程序代码问题,而且数据库服务器也具有99.99%的正常运行时间。图10.99.99%可用性的体系结构©2010VMware,Inc.保留所有权利。第15页(共22页)基于VMware部署企业级Java应用程序高可用性指南附附录A:主要部署脚本示例本附录提供了有关针对基于VMware部署的企业级Java应用程序创建主要部署脚本的信息。该脚本能够与虚拟机交互和操纵客户操作系统文件,也能够与Java应用服务器(WAR文件部署)和数据库交互。您可以使用ApacheAnt和VMware-VI-Java-API与虚拟机交互,以创建所有部署步骤的主要脚本。下面讨论了各种主要功能,并提供了所需的脚本片段。Note尽管可以通过UI从vSphereClient中获取此功能的大部分,但是当您需要处理多台虚拟机时,能够对此进行脚本编写将很有用。主要部署脚本的一般架构包含以下功能步骤:1.拍摄虚拟机快照。2.与负载平衡器交互以激活从一个应用程序集群到另一个应用程序集群的切换。3.与Java应用服务器交互以部署应用程序WAR文件。4.与数据库服务器交互以应用SQL脚本(该脚本可能是您应用程序发布的一部分)。5.如果需要回滚,与虚拟机交互以恢复到先前的快照。以下脚本片段适用于单个虚拟机的情形。您需要修改这些脚本以处理多个虚拟机。要重复用于多个虚拟机,可在正在实施Java应用发布的环境内所包含的虚拟机组中,在多个迭代/循环中重复使用此处所述的单个虚拟机方法。©2010VMware,Inc.保留所有权利。第16页(共22页)基于VMware部署企业级Java应用程序高可用性指南主部署脚本概述该脚本基于ApacheAnt和VI-Java-API的使用。<projectname="MyProject"default="runMasterDeploymentScript"basedir="."><targetname=”runMasterDeploymentScript”depends=”takeSnapshotOfVM,switchLoadBalancer,deployDBChanges,deployWARFile”></target><targetname="takeSnapshotOfVM"><javafork="true"maxmemory="256m"jvm="${JavaHome}"classname="yourcompay.SnapshotManager"><argvalue="-takeSnapshot"/><argvalue=”${vcenterURL}/><argvalue=”${adminUsername}”/><argvalue=”${adminPwd}/><argvalue=”${vmname}”/><argvalue=”${snapshotname}”/><argvalue=”${desc}”/><classpath><pathelementpath="${VIJavaHome}/vijava2120100715.jar"/></classpath></java></target><targetname=”switchLoadBalancer”><!—-invokeLoadbalancerAPIorshescripttoswitchfromProduction-1toProduction-2--></target><targetname=”deployDbChanges”><sqldriver="org.database.jdbcDriver"url="jdbc:database-url"userid="sa"password="pass"><transactionsrc="data1.sql"/></sql></target><targetname=”deployWARFile”><!—useAntCopytasktocopyfiletodestinationandAntUnziptasktoextract!</target><targetname="rollBackToPriorSnapshot"><javafork="true"maxmemory="256m"jvm="${JavaHome}"classname="yourcompay.SnapshotManager"><argvalue="-revertSnapshot"/><argvalue=”${vcenterURL}/><argvalue=”${adminUsername}”/><argvalue=”${adminPwd}/><argvalue=”${vmname}”/><argvalue=”${snapshotname<classpath><pathelementpath="${VIJavaHome}/vijava2120100715.jar"/></classpath></java></target></project>©2010VMware,Inc.保留所有权利。第17页(共22页)基于VMware部署企业级Java应用程序高可用性指南如何使用VI-Java-API与虚拟机进行交互拍摄虚拟机快照您可以将这些调用打包到Java命令行调用中,或者将其包含在AntJava任务中。使用服务器实例对象连接到vCenter。然后用于执行各种虚拟机功能。//noteyouwillneedvijava2120100715.jarforexampleonyourCLASSPATHPublicclassSnapshotManager{publicServiceInstancegetServiceInstance(StringvcenterURL,StringadminUsername,StringadminPwd){ServiceInstancesi=null;try{si=newServiceInstance(newURL(vcenterURL),adminUsername,adminPwd,true);}catch(RemoteExceptione){e.printStackTrace();}catch(MalformedURLExceptione){e.printStackTrace();}returnsi;}Publicstaticvoidmain(String[]args){SnapshotManagerssm=newSnapshotManager();If(arg[0].equals(“takeSnapshot”){//Ssm.takeSnapshotOfVM(vcenterURL,adminUsername,adminPwd,vmname,snapshotname,desc)ssm.takeSnapshotOfVM(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6])}elseif(arg[0].equals(“revertSnapshot”)){ssm.revertToSnapshotOfVM(arg[1],arg[2],arg[3],arg[4],arg[5])}}©2010VMware,Inc.保留所有权利。第18页(共22页)基于VMware部署企业级Java应用程序高可用性指南您可以使用getServiceInstance方法拍摄虚拟机快照:publicStringtakeSnapShotOfVM(StringvcenterURL,StringadminUsername,StringadminPwd,Stringvmname,Stringsnapshotname,Stringdesc){ServiceInstancesi=getServiceInstance(vcenterURL,adminUsername,adminPwd);FolderrootFolder=si.getRootFolder();StringreturnFlag=null;try{VirtualMachinevm=(VirtualMachine)newInventoryNavigator(rootFolder).searchManagedEntity(VIRTUAL_MACHINE,vmname);Tasktask=vm.createSnapshot_Task(snapshotname,desc,false,false);{returnFlag=Task.SUCCESS;{returnFlag="failure";}}catch(InterruptedExceptione){//othercatchclausesomittedforbrevity…//othercatchclausesgohere…}returnreturnFlag;}如果您需要拍摄多个虚拟机的快照,可以重复该方法N次,以获得虚拟机组的快照。©2010VMware,Inc.保留所有权利。第19页(共22页)基于VMware部署企业级Java应用程序高可用性指南恢复快照publicStringrevertToSnapshotOfVM(StringvcenterURL,StringadminUsername,StringadminPwd,Stringvmname,Stringsnapshotname){StringreturnFlag=null;try{ServiceInstancesi=getServiceInstance(vcenterURL,adminUsername,adminPwd);FolderrootFolder=si.getRootFolder();VirtualMachinevm=(VirtualMachine)newInventoryNavigator(rootFolder).searchManagedEntity("VirtualMachine",vmname);VirtualMachineSnapshotvmsnap=getSnapshotInTree(vm,snapshotname);{Tasktask;task=vmsnap.revertToSnapshot_Task(null);{System.out.println("Revertedtosnapshot:"+snapshotname);returnFlag=Ta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论