原文地址:WebLogic如何在不停止当前应用的情况下重新部署应用程序作者:battleship101
我们经常会在生产环境下重新部署修改后的应用程序,很多时候我们会先停止当前的应用程序的运行,甚至还要清理缓存才能重新部署新版本的应用程序,人为地造成了业务停机时间。
其实WebLogic提供了在线重新部署的功能,在保证当前应用不停机的情况下重新部署新版本应用程序,同时可以设置旧版本应用程序的过期时间。当我们部署了新版本应用程序后新的链接将运行于新版本之上而当前已打开保持的链接仍然运行在老版本之上,直至达到过期时间限制。
下面我们通过示例来展示WebLogic的这一功能。
1. 假设当前集群环境中部署了应用程序browsestore,部署采用nostage模式,应用程序位于共享磁盘F:appbrowsestore。
2. 不停止当前运行中的应用而重新部署新的应用,有一个前提条件:当前已部署的应用程序必须带有版本标识符,版本字符串直接存储在所部署的 EAR 或 WAR 的 MANIFEST.MF
文件中。开发过程应先自动递增每个新应用程序版本的版本标识符,然后再将应用程序打包以进行部署。
如果当前部署的应用程序不包含上面所述的版本标识符文件,那就只能先停止应用程序,删除已部署的应用程序,使用weblogic命令行工具重新部署,部署时通过参数设定版本标识符。这个停止和删除动作只需执行一次,以后每次再更新应用程序时就可以不用再停止应用了。
3. 下面通过具体操作演示整个过程。
(一)先停止集群各个被管服务器,删除已部署的应用程序。
(二)通过Weblogic命令行工具重新部署原应用程序,并使应用程序带有版本标识符打开DOS窗口,进入Weblogic安装目录下的wlserver_10.3serverbin目录中,本示例为E:OracleMiddlewarewlserver_10.3serverbin
运行setWLSEnv.cmd,设置环境变量
运行Weblogic命令行工具,重新部署原应用程序。命令语法如下:
java weblogic.Deployer –adminurl t3://192.168.1.20:7001 –user weblogic –password password01! –deploy –name browsestore –source F:appbrowsestore –targets mycluster –appversion 20131001
命令各参数含义如下:
adminurl: 集群管理服务器地址和端口号,并且使用t3协议。
user: 登录weblogic控制台时输入的管理员用户名。
password: 登录weblogic控制台时输入的管理员口令。
name: 部署的应用程序名。
source: 部署的应用程序放置的目录。
targets: weblogic集群的名字。
appersion: 自定义版本号。
下面是部署成功的显示,表示集群内各个被管服务器都已部署成功。
此时通过控制台的“Deployments”部分可以看到应用程序已部署成功,与以前所不同的是现在带有程序版本标识<20131001>
正常启动集群所有节点的应用,运行应用程序。
(三)不停止应用的情况下部署新的应用程序
由于之前我们部署的应用程序已经带有版本标识符,所以现在可以在不停止原先应用的情况下部署新版本应用程序。部署完毕后新打开的IE链接会自动连接至新版应用程序。
将新的应用程序拷贝至新的目录(不要覆盖原应用程序),本示例中拷贝至E:appbrowsestore_20131012
打开DOS窗口,进入Weblogic安装目录下的wlserver_10.3serverbin目录中,本示例E:OracleMiddlewarewlserver_10.3serverbin
运行setWLSEnv.cmd,设置环境变量
运行Weblogic命令行工具,在线部署新版本应用程序。命令语法如下:
java weblogic.Deployer –adminurl t3://192.168.1.20:7001 –user weblogic –password password01! –redeploy –name browsestore –source F:appbrowsestore_20131012 –targets mycluster –appversion 20131012 -retiretimeout 300
命令各参数含义如下:
adminurl: 集群管理服务器地址和端口号,并且使用t3协议。
user: 登录weblogic控制台时输入的管理员用户名。
password: 登录weblogic控制台时输入的管理员口令。
name: 部署的应用程序名。
source: 部署的应用程序放置的目录。
targets:weblogic集群的名字。
appersion: 自定义版本号。
retiretimeout: 定义老版本应用程序继续工作多长时间,数字单位为(秒)
和之前部署命令唯一不同的是这次采用的部署参数是 -redeploy
显示Target state:redeploy completed on Cluster mycluster时表明重新部署已成功。
如果想让原应用系统仍然保留运行一段时间以便当前已打开的连接完成工作,还可以在命令后面设置参数:-retiretimeout 300(数字单位为秒)。当300秒过后原本打开的连接也会被强制断开以连接到新部署的应用程序。
通过weblogic控制台可以看到当前已部署了两个版本的应用程序,而之前老版本的应用程序处于Retired状态(State列),而新部署的应用程序已处于Active活动状态,可以对外发布应用提供访问。
当确认新版应用程序没有问题后可以通过weblogic控制台手工删除老版本的应用程序。