【IT168 技术文档】
前言
适用读者
对WPS有了一定的了解。曾经使用控制台搭配置过ND6环境。
工具用途
1.搭建WPS的ND6一直都是一个很复杂的过程。尤其当你需要做演示环境或者测试环境时。通过这套脚本程序,您可以“一次配置,重复受益”,最大程度的节约您的时间,并可以使你更加了解通过wsadmin命令的方式去如何实现每一步骤的细节。
2.通过此文章对wsadmin脚本编程和工具包使用方法的阐述,读者既可以做很小的改动(仅是配置上的)就可以只点击一下回车构建ND6,又可以修改脚本具体内容,订制您的ND结构。
3.脚本工具包里的每个方法都可以单独运行。因此可以直接嵌入到您的脚本程序中供您使用。
4.对wsadmin的很多命令进行了封装,可以使您类似于使用管理控制台一样,使用脚本的方法堆砌,完成你的配置目标。
注:其中代码为作者编写,拥有版权。未经允许,不得擅自整段抄袭。
1.WPS ND6介绍
简介:关于ND的介绍可以参考dw上的《WPS Network Deployment 经验分享》,网址:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0706_junjie/
WPS根据messaging engines(ME) 和destinations的集群情况将ND分为8种类型分别称作ND1-8.
ND1 ND – no clusters
ND2 Application cluster, Messaging engines (ME) and destinations not clustered
ND3 ME cluster, Applications and destinations not clustered
ND4 ME and destinations clustered, Applications not clustered
ND5 Applications and ME clustered – same cluster, Destinations not clustered.
ND6 Applications, ME and destinations clustered – same cluster
ND7 Applications and ME clustered but different clusters, Destination not clustered
ND8 Applications, ME and Destinations clustered, but different clusters
本篇文章针对部署过程中最复杂烦琐的ND6拓扑方式进行自动部署脚本包的开发和使用进行介绍。
关于ND6的理论部分可以参考以上链接中的文章,ND6即是ND6的逻辑结构图如下:
从上图可以看出在ND6中,对application,ME和destination都做了Cluster。
2. wsadmin和jacl介绍
2.1 Jacl语言介绍
Jacl(Java Command Language)是Tcl(Tool Command Language)脚本语言为适应Java环境的一个版本实现。Tcl是由Sun(by John Ousterhout)开发的一个非常优秀的编程语言。Jacl 作为Tcl的Java实现,完全支持JAVA,其内核解释器完全用Java语言编写,可以运行在任何Java虚拟机上,可以完全访问Java API。
对于Tcl编程者,Jacl提供了一个独立于平台的Tcl的实现。这意味着在Java运行的地方,Tcl都可以运行。另外一个好处是,Jacl具有丰富的Java API的支持。关于Jacl的语法,详见http://tclJava.sourceforge.net/docs/website/index.html。
2.2 WebSphere管理脚本编程接口(wsadmin)
管理脚本接口是通过图形界面管理之外的备用方法,可以使用它来配置和管理应用程序及应用程序服务环境。WebSphere 管理(wsadmin)脚本编制程序是功能强大的、非图形的命令解释器环境,它允许用户用脚本语言运行管理操作。用户可以使用 wsadmin 工具执行那些可以用管理控制台执行的相同任务。
下表对wsadmin管理对象进行了对比说明。
wsadmin 目前支持两种脚本语言:Jacl 和 Jython。Jacl 是缺省指定的语言。当使用脚本编制执行任务时,首先使用Jacl编写脚本程序,在Jacl程序中,用户可以调用wsadmin的各种管理对象对应用服务器进行管理和配置,包括对运行时对象的管理。然后调用脚本编制进程的命令wsadmin以启动脚本编制客户机。
3.自动部署项目结构
整个项目由上图所示的目录结构组成。其中
contents:可以存放您用来自动部署在wps上的ear包。
docs:为使用手册
jacllib:存放一些基础函数和方法的jacl文件
jacls:下面是配置ND6的jacl脚本。
javalib:此目录下是为了扩展使用Staf时使用的java调用类的示例(本文章不涉及)。
sh:下面是组织各个jacl脚本的shell脚本。
wap:是IBM提供的WAP工具包,可以从以下url获得
http://www-03.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/PRS981
4.自动脚本工具包配置
使用此脚本工具集,您既可以通过定制脚本的内容,创建任意拓扑的ND6环境也可以使用脚本默认支持的拓扑结构,只需修改主机名和您的节点名称等基础信息就可以创建出ND6环境。
4.1 脚本运行条件
a. 环境支持:
1. 各个服务器之间互相联通,主机名可以相互解析。系统时间差在5分钟之内。
2. 每台服务器上已经预安装了WPS 6022的产品。并且创建好Dmgr和Customer的profile。并且已经将customer profile 加入到dmgr profile。
3. Dmgr profile与node agent已经处于启动状态。
4. 拷贝此工具包到Dmgr所在的服务器,并赋予可执行权限。
5. 此脚本只能运行与Unix/Linux环境上,如果是windows系统可以使用Sygwin工具来运行Linux命令。
b. 数据库支持:
默认支持DB2做为数据库,在运行脚本之前,要建立好commonDB,BPEDBA BPEDBB 和MEDB,其中,commonDB是WPS所用的DB,BPEDBA、BPEDBB为两个BPC Cluster所用的BPE DB,MEDB为message engine使用的DB,这里共用一个MEDB,将用不同的schema来区分。
4.2 标准ND6环境的拓扑图
此脚本工具包里提供的默认ND6拓扑结构如下图所示,包含三个cluster,和一个singleserver。分别为两个BPC cluster和一个 CEI cluster。目前脚本仅实现了BPC cluster和single server的自动搭建。每个BPC cluster里包含两个server。
4.3 配置方法
a. 进入项目中的sh文件夹,修改setenvND6.sh脚本。在此脚本中定义了脚本得以依赖运行的环境变量。
RES_LOC 为此脚本包所在的位置。
WAS_HOME 为wps6022 的安装目录。
DMGRPROFILENAME 为此ND环境中dmgr的profile名字。
WSADMINUSER 为在启了全局安全性之后访问wsadmin的用户名。
WSADMINUSERPWD为在启了全局安全性之后访问wsadmin的密码。
b. 进入项目中的sh文件夹,修改configINSAll.sh脚本。在此脚本中,组合了jacl脚本,用来创建一个默认的ND6环境。其中包含两个BPC Cluster,每个cluster含有两个server。一个singleserver,并且为每个server创建了HA policy。此脚本中仅是按顺序执行各个jacl脚本,其中具体的逻辑实现是在jacl脚本里。
下面具体说明每一句的意义:
第一部分用来创建cluster和singleserver 并且为他们配置SCA:$WAS_HOME/profiles/$DMGRPROFILENAME/bin/wsadmin.sh -wsadmin_classpath $CLASSPATH -profile "$RES_LOC/wap/wapmain5.jacl" -username $WSADMINUSER -password $WSADMINUSERPWD -f $RES_LOC/jacls/ND6/SetupND6_1.jacl >>./logs/INSAutoOut.log 2>&1
此句使用wsadmin来执行jacl脚本SetupND6_1.jacl .并使用到/wap/wapmain5.jacl为基础脚本库。
第二部分为已经创建好的两个cluster配置BPC:
使用WPS6022里的脚本:bpeconfig.jacl,并将此版本修改成silent模式。其中配置过程中需要的所有变量在Nd6BPEClusterA.jacl、Nd6BPEClusterB.jacl里进行指定。
$WAS_HOME/profiles/$DMGRPROFILENAME/bin/wsadmin.sh -wsadmin_classpath $CLASSPATH -profile "$RES_LOC/wap/wapmain5.jacl" -username $WSADMINUSER -password $WSADMINUSERPWD -f $WAS_HOME/ProcessChoreographer/config/bpeconfig.jacl -file Nd6BPEClusterA.jacl >>./logs/INSAutoOut.log 2>&1
$WAS_HOME/profiles/$DMGRPROFILENAME/bin/wsadmin.sh -wsadmin_classpath $CLASSPATH -profile "$RES_LOC/wap/wapmain5.jacl" -username $WSADMINUSER -password $WSADMINUSERPWD -f $WAS_HOME/ProcessChoreographer/config/bpeconfig.jacl -file Nd6BPEClusterB.jacl >>./logs/INSAutoOut.log 2>&1
第三部分用来向集群里增加成员,在默认的配置中,每个集群包含两个集群成员。并且针对每个集群成员配置HA Policy。
$WAS_HOME/profiles/$DMGRPROFILENAME/bin/wsadmin.sh -wsadmin_classpath $CLASSPATH -profile "$RES_LOC/wap/wapmain5.jacl" -username $WSADMINUSER -password $WSADMINUSERPWD -f $RES_LOC/jacls/ND6/SetupND6_2.jacl >>./logs/INSAutoOut.log 2>&1
此语句主要执行SetupND6_2.jacl脚本。
第四部分为创建ND6的最后一步,在这一步骤里,目的是修改每个message engine的data store的schema name。这样如果在MEDB为同一个数据库的情况下不会导致表名冲突。
$WAS_HOME/profiles/$DMGRPROFILENAME/bin/wsadmin.sh -wsadmin_classpath $CLASSPATH -profile "$RES_LOC/wap/wapmain5.jacl" -username $WSADMINUSER -password $WSADMINUSERPWD -f $RES_LOC/jacls/ND6/ModifyDataStore.jacl >>./logs/INSAutoOut.log 2>&1
c. 配置ND6的属性参数
进入到目录\jacls\ND6\,修改Nd6Parameters.jacl。此文件分成两个部分,一部分为-the Common content-,这部分通常配置时都需要针对自己的环境进行修改,即便是拓扑结构采用脚本中默认的设置。第二部分为-customer definition part-,这部分仅在您需要更改拓扑结构或者集群要素名称时需要更改。
在Common content部分的Env. part,定制修改3个节点所在的主机的名字(需要在hosts文件中有定义),和节点的名字。在BPC CONFIG PART ,设置bpc explore访问的主机名和端口号。在DB part需要指定数据库服务器的主机名,端口,用户名,密码等信息。SIB data store part部分指定了schema的前缀信息,脚本会在前缀后递增的加上数字,以保证唯一性。Security part仅仅针对使用LDAP做设置,其它方式需要自己写脚本进行配置。stuff Plug-in provider part部分如果您配置的环境中没有使用到stuff-plugin则可以注释掉。
在customer definition part部分,可以指定Cluster和Cluster成员的名字和JDBC provider的名字。
d. 执行脚本:
6.创建自定义的ND6环境工具包的订制
对于自定义的ND6环境,除了要修改上述的几个脚本来适应您的环境之外,还需要定制修改一下的几个脚本:
a. SetupND6_1.jacl。这个脚本主要完成了创建Cluster,和 SingleServer,并为之配置了SCA。您可以使用UE或其他文本编辑器打开此文件。搜索“Step”会得到以下结果:
从结果中可以看到,在此脚本中共有10步。每一步实现了一个功能。第一步是设置websphere 变量。等同于在管理控制台中的websphere变量设置。 第二步是在节点1上面创建仅有一个成员的Cluster:createClusterWithOneMember $CLUSTERA $NODE1 $SERVERA1。第三步是为Cluster的SIB创建数据源,使用如下方法创建一个provider: setupDSProvider $CLUSTERA $JDBCPROVIDER_CA,在此provider下面,为4个bus创建XA类型的数据源,使用方法:createDataSource。第四步,在创建完数据源之后,可以为Cluster配置SCA。使用这个方法:$AdminTask configSCAForCluster,方法的参数可以参考admintask的configSCAForCluster的帮助信息。使用$AdminTask configRecoveryForCluster来为Cluster配置failevent。最后一段用来创建一个Single Server,使用命令:crServer $NODE3 $SSERVER,既:在节点Node3上创建一个single server。
以上的每一块代码段都独立的执行一个功能。可以通过拷贝粘贴来创建一个新的BPC cluster和为之配置SCA与datasource。所有的函数比如:createClusterWithOneMember、setupDSProvider、createDataSource都是在\jacllib\JaclLib.jacl定义的。所以在此文件中要引入jacllib.jacl:source "$RES_LOC/jacllib/JaclLib.jacl"。
b. 配置SetupND6_2.jacl脚本。此脚本主要完成了以下任务:
1.为带有一个成员的Cluster配置HA Policy,在ND6中,要为每个ME配置。
2.为Cluster增加一个新成员,并同时配置此成员的HA policy。
3.启用全局安全性
4.配置Stuff Plug-in
5.添加虚拟主机
下面针对每个功能做具体说明:
第12步,使用语句set policyId [createOneOfNPolicy $meName DefaultCoreGroup] 在DefaultCoreGroup里创建one of N 类型的策略,并返回此policy的ID值给policyId。createMatchCriteria WSAF_SIB_MESSAGING_ENGINE $meName $policyId,createMatchCriteria type WSAF_SIB $policyId,用来在此Policy内创建Match Criteria。addPreferredServer $SERVERA1 $policyId,此语句在此Policy内创建preferred server。由于共有SCA.APPLICATION,SCA.SYSTEM,BPC三条Bus内的ME需要配置HA Policy,因此在此脚本中,会对每个Cluster的成员为三条bus内的ME配置Policy。
第13、14步,为Cluster增加另一个成员,同时为之配置Policy。使用growCluster方法来为Cluster增加一个成员。
第15步,用来启用LTPA_LDAP安全性,使用方法LTPA_LDAPSecurityOn。
从第16步到第19步,为配置stuff plug-in。关于stuff plug-in的配置,可以参考info center得到更多的信息。
在此脚本的最后,增添了4个虚拟主机。
c. ModifyDataStore.jacl脚本仅仅用来更改ME的data store的schema,使MEDB中的表的schema不重复。
至此,说明了如何构建支持自定义拓扑的工具定制方法。
以上各步骤使用的方法均定义在jacllib\JaclLib.jacl里。这些函数均可以单独使用来支持您自己的脚本。您可以基于此脚本构建自己的脚本工具。
5. 在服务器上运行您的脚本包
将整个脚本包拷贝到Dmgr所在的服务器上,更改整个包的属性为可执行。并保证执行用户具有配置WPS的权限。设安装包的路径为$RES_LOC。
a. 进入到$RES_LOC/jacls/sh目录
b. 运行脚本:#./ configINSAll.sh
注意:此脚本工具包仅支持Unix/Linux操作系统。如果在Windows平台上,可以使用“Sygwin”工具来运行脚本。
6. 工具包基础函数说明
工具包的函数库都在$RES_LOC/jacllib/JaclLib.jacl中。在此文件中针对各个方法都有详细的注释,本文章针对使用到的函数做功能和用法的说明。
1.
createClusterWithOneMember:创建仅具有一个成员的Cluster
用法:createClusterWithOneMember $CLUSTER $NODE $SERVER
$CLUSTER:为Cluster的名字
$NODE:为成员所在的节点名字
$SERVER:为成员的名字
2.
crServer:创建一个server
用法:crServer $NODE $SERVER
$NODE:server所在的节点名字
$SERVER:server的名字
3.
setupDSProvider:在Cluster级别下创建数据源的provider。
用法:setupDSProvider $CLUSTER $JDBCPROVIDER
$CLUSTER:目标集群名字。
$JDBCPROVIDER:JDBC的Provider名字。
4.
createDataSource:此函数为WAP中提供的函数。请参阅\wap\docs\WAP.html里的函数说明。
5.
setupDSProvider4Server:在Server级别下创建数据源的Provider。
用法:setupDSProvider4Server $NODE $SERVER $JDBCPROVIDER
$NODE:server所在的节点名字
$SERVER:server的名字
$JDBCPROVIDER:要创建的provider的名字。
6.
getFirstMEID:得到相应bus member的第一个message engine ID。
用法:getFirstMEID $BUSNAME $BUSMEMNAME $BUSMEMTYPE
$BUSNAME:bus的名字
$BUSMEMNAME:bus成员的名字
$BUSMEMTYPE:bus成员的类型(server 、cluster)
7.
getNamebyID: 根据WAS对象的ID得到此对象的名字。
用法:getNamebyID $OBJECTID
8.
createOneOfNPolicy:创建One of N类型的Policy。
用法:createOneOfNPolicy $POLICYNAME $GROUPNAME
$POLICYNAME:要创建的policy的名字
$GROUPNAME:要在哪个组下面创建policy。
9.
createMatchCriteria:在policy里面创建match criteria.
用法:createMatchCriteria $MCNAME $MCVALUE $POLICYID
$MCNAME:Match criteria的名字
$MCVALUE:Match Criteria的值
$POLICYID:此MC所在的Policy的ID。
10.
addPreferredServer:在policy里创建Preferred Server。
用法:addPreferredServer $SERVERNAME $POLICYID
$SERVERNAME:server的名字
$POLICYID:所在的policy的ID
11.
growCluster:为Cluster增加一个成员
用法:growCluster $CLUSTER $NODE $SERVER
$CLUSTER:目标cluster的名字。
$NODE:成员所在的节点名字
$SERVER:成员的名字。
12.
addMEToBM:创建Cluster型的SIB Engine。
用法:addMEToBM $BUSNAME $CLUSTERNAME $DATASOURCEJNDINAME
$BUSNAME:SIbus的名字。
$CLUSTERNAME:Cluster的名字
$DATASOURCEJNDINAME:ME的datastore的jndi 名字。
13.
LTPA_LDAPSecurityOn:此函数的脚本为WPS6022提供的工具,用来打开LTPA_LDAP Sercurity 全局安全性。
用法:LTPA_LDAPSecurityOn $LDAPtype $LDAPserver $LDAPuser $LDAPpwd $LDAPport $LDAPdomainHostname $LTPApwd $LDAPbaseDN
$LDAPtype:LDAP的类型,这里是IBM_DIRECTORY_SERVER
$LDAPserver:LDAP Server的主机名或者IP
$LDAPuser:LDAP的用户名
$LDAPpwd:LDAP的密码
$LDAPport:LDAP 服务的端口
$LDAPdomainHostname:如果在域内的话,域主机的名字
$LTPApwd:LTPA的密码
$LDAPbaseDN:LDAP的base domain name。
14.
createJAASAuthData:此方法为WAP中提供的,请参阅\wap\docs\WAP.html里的函数说明。用来创建一个JAASAuthData对象。
用法:createJAASAuthData -userId <userId>
-password <string>
<jaasauthdata_name or jaasauthdata_cfgid>
[-description <description>]
15.
configStaffPluginProviderCP:配置staff plugin provider的自定义属性。
用法:configStaffPluginProviderCP $NODE $ProviderName $PropertyName $PropertyValue
$NODE:节点的名字
$ProviderName:Provider的名字
$PropertyName:要修改的属性名字
$PropertyValue:要修改的属性的值。
16.
createStaffPluginConf:创建staff plug-in 的configaration。
用法:createStaffPluginConf $providerid $jndiname $cname $tfile $description
$providerid:provider的ID
$jndiname:plugin configration所用的JNDI 名字
$cname:configration的名字
$tfile:transformationFile的文件名
$description:描述信息
17.
configStaffPluginConfCP:配置staff plugin configration的自定义属性。
用法:configStaffPluginConfCP $nodeName $providerName $confName $targetPName $targetPValue
$nodeName:节点的名字
$providerName:provider的名字。
$confName:staff plugin configaration的名字
$targetPName:自定义属性的名字
$targetPValue:自定义属性的值
18.
AddHostAlias:增加一个新的主机别名。
用法:AddHostAlias $hostname $port
$hostname 主机名
$port 主机端口
19.介绍一些脚本中用到的几个比较关键的admin task命令。
$AdminTask configSCAForCluster:为Cluster配置SCA。
$AdminTask configRecoveryForCluster:为Cluster配置fail event。
$AdminTask configSCAForServer:为Server配置SCA。
$AdminTask configRecoveryForServer:为server配置 fail event。