内容


如何为新创建的应用服务器配置 Web 管理控制台

Comments

WebSphere?Application Server V6.1 的 web 管理控制台提供许多功能指导您执行部署和系统管理任务,默认情况下,web 控制台只能通过概要文件 (profile) 中默认创建的应用服务器(如 server1)端口来访问,其它新创建的应用服务器(如 server2)无法使用 web 管理控制台,本文介绍了一个解决方案利用 wsadmin 命令将 Web 管理控制台映射到其他的应用服务器上,方便了用户管理部署在此服务器上面的应用程序,从而提高了生产效率。

1. 基本概念

本节简单介绍一下在本文中提到的几个关键概念:概要文件、应用服务器和管理控制台,本文将以 WebSphere Application Server V6.1 为基础来阐述。

概要文件

WebSphere Application Server 从 6.0 版本引进了概要文件(profile)概念,目的是将产品的二进制文件(binaries)与用户数据物理分离,并使用户能定义多组用户数据,从而使管理变得更加简单。在 WebSphere Application Server V6.1 中概要文件主要分三类:应用程序服务器概要、部署管理器概要和单元概要。安装 WebSphere Application Server V6.1 时会默认创建一个概要文件(如 AppSrv01),用来存贮用户数据包括配置文件、部署的应用程序等。您还可以使用 Profile Management 工具创建或删除概要文件。更多概要文件知识可参考 IBM 红皮书《WebSphere Application Server V6.1:系统管理与配置》。

应用服务器

应用程序服务器扩展了 Web 服务器的功能,以便处理 Web 应用程序请求(通常使用 Java 技术)。应用程序服务器使得服务器可能生成一个对客户机请求的动态、定制的响应。在安装过程中,WebSphere Application Server 将创建缺省应用程序服务器 server1,可以使用管理控制台或命令行工具来管理此应用程序服务器。可以通过 wsadmin 命令来创建应用程序服务器或一般服务器,如 AdminTask 对象中的 createApplicationServer 或 createGenericServer 命令。

管理控制台

管理控制台(admin console)是一个图形界面,提供了指导操作以记录常规任务,如配置数据库连接、部署应用程序,配置 WAS 的安全等,它指导您执行部署和系统管理任务。管理控制台是由某个应用程序服务器承载的,它只能连接到该应用程序服务器。默认安装的 WebSphere Application Server V6.1 会在应用服务器 server1 上部署了 web 管理控制台。本文第三节将详细介绍管理控制台的知识。

2. 问题的提出

为了提高运行时性能,许多部署在 WebSphere Application Server V6.1 上的应用程序要求拥有自己的应用服务器,如 Lotus?Connections 1.0.2 产品推荐为每个特性(activities、blogs、communities、dogear、profiles)建立独享的应用服务器,所以必须在安装之前创建这些服务器。使用独立的 WebSphere Application Server V6.1 时,最简单的方法是将默认 server1 应用服务器保留在适当位置上,用于托管 WEB 管理控制台,并在同一个应用服务器配置文件下创建新的应用服务器实例,用于托管要安装的特定 Lotus Connection 特性。例如,若要设置三个服务器来托管 Linux 服务器上的 Activities、Profiles 和 Dogear,则可以使用清单 1 中所示的命令。

清单 1. 创建应用服务器
/opt/WebSphere/AppServer/profiles/AppSrv01/wsadmin.sh
$AdminTaskcreatApplicationServer Node01 {-name ActivitiesServer}
$AdminTaskcreatApplicationServer Node01 {-name ProfilesServer}
$AdminTaskcreatApplicationServer Node01 {-name DogearServer}
$AdminConfig save

这些命令将创建三个服务器,每个服务器具有不同的服务端口集,并将服务器设置保存到 WebSphere Application Server V6.1 配置文件的配置中。但目前 WEB 管理控制台还不能被其它新创建的三个应用服务器所使用,只有缺省应用服务器(server1)才能使用管理控制台,对创建其他应用程序服务器,必须使用命令行工具来管理,这使得管理部署在新创建服务器上的应用程序(如 activities、dogear、profiles)变得非常麻烦。

