第一章 重新部署策略概述
在生产环境中,已部署的应用程序经常需要24x7的可用性,以便为客户和内部客户提供不间断的服务。WebLogic Server提供了灵活的重新部署策略,以帮助您根据所需的可用性级别更新或修复生产应用程序。
1 生产重新部署
生产重新部署策略涉及将更新的应用程序的新版本与同一应用程序的旧版本一起部署。WebLogic Server自动管理客户端连接,以便仅将新的客户端请求定向到新版本。在重新部署期间已经连接到该应用程序的客户端将继续使用该应用程序的旧版本,直到他们完成工作为止,此时WebLogic Server会自动淘汰该旧应用程序。可以提供不间断地提供客户端访问。WebLogic Server使您能够重新部署生产应用程序的新的更新版本,而不会影响该应用程序的现有客户端,也不会中断该应用程序对新客户端请求的可用性。
2 应用程序和模块就地重新部署
就地重新部署会立即用更新的部署文件替换正在运行的应用程序的部署文件。与生产重新部署相比,应用程序或独立Java EE模块的就地重新部署不能保证为应用程序的客户端提供不间断的服务。这是因为WebLogic Server立即删除了该应用程序的运行类加载器,并将其替换为新的类加载器,该类加载器加载了更新的应用程序类文件。对于未指定版本标识符的Java EE应用程序以及生产重新部署中不支持的Java EE应用程序和独立模块,WebLogic Server使用就地重新部署策略。您应该确保仅在计划的应用程序停机期间,或者在保留与应用程序的现有客户端连接不是很关键的时候,才进行应用程序和独立Java EE模块的就地重新部署。
2.1 静态文件的部分重新部署(就地部署)
WebLogic Server使您可以重新部署正在运行的应用程序中的选定文件,而不是一次重新部署整个应用程序。此功能通常用于更新正在运行的Web应用程序中的静态文件,例如图形,静态HTML页面和JSP。部分重新部署仅适用于使用展开的存档目录部署的应用程序。静态文件的部分重新部署不会影响应用程序的现有客户端。WebLogic Server只需替换已部署应用程序的静态文件,并在请求时将更新的文件提供给客户端。更新不影响应用程序客户端的单个Web应用程序文件。
2.2 Java EE模块的部分重新部署(就地部署)
部分重新部署还使您能够重新部署已部署的Enterprise应用程序中的单个模块或模块子集。同样,仅使用爆炸归档目录进行部署的应用程序才支持部分部署。请注意,在企业应用程序中对模块的重新部署使用就地重新部署策略,该策略不能保证客户端对模块的不间断访问。因此,您应该确保仅在计划的应用程序停机期间或在保留客户端对应用程序访问权限不是很关键的情况下,才可以在EAR中部分重新部署Java EE模块。
3 了解何时使用不同的重新部署策略
重部署策略 | 摘要 | 用法 |
生产重新部署 | 与应用程序的现有版本一起重新部署应用程序的较新版本。 | 升级需要不间断客户端访问的Web应用程序和企业应用程序。 |
应用程序和模块的就地重新部署 | 应用程序类加载器将立即替换为较新的类加载器,以加载更新的应用程序类文件。WebLogic Server不能保证在重新部署期间不中断的客户端访问,并且现有客户端的状态信息可能会丢失。 | 替换已离线进行计划维护的应用程序。 升级不需要不间断客户端访问的应用程序。 |
静态文件的部分重新部署(就地重新部署) | HTML,JSP,图形文件或其他静态文件将立即替换为更新的文件。 | 更新不影响应用程序客户端的单个Web应用程序文件。 |
Java EE模块的部分重新部署(就地重新部署) | 模块类加载器将立即替换为较新的类加载器,以加载更新的类文件。WebLogic Server不能保证客户端在重新部署期间对模块的不间断访问,并且现有客户端的状态信息可能会丢失。 | 替换已离线进行计划维护或不需要不间断客户端访问的Enterprise应用程序组件 |
4使用生产重新部署来更新应用程序
WebLogic Server通过将新版本的应用程序与较旧的运行版本的应用程序一起部署来执行生产重新部署。在进行重新部署时,该应用程序的一个版本“处于活动状态”,而另一个版本“正在退出”。活动的应用程序版本会收到该应用程序的所有新客户端连接请求,而退出的应用程序版本仅处理进行重新部署时存在的那些客户端连接。在应用程序的所有现有客户端完成工作或达到配置的超时后,WebLogic Server会取消部署即将淘汰的应用程序版本。
第二章 实际项目重部署测试
1 应用程序版本及所在目录规划
代理:nginx 192.168.60.151:8080
集群:myCluster 192.168.60.151:7003,192.168.60.151:7004
当前部署的应用程序(版本1.0)的文件存储在:
/weblogic/myDeployments/demostage1/demo.war
更新的应用程序(版本1.1)文件存储在新的目录中:
/weblogic/myDeployments/demostage2/demo.war
2 部署1.0版本应用程序
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -deploy -name myTest -source /weblogic/myDeployments/demostage1/demo.war -targets myCluster -stage -appversion 1.0GA |
部署成功
通过nginx负载均衡访问结果:
3 重新部署新的应用程序版本(1.1)
默认情况下,WebLogic Server使应用程序的新重新部署版本处于活动状态,以处理新的客户端请求。现有客户端将继续使用较旧的应用程序,直到其工作完成并且可以安全地取消部署较旧的应用程序。如果要指定一个固定的时间段,在该固定的时间段后将淘汰该应用程序的旧版本(无论客户端是否完成工作),则在-redeploy中使用选项-retiretimeout命令。例如指定30秒淘汰。
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -redeploy -name myTest -source /weblogic/myDeployments/demostage2/demo.war -targets myCluster -appversion 1.1GA -retiretimeout 30 |
重部署成功:
30秒过后,刷新浏览器可以看到旧版本已经被停用了。
4 回滚生产重新部署过程
撤消生产重新部署过程将切换活动和退出应用程序的状态,并相应地重定向新的客户端连接请求。如果您发现新部署的应用程序版本出现问题,并且希望阻止客户端访问它,则可能需要恢复生产重新部署过程。
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -redeploy -name myTest -source /weblogic/myDeployments/demostage1/demo.war -targets myCluster -appversion 1.0GA -retiretimeout 30
|
回滚成功:
5 取消部署
如果WebLogic Server尚未淘汰应用程序版本,则可以立即取消部署该应用程序版本,而无需等待退出完成。例如,如果应用程序仅在一个或两个您不想保留的长期运行的客户端会话中处于退休状态,则可能有必要。要强制取消部署应用程序的退休版本,请使用-undeploy命令并指定应用程序版本。该命令可以取消部署任意部署好的版本应用程序。
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -undeploy -name myTest -appversion 1.1GA |
取消部署成功截图:
6 分发应用程序新版本1.1
分发新版本的应用程序时,WebLogic Server准备新的应用程序版本以进行部署。然后,您可以在“管理”模式下部署该应用程序,这使其只能通过已配置的“管理”通道使用,外部客户端无法访问以管理模式分发和部署的应用程序。该应用程序的旧版本保持活动状态,以处理新的和现有的客户端请求。当您在“管理”模式下分发和部署新版本时,注意:WebLogic Server不会自动淘汰该应用程序的旧版本。通过“管理”通道完成对新应用程序的测试后,可以取消部署新应用程序版本或启动它。启动应用程序会使WebLogic Server将新的客户端连接路由到更新的应用程序,然后开始淘汰较旧的应用程序版本。
6.1 分发应用程序步骤
(1)
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -distribute -name myTest -source /weblogic/myDeployments/demostage2/demo.war -targets myCluster -stage -appversion 1.1GA |
新版本应用分发完成:
(2)分发应用程序后,以“管理”模式启动它:
在“管理”模式下启动该应用程序使客户只能通过已配置的“管理”通道访问应用。
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -start -adminmode -name myTest -appversion 1.1GA |
分发完成:
- 使应用程序对客户可用
使用已配置的管理通道执行最终测试之后,使用weblogic.Deployer -start不带以下-adminmode选项的命令将在管理模式下运行的应用程序的分布式版本打开到新的客户端连接。如果要指定一个固定的时间段,在该固定的时间段后将淘汰旧版本的应用程序(无论客户端是否完成工作),请使用以下-retiretimeout选项
命令:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -start -name myTest -appversion 1.1GA -retiretimeout 30 |
启动成功:
30秒过后,刷新浏览器可以看到旧版本已经被停用了。
新版本的应用程序已经部署成功:
第四章 生产重新部署的最佳实践
- 开发的应用程序必须遵循Oracle的生产重新部署编程惯例,否则切勿为生产应用程序指定版本字符串。
- 在stage模式下部署应用程序时,最容易使用生产重新部署。在stage模式下,WebLogic Server会为部署的每个不同版本的应用程序自动创建一个单独的目录。这些目录存储在服务器的已配置暂存目录中(默认情况下server_name/stage是域目录的子目录),并且在取消部署关联的应用程序版本时将这些目录删除。
- 如果以nostage模式进行部署,则将应用程序的每个新版本存储在专用子目录中。这样可以确保您不会覆盖部署文件的旧版本,并且如果在更新后检测到问题,则可以恢复到较早的应用程序版本。
- 如果以external_stage模式进行部署,则必须将每个应用程序版本的部署文件存储在每个目标服务器的登台目录的正确版本子目录中。例如,在部署和重新部署之前,需要将先前示例命令中使用的版本化的应用程序文件复制到子目录中/weblogic/myDeployments/demostage1/以及/weblogic/myDeployments/demostage2/每个服务器的登台目录中。
第五章 结论
通过weblogic的生产重部署可以实现WebLogic Server将新的客户端请求路由到以前分发的新应用程序版本(1.1)。现有客户端将继续使用较旧的应用程序(1.0),直到其工作完成并且可以安全地取消部署较旧的应用程序。这样就可以实现在用户无感知的情况下灰度部署应用程序,避免停机。
参考:
https://docs.oracle.com/cd/E23943_01/web.1111/e13702/redeploy.htm#DEPGD285
基本命令:
查看部署的应用
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -listapps
部署
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -deploy -name myTest -source /weblogic/myDeployments/demostage1/demo.war -targets myCluster -stage -appversion 1.0GA
重部署
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -redeploy -name myTest -source /weblogic/myDeployments/demostage2/demo.war -targets myCluster -appversion 1.1GA
固定的时间后淘汰旧版本(秒)
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -redeploy -name myTest -source /weblogic/myDeployments/demostage2/demo.war -targets myCluster -appversion 1.1GA -retiretimeout 30
回退 直接使用undeloy淘汰旧版本
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -undeploy -name myTest -appversion 1.1GA
回滚生产重新部署过程。如果您发现新部署的应用程序版本出现问题,并且希望阻止客户端访问它,则可能需要恢复生产重新部署过程。
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -redeploy -name myTest -source /weblogic/myDeployments/demostage1/demo.war -targets myCluster -appversion 1.0GA -retiretimeout 300
分发应用程序
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -distribute -name myTest -source /weblogic/myDeployments/demostage2/demo.war -targets myCluster -stage -appversion 1.1GA
分发应用程序后,以“管理”模式启动它:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -start -adminmode -name myTest -appversion 1.1GA
默认情况下,WebLogic Server将新的客户端请求路由到以前分发的并在管理模式下运行的应用程序版本。现有客户端将继续使用较旧的应用程序,
直到其工作完成并且可以安全地取消部署较旧的应用程序。如果要指定一个固定的时间段,在该固定的时间段后将淘汰旧版本的应用程序(无论客户端是否完成工作),请使用以下-retiretimeout选项:
java weblogic.Deployer -adminurl t3://192.168.60.151:7001 -user weblogic -password weblogic123 -start -name myTest -appversion 1.1GA -retiretimeout 30