供稿人:于东凯
摘要:TXSeries CICS 在企业核心在线交易处理系统(OLTP)中的应用非常广泛。随着OLTP系统的复杂度以及业务量的增长,越来越多的客户期望一种负载均衡的解决方案。本文介绍TXSeries的负载均衡的模块,帮助客户实现OLTP系统的负载均衡。本文以单机WLM实施为例详细介绍了一个WLM方案的实施步骤。
介绍
TXSeries WLM模块用于实现将下列两种任务请求均衡的分发到多个CICS Region中:
1、 分布式程序连接(DPL)
例如:ECI 调用,EXEC CICS LINK,EXEC CICS XTCL
2、 分布式交易路由(DTR)
例如:EPI调用,EXEC CICS START
TXSeries WLM解决方案中包含一个或多个客户端Region(COR),和多个应用Region(AOR)。COR负责接受客户端请求并作负载均衡计算;AOR运行实际的CICS任务。WLM分发算法有:Round robin,最短队列,负载计算,分区等等。
WLM功能由WAP,WCM,HMON,WCL等几个模块完成,用户可以通过RMON对WLM进行监控。有关这些概念请参看上期的《使用TXSeries 实现负载均衡管理》一文,或CICS手册"Using CICS Workload Management"。
环境介绍
软件配置
Following describes the software environment used:
IBM AIX 5.3 ML4
IBM TXSeries CICS 6.1
IBM CICS Transaction Gateway 6.0.2
IBM VAC 7.0
配置步骤
下面详细介绍一下CICS WLM的配置步骤。
1、 检查用户,确保cics、cicssm、root用户都在cicssm组。
2、 编辑/etc/services文件,添加端口定义:
alextcp0000 19300/tcp
alextcp0001 19301/tcp
alextcp0002 19302/tcp
3、 用户可以使用CICS WLM模块提供的/usr/lpp/cicssm/samples/Makefile4.config生成配置文件:
使用该文件的命令格式为:
make config-all COR=<reg_name> IP=<ip> SERVICE=<service> NUM=<num-of-aors>
其中COR为CICS 负载均衡模块的入口;IP为本机CICS Region的侦听IP地址;SERVICE为的CICS Region的侦听端口名的前缀(如果使用Makefile4.config创建脚本以及配置文件的话,则前面定义端口的时候必须使用相同前缀),NUM为实现负载均衡的CICS Region个数。具体命令如下:
make -f Makefile4.config config-all COR=CICSA IP=127.0.0.1 SERVICE=alextcp NUM=2 > cmd.2
该命令会生成两个文件:
a. wlm.cfg.auto.gen为负载均衡配置文件。将其复制到/var/cicssm/repos 目录下,改 名为wlm.cfg,并将该文件的权限改为-rw-r--r-- 1 cicssm cicssm;
b. cmd.2文件为一个脚本文件,用户可以使用该脚本来生成CICS Region,包括所创 建的CICS Region的侦听以及通信定义配置。用户需要为该文件添加执行权限。
注意1:cmd.2脚本中配置程序路径的时候使用的是Solaris操作系统中的路径,如/opt/ibm/cicssm/bin/bhgdpl,在AIX系统中,用户需要手工将其修改为AIX中的路径,即/usr/lpp/cicssm/bin/bhgdpl
注意2:cmd.2脚本中会定义三个CICS Region:CICSA、CICS0001和CICS0002,并为CICSA添加向CICS0001和CICS0002的CD定义,但不会向CICS0001和CICS0002 Region中添加返回的CD。但在生成的wlm.cfg.auto.gen文件中配置了返回连接,所以如果想维持wlm.cfg.auto.gen文件中的配置的话,这些命令需要自己手动添加如下:
cicsadd -c cd -r CICS0001 -P CICA ConnectionType=cics_tcp RemoteLUName=CICSA ListenerName=LD01 RemoteTCPAddress=127.0.0.1 RemoteTCPPort=19300
cicsadd -c cd -r CICS0002 -P CICA ConnectionType=cics_tcp RemoteLUName=CICSA ListenerName=LD01 RemoteTCPAddress=127.0.0.1 RemoteTCPPort=19300
4、 运行cmd.2 生成cics region,并向CICSA Region的environment 文件中添加如下环境变量:
LIBPATH=/usr/lpp/cics/lib:/usr/lpp/cicssm/lib
BHG_WCL_APPLICATION="CALLED"
BHG_ROOT=/usr/lpp/cicssm
BHG_VAR=/var/cicssm
BHG_HMON_HOSTNAME=p650_10
BHG_WCM_HOSTNAME=p650_10
BHG_HOST=p650_10
BHG_WCM_WAP_NAME="p650_10 9123"
BHG_WCL_grp1_CICSPLEX_NAME=cpx1
注意:p650_10为本测试使用的计算机名,9123为CICS WLM的缺省配置端口,cpx1为本测试中使用的CICSPLEX名,CALLED为本例使用的需要进行负载均衡的程序定义。
5、 到/usr/lpp/cicssm/samples目录编译mainctrl.ccs和called.ccs程序
cicstcl -lC mainctrl.ccs
cicstcl -lC called.ccs
cc -DCICS_AIX -I/opt/IBM/cicstg/include -L/opt/IBM/cicstg/lib -lcclaix -ocicsuvc cicsuvc.c
6、 修改/var/cicssm/repos/cicssm.config,去掉下面这一行前面的'#',并将主机名改为p650_10
wap wap1 p650_10 9123
7、 将/var/cicssm目录下的所有目录的数组、权限设为drwxr-xr-x 2 cicssm cicssm
8、 登录到cicssm用户:su - cicssm
9、 编辑.profile,添加如下命令:
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:
$HOME/bin:/usr/bin/X11:/sbin:.:/usr/lpp/cicssm/bin
export PATH
export BHG_HMON_HOSTNAME=`hostname`
export BHG_WCM_HOSTNAME=`hostname`
export LIBPATH=$LIBPATH:/usr/lpp/cics/lib:/usr/lpp/cicssm/lib
export NLSPATH=/usr/lpp/cicssm/msg/en_US/%L:$ NLSPATH
export BHG_ROOT=/usr/lpp/cicssm
export BHG_VAR=/var/cicssm
export CICS_HOSTS=p650_10
注意:如果CICS_HOSTS环境变量已经在/etc/environment文件中定义,则此处无需再次定义。CICS_HOSTS变量必须设置,否则在下面的命令会报:
09/07/06 05:15:42 bh_message: Unable to retrieve message: BHG8590 from catalog cicssm.cat
10、 编辑/usr/lpp/cicssm/bin/setwlmenv.sh,取消下列命令前的注释符,注意修改其中的主机名:
export BHG_ROOT=/usr/lpp/cicssm
export BHG_VAR=/var/cicssm
export BHG_WAP_WAP_NAME="p650_10 9123"
export BHG_WAP_MESSAGE_CATALOGUE=cicssm.cat
export BHG_WCM_WAP_NAME=" p650_10 9123"
export BHG_WCM_HOST_NAME= p650_10
export BHG_HMON_WAP_NAME=" p650_10 9123"
export CICS_HOSTS=" p650_10"
export BHG_WCL_GROUP_NAME=grp1
export BHG_WCL_grp1_CICSPLEX_NAME=cpx1
11、 至此,CICS WLM基本配置完成了,用户可以在root用户下启动CICS Region:
cicscp -v start region CICSA StartType=cold
cicscp -v start region CICS0001 StartType=cold
cicscp -v start region CICS0002 StartType=cold
12、 登录到cicssm用户,运行. /usr/lpp/cicssm/bin/setwlmenv.sh
13、 依次运行下面的命令启动WLM
cicswlm configure wlm
cicswlm start wap wap1
cicswlm start wcm wap1
cicswlm verify /var/cicssm/repos/wlm.cfg
cicswlm load wlm.cfg wap1
cicswlm start hmon wap1
此时运行cicswlm list 可以看到如下输出:
$ cicswlm list
12/05/06 15:47:47 BHG8501I list action requested.
12/05/06 15:47:47 BHG5066I Active processes:
Process id Type Name
AIX
225110 wap wap1
AIX
218336 wcm wap1
AIX
96484 hmon wap1
12/05/06 15:47:48 BHG8512I cicswlm has completed successfully.
这意味着WAP,WCM,和HMON都已经启动。
14、此时可以启动RMON。启动WRM需要有一个X-Terminal运行。用户有以下几种方案:
a. 在WAP所在系统的控制台上:在cicssm用户下运行
. /usr/lpp/cicssm/bin/setwlmenv.sh
cicswlm start rmon
b. 并在本地运行一个X-Terminal软件远程登录到WAP所在机器,在cicssm用户下运行:
export DISPLAY=<ip>:0.0
. /usr/lpp/cicssm/bin/setwlmenv.sh
cicswlm start rmon
其中<ip>为运行X-Terminal软件的系统的IP地址。
c. 没有X-Terminal,则通过telnet登录到WAP所在系统上,在cicssm用户下运行:
. /usr/lpp/cicssm/bin/setwlmenv.sh
. /usr/lpp/cicssm/bin/bhg_setenv.sh
/usr/lpp/cicssm/bin/bhgwmon
15、 RMON启动后的界面如下:
[09:35:37]
CICS SM Workload Management Cache Monitor
=========================================
Press enter on the PLEX to be monitored
cpx1
Dwell = 0.100
F1=HELP F2=Rfrsh F3=Ret F4=Next F5=Prev F7=Fwd F8=Back F10=D/2 F11=D*2
注意:上图中的cpx1可能没有出现,这是因为WLM一次都没有使用过。只要WLM进行一次负载均衡路由操作,cpx1就能够显示出来。
16、 在cpx1上输入ENTER键,RMON显示如下输出:
[09:34:12]
CICS System Clones Cached Scores CPX cpx1
================================ ==============
NAME SCORE H SESSIONS ST AVERAGE LT AVERAGE
--------- ---------- - ---------- ---------- ----------
CICSA 0.000 1 0.000 0.000 0.000
CICS0001 0.000 1 0.000 1.000 1.000
CICS0002 0.000 1 0.000 3.080 3.080
Dwell = 0.100
F1=HELP F2=Rfrsh F3=Ret F4=Next F5=Prev F7=Fwd F8=Back F10=D/2 F11=D*2
RMON的输出会定期刷新。
17、 此时从客户端运行ECI调用:
[p650_10:/usr/lpp/cicssm/samples]cd /usr/lpp/cicssm/samples
[p650_10:/usr/lpp/cicssm/samples]cicsuvc CICSA CALLED
ECI Sample Program
------------------
Using Server: [CICSA], Program: [CALLED]
ECI_SYNC test
ECI_SYNC returned: ECI_NO_ERROR
CommArea Returned: CALLED Ran in C002
ECI_SYNC test complete
[p650_10:/usr/lpp/cicssm/samples]cicsuvc CICSA CALLED
ECI Sample Program
------------------
Using Server: [CICSA], Program: [CALLED]
ECI_SYNC test
ECI_SYNC returned: ECI_NO_ERROR
CommArea Returned: CALLED Ran in C001
ECI_SYNC test complete
注意:用户可能看到连续几次返回的都是C002或C001,这是因为测试的时候CICS Region中没有其它任务,受理这个ECI请求的cicsas进程每次都相同。在这种情况下COR每次都会将请求路由到相同的AOR上。
以上介绍的TXSeries WLM配置步骤使用了TXSeries 提供的脚本生成工具。如果用户不想使用这个配置工具或想将WLM配置在不同的系统上,可以自己编写配置文件以及配置CICS Region 的脚本。
参考文献
"Using CICS Workload Management"
《使用TXSeries实现负载均衡管理》