本文下面将深入介绍管理控制台,并提出一种解决方案利用 wsadmin 命令将 Web 管理控制台托管到其他的应用服务器上,方便用户管理部署在此应用服务器上面的应用程序。

3. 剖析管理控制台

管理控制台是一个图形界面,它允许您为 WebSphere Application Server V6.1 环境管理应用程序和执行系统管理任务。管理控制台在 Web 浏览器中运行,在控制台中的操作会修改一组 XML 配置文件。

控制台的功能

可使用管理控制台以执行如下任务:

  • 添加、删除、启动和停止应用程序服务器
  • 将新应用程序部署到服务器
  • 启动和停止现有应用程序,并修改某些配置
  • 添加和删除应用程序的 Java 2 Platform, Enterprise Edition(J2EE)资源提供程序,这些应用程序需要数据访问、邮件、URL 等等
  • 配置产品安全性,包括对管理控制台进行的访问
  • 为供性能和故障诊断使用而收集数据
  • 查找产品版本信息。它位于控制台的首页。

图 1 显示了 WebSphere Administrative Console 主页,Application Server V6.1 信息中心有管理控制台程序的说明。

图 1. WEB 管理控制台
WEB 管理控制台
WEB 管理控制台

控制台的本质

WebSphere Application Server V6.1 中的一个概念是系统应用程序(system application),该应用程序是作为标准的 J2EE 应用程序来开发,但是倾向于作为 WebSphere Application Server V6.1 产品的一部分,不被终端用户所操纵。系统应用程序并没有显示在控制台中,并且也不包含在通过下面的 wsadmin 命令显示出来:

$AdminApp list

本命令返回 WebShpere Application Server 中所有的应用程序。 在 WebSphere Application Server V6.1 中并不是所有随 WebSphere Application Server 提供的应用程序都是系统应用程序,例如,J2EE Samples 就不是系统应用程序,系统应用程序的例子包含 isclite .ear 和 filetransfer.ear,管理控制台就是系统应用程序 isclite .ear,默认被映射到应用服务器上 (server1)。

4. 解决方案及实现

WebSphere Application Server V6.1 的管理性脚本编制程序 wsadmin 是一个强大的、非图形化的命令解释器环境,该环境允许您交互地执行管理操作或在脚本文件中执行管理操作。wsadmin 脚本工具旨在用于生产环境和无人(unattended)操作。wsadmin 脚本工具引入于 WebSphere Application Server V5。wsadmin 目前只支持 Jython 和 Jacl 两种脚本语言,并推荐使用 Jython 来编写 wsadmin 脚本。

三种 WebSphere Application Server 管理脚本编制对象反映了底层产品体系结构:

  • AdminControl: 公开系统的操作方面,这样您就可以通过 MBean 接口在活动的运行时组件上调用 JMX 操作。
  • AdminConfig: 公开系统的配置,这样您就可以更新 XML 配置文件。
  • AdminApp: 公开系统的应用程序部署选项;本质上来说,这是一个用于安装和部署应用程序的专门的配置对象。

通过使用 wsadmin 工具,管理员能够替代正在运行的管理控制台来配置、部署和管理 WebSphere Application Server 的多种元素。而且,用户能够使用脚本语言的固有功能(开发脚本)将 wsadmin 命令组合使用,从而自动化用户自定义的管理过程。

本文将灵活运用这三个对象的功能来实现 :

  • 创建新的应用服务器
  • 配置虚拟主机
  • 映射 WEB 控制台

将控制台应用程序(isclite.ear)部署到新创建的应用服务器上。本文以 Jython 语言来讲解,因为 Jython 是 Application Server V6.1 推荐使用的语言,Jacl 语言已不再推荐使用,并且将来 Application Server 的版本中不再支持 Jacl。

创建应用服务器代码

首先我们通过 wsadmin 脚本在指定的 Node 上来创建一个新的应用服务器,过程中主要利用到 AdminConfig 对象的 create 方法,代码片断和注释如清单 2 所示。

清单 2. 创建新的服务器
#--------------------------------------------------------------------------------------
# 创建新的服务器 , 传入两个参数 :node 名字和要创建的 server 名字
#--------------------------------------------------------------------------------------
def createServer(nodeName, serverName):
 """Create a server to the node.
 Return None."""
 #--------------------------------------------------------------
 # 设定全局变量
 #--------------------------------------------------------------
 global AdminConfig
 global AdminApp
 #--------------------------------------------------------------
 # 检查参数是否传入正确
 #--------------------------------------------------------------
 if (serverName is None):
 print "createServer: Error -- servername is null"
 return
 if (nodeName is None):
 print "createServer: Info -- nodename is null, 
please use -currentNode paremeter as a default node"
 elif(nodeName == '-currentNode'): 
# 如果传入为 -currentNode,获取默认的 cell 和 node
 values = getDefaultNode()
 if(len(values) != 2):
 print "createServer: Error -- please use another profile to do the opertion"
 return
 cellName = values[0]
 nodeName = values[1]
 print "createServer: Info -- default cell is " + cellName
 print "createServer: Info -- default node is " + nodeName
 	# 找到对应的 node
 node = AdminConfig.getid("/Node:" + nodeName + "/") 
 else:
 node = AdminConfig.getid("/Node:" + nodeName + "/") 
# 通过 node id 来找到对应的 node
 if(len(node) == 0):
 print "createServer: Error -- can not find the node with name " + nodeName
 return
 nodeStringList = node.split("(")
 if(len(nodeStringList) > 1):
 cellString = nodeStringList[1]
 cellPart= cellString.split("/")
 if(len(cellPart) > 1):
 cellName = cellPart[1] # 从 id 中得到 cell 的名字
 print "createServer: Info -- the cell to which the node belong is " + cellName
 else:
 print "createServer: Error -- can not find the cell to which the node " 
+ nodeName + " belong"
 return
 else:
 print "createServer: Error -- can not find the cell of the node with name " 
+ nodeName
 return
 print "createServer: Checking for existence of node " + nodeName
 #---------------------------------------------------------
 # 检查当前 node 是否已经存在了改名字的应用服务器
 #---------------------------------------------------------
 print "createServer: Checking to see if server " + serverName 
+ " is already on the node " + nodeName
 # 尝试得到应用服务器的 id
 server = AdminConfig.getid("/Node:" + nodeName + "/Server:" + serverName + "/")
 if len(server) != 0:
 print "createServer: Error -- Server " + serverName 
+ " is already existing on node " + nodeName
 return
 #--------------------------------------------------------------
 # 创建应用服务器 
 #--------------------------------------------------------------
 print "createServer: Creating a server " + serverName
 attributes = [["name", serverName]]
 try:
	# 创建应用服务器
 server = AdminConfig.create("Server", node, attributes)
 except:
 print "createServer: Error -- Fail to create server" + serverName
 return
 print "createServer: Saving the configuration"
 # 保存设置
 AdminConfig.save()

添加虚拟主机代码

利用 AdminConfig 对象的 create 方法,把创建好应用服务器的 http 服务的端口添加到虚拟主机中,这样在服务器上部署应用才可以对外提供服务,代码片断和注释如清单 3 所示。

清单 3. 添加虚拟主机代码
#-------------------------------------------------------------------------------------
# 将指定的端口添加到虚拟主机中
#-------------------------------------------------------------------------------------
def addVirtualHost(httpPort, httpsPort, httpAdminPort, httpsAdminPort):
 """ 把指定的端口添加到虚拟主机中
 返回值为空 ."""
 #--------------------------------------------------------------
 # 设置全局变量
 #--------------------------------------------------------------
 global AdminConfig
 global AdminControl
 global AdminApp
 updateHttpPort='true'
 updateHttpsPort='true'
 updateHttpAdminPort='true'
 updateHttpsAdminPort='true'
 vhs = AdminConfig.list('VirtualHost')
 vhlist = vhs.split(lineSeparator)
 for vh in vhlist:
 vhname = AdminConfig.showAttribute(vh, 'name')
 if(vhname == 'default_host'):
 has = AdminConfig.list('HostAlias', vh)
 haslist = has.split(lineSeparator)
 for ha in haslist:
 portnum = AdminConfig.showAttribute(ha, 'port')
	 # 如果 http 端口已经存在
 if(portnum == httpPort):
 print "The port " + portnum + " exists in Host Alias"
 updateHttpPort="false"
	 # 如果 https 端口已经存在
 elif(portnum == httpsPort):
 print "The port " + portnum + " exists in Host Alias"
 updateHttpsPort="false"
 if(updateHttpPort == "true"):
 hostAliasValue = [['hostname', '*'], ['port', httpPort]]
	# 创建 HostAlias (http)
 AdminConfig.create('HostAlias', vh, hostAliasValue)
 if(updateHttpsPort == 'true'):
 hostAliasValue = [['hostname', '*'], ['port', httpsPort]]
	# 创建 HostAlias (https)
 AdminConfig.create('HostAlias', vh, hostAliasValue)
 elif(vhname == 'admin_host'):
 has = AdminConfig.list('HostAlias', vh)
 haslist = has.split(lineSeparator)
 for ha in haslist:
 portnum = AdminConfig.showAttribute(ha, 'port')
 # 如果 http 端口已经存在于 HostAlias
 if(portnum == httpPort):
 print "The port " + portnum + " exists in Host Alias of admin_host"
 updateHttpAdminPort='false'
 # 如果 https 端口已经存在于 HostAlias
 elif(portnum == httpsPort):
 print "The port " + portnum + " exists in Host Alias of admin_host"
 updateHttpsAdminPort='false'
 if(updateHttpAdminPort == "true"):
	# 创建系统管理的 HostAlias (http)
 hostAliasValue = [['hostname', '*'], ['port', httpAdminPort]]
 AdminConfig.create('HostAlias', vh, hostAliasValue)
 if(updateHttpsAdminPort == 'true'):
	# 创建系统管理的 HostAlias (https)
 hostAliasValue = [['hostname', '*'], ['port', httpsAdminPort]]
 AdminConfig.create('HostAlias', vh, hostAliasValue)

添加管理控制台代码

这是本文最关键的一步,通过 AdminApp 对象将 ilclite 应用程序(即控制管理台),映射到指定的应用服务器上,代码片断和注释如清单 4 所示。

清单 4. 添加管理控制台代码
 #----------------------------------------------------------------------------------
# 将系统应用程序映射到指定的应用服务器上
#-----------------------------------------------------------------------------------
def AddAdminMap(cellName, nodeName, serverName):
 """ 把系统管理模块映射到应用服务器
 返回值为空 """
 #--------------------------------------------------------------
 # 设置全局变量
 #--------------------------------------------------------------
 global AdminConfig
 global AdminControl
 global AdminApp
 appName = 'isclite'
 serverToAdd = '+WebSphere:cell=' + cellName+',node='+nodeName+',server='+serverName
 mappingOption = [['.*', '.*', serverToAdd]] 
 moduleToServerTaskOption = ['-MapModulesToServers', mappingOption]
 # 把系统管理应用程序模块映射到应用服务器
 AdminApp.edit(appName, moduleToServerTaskOption)

5. 优点及好处

运行本文提供的脚本来创建应用服务器,结果如图 2 所示。

图 2. 命令行运行
 命令行运行
命令行运行

目前 WebSphere Application Server V6.1 支持 Jython 和 Jacl 语言的,对比来说 Jython 语言简单,易读有面向对象的特性,因为 Jython 是 Python 脚本的 Java 实现,也是 WebSphere Application Server V6.1 推荐的脚本语言,所以 Jython 在技术上得到的支持也会更大,有兴趣的读者,可以根据本文提供的 Jython 脚本,自己来编写 Jacl 脚本。本文通过利用解释控制器上的管理命令,介绍了 Jython 语言来创建应用服务器,添加虚拟主机,映射管理控制台,而且利用脚本批处理模式,可以很容易的创建新的应用服务器,部署 WEB 管理控制台(即 isclite 应用程序)到指定的应用服务器上,方便了客户管理部署在新创建服务器上的应用程序,从而提高生产开发效率。

6. 结束语

本文灵活运用 wsadmin 脚本,将系统应用程序映射到新建的应用服务器上,wsadmin 脚本功能非常强大,使用它能够更加轻松的配置及高效的管理 WebSphere Application Server 环境。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=316332
ArticleTitle=如何为新创建的应用服务器配置 Web 管理控制台
publish-date=06252008