先说一下硬件和操作系统环境:
机器:IBM的某型号刀片机, 4G 内存
操作系统:RED HAT LINUX 64bit企业版
业务数据库:Oracle 10g
WMB6.1,安装在WMQ6之上,使用DB2 9作为代理数据库
以上软件都是安装在同一台刀片机上
另外,WMBT6.1安装在我自己的windows机器上,用于开发MB程序,并远程部署到服务器上
按理说参考资料应该是放在最后面的,只是我的这些安装心得都是来自这些参考资料,为防止我的个人经验误导读者的安装过程,所以先列出以下资料。有空慢慢看的话,还是应该以这些官方资料为准
《messagebroker_Configuration_Administration_and_Security》
这本是权威了,除了对应的版本有些旧(WMB 6.0),整体内容还是很详细的,几乎所有平台上的MB安装、配置都有详细的介绍。只是内容多得让人看起来眼晕。
MB info center
内容和上面那本书差不多,比较精炼,但如果配置出了问题,未必能找到详细的解答
最后,强烈建议,如果是linux菜鸟(像我这种),赶紧补习一些linux的基本知识,比如环境变量怎么设置
其实安装过程还是比较简单的,先安装MQ,再安装MB。MQ比较麻烦一点,要用rpm,而MB则带有一个Eclipse的安装界面,和windows上和相似,跟着向导走就行了。安装好之后,会发现db2也随着MB一起装好了
默认安装路径(注意大小写):
MB:/opt/ibm/mqsi
DB2:/opt/ibm/db2
红皮书上已经有详细说明,我就偷个懒,copy并解释一下
1. Log on as root.
2. Create a database instance. Use the commands shown here for guidance for the different platforms.
a. On AIX:
/usr/lpp/db2_08_01/instance/db2icrt -u fence_userID username
b. On Linux, Solaris, or HP-UX:
/opt/IBM/db2/V8.1/instance/db2icrt -u fence_userID username
其实,fence_userID 和username我也不太清楚是什么,你可以参考红皮书,或者找个db2高手问问。反正我当时使用root创建是不行的,一定要选择其他帐号,比如你自己的用户名
3. Log on as username
4. Create a database (in this example called WBRKBKDB) using the following commands (on some platforms, an explicit path name is required). You must insert a space between the starting period and the tilde character in the first command shown here:
. ~/sqllib/db2profile
db2start
db2 create database WBRKBKDB
db2 connect to WBRKBKDB
db2 bind ~/sqllib/bnd/@db2cli.lst grant public CLIPKG 5
重点说明的是:. ~/sqllib/db2profile 这句命令,前面要有一个“.”和空格,否则没用。执行了这条命令后,如果你对db2命令不熟悉,可以直接敲入“db2cc”,启动db2的图形管理界面,在里面创建数据库,省去了敲命令的麻烦
最后一步,在某些平台上需要修改db2的DBHEAP属性,至少900,才能满足MB运行的需要,否则会造成性能低下。
由于在64位机器上跑MB,所以ODBC DSN是要32位还是64位是很头疼的问题,因为不同硬件平台、操作系统的组合都有不同的要求。比如,在windows上是肯定没有64bit支持的,而在某些操作系统(貌似是AIX),即使你全部用64bit的产品,也要配置32bit的ODBC。具体的可以参考红皮书,里面有详细的列表,在这里我只针对我使用的平台介绍配置过程,在此特别声明,未必适用于读者的环境
总体思路:linux的ODBC是通过一个配置文件来描述的,在该配置文件中写入相应的信息,然后在环境变量中设置 ODBCINI=“配置文件的绝对路径”
编辑ODBC配置文件
1. 从你的MB安装目录下的ODBC64/V5.2 ,拷贝一份样例配置文件:odbc64.ini,到某个目录(比如mqm用户的根目录)
2. 修改该文件。在这里我只保留DB2和ORACLE的DSN,其他的统统删了
3. 修改你的odbc64.ini的权限:
Ensure that the odbc64.ini file has file ownership of mqm:mqbrkrs and has the same permissions as the supplied sample file.
4. 修改ODBCINI环境变量指向你的odbc64.ini
5. 修改linux的库路径:LD_LIBRARY_PATH,指向db2和oracle的32位和64位odbc链接库的路径,比如我的配置如下:
LD_LIBRARY_PATH=$ORACLE_BASE/lib32:$DB2_BASE/lib32:$DB2_BASE/lib64:${LD_LIBRARY_PATH}
6. 如前所述,我对使用32还是64bit的DSN也是有点混乱,干脆就把下面两个环境变量也加上,以防万一:
# for MB 64bit execution group
MQSI_LIBPATH64=/opt/ibm/db2/V9.1/lib64:${MQSI_LILPATH64}
# 32bit database lib may be needed
MQSI_LILPATH32=/opt/ibm/db2/V9.1/lib32:${MQSI_LILPATH32}
7. 最后是修改odbc64.ini文件的内容,具体的看书吧,下面是我的例子:
[ODBC Data Sources]
BRK1_DB=IBM DB2 ODBC Driver
M 2M _OracleDB=DataDirect 5.2 64bit Oracle Wire Protocol
###########################################
###### Individual data source stanzas #####
###########################################
# DB2 stanza
[BRK1_DB]
DRIVER=libdb2Wrapper64.so
Description=DB2DB DB2 ODBC Database
Database=BRK1_DB
# Oracle stanza
[OracleDB]
Driver=/opt/ibm/mqsi/6.1/ODBC64/V5.2/lib/UKora22.so
Description=DataDirect 5.2 64bit Oracle Wire Protocol
HostName=192.168.0.110
PortNumber=1521
SID=orcl
CatalogOptions=0
EnableStaticCursorsForLongData=0
ApplicationUsingThreads=1
EnableDescribeParam=1
OptimizePrepare=1
WorkArounds=536870912
ProcedureRetResults=1
ColumnSizeAsCharacter=1
##########################################
###### Mandatory information stanza ######
##########################################
[ODBC]
Trace=0 # To turn on ODBC trace set = 1
TraceFile=/var/mqm/log/odbctrace64.out
TraceDll=/opt/ibm/mqsi/6.1/ODBC64/V5.2/lib/odbctrac.so
InstallDir=/opt/ibm/mqsi/6.1/ODBC64/V5.2
UseCursorLib=0
IANAAppCodePage=4
UNICODE=UTF-8
补充几点注意的地方:
1. DB2的driver是不用路径的,只写驱动名字即可
2. DB2的Database属性(即是数据库的名字),要和DSN的名字一样(即是方括号中的内容)
3. 没事不要打开trace,会很慢
准备工作
打开一个终端,运行命令之前,先输入:
. /opt/ibm/mqsi/6.1/bin/mqsiprofile
和前面的db2命令一样,开头要有“.”和“空格”
你可以把这句话加到linux用户根目录的“.bashrc”文件,那样每次打开终端都会自动执行这个脚本,以设置一些环境变量,否则你是无法使用MB命令的。
确保MQ和DB2都在运行
可以通过dspmq查看MQ组件的运行状态,如果队列管理器没有启动,则通过strmqm命令启动之。
按照前面介绍的方法,利用db2cc图形界面查看数据库是否运行,否则启动之;也可以用db2start命令,记得要切换用户到你创建db2时使用的帐号,比如:
su db2usr –c “db2start”
创建配置管理器
mqsicreateconfigmgr ConfigMgr -i root -a xxxxx -q QM
创建代理
mqsicreatebroker BRK1 -i root -a xxxxx -q QM -n BRK1_DB -u db2usr -p xxxxx
创建代理时,要指定代理数据库的DSN名称,同时指定连接ODBC的数据库用户名密码
如果一切ok,创建好代理后,在db2数据库中会看到多了很多表,那基本上就没问题了
如果出问题,通常都是数据库连接,对照红皮书检查你的ODBC配置(这个过程很痛苦),以及访问数据库的用户名、是否拥有足够权限。实在不行,找IBM的支持吧…..
以上是连接代理数据库,如果要连接用户的oracle数据库,请参考我之前写的第六篇笔记,利用这条命令:
mqsisetdbparms brokerName -n dataSourceName [-u dataSourceUserId] -p dataSourcePassword
最后用mqsistart启动一下,一切ok的话,就算完成万里长征第一步了。
单纯安装好MB还是不够的,你还要用WMBT开发、部署和调试消息流,有谁喜欢坐在风扇轰鸣、充满辐射的机房里coding呢?所以接下来讲述如何配置WMB和WMBT,使得开发者可以远程连接MB并进行调试
在此之前,可以参考这篇文章,实现远程管理你的MQ
http://blog.csdn.net/Justin4wd/archive/ 2008/07/16 /2661131.aspx
首先在MQ中建立监听器和服务器连接通道,具体请参考我的第三篇笔记
http://blog.csdn.net/wangchengsi/archive/2008/07/08/2625598.aspx
如果MB和WMBT是在同一台机器,这样做已经足够了,但如果是远程连接,直接连接会报告以下错误,则还需要在MB那里配置ACL(访问权限列表)
从上图可以获得你的机器名和用户名
在linux打开一个终端,输入以下命令
mqsicreateaclentry 配置管理器 -u 用户名 -m 机器名 -x F –p
-x F表示访问程度,F表示完全访问
-p表示访问Proxy,即ConfigManagerProxy,相当于可以访问所有资源,比如代理
再次从toolkit连接MB,就可以了
之后,开发、部署、调试的过程都和本地的机器一样,读者可以看我之前写的关于调试功能的配置
注意,6.0以前的MB需要安装RAC(Rational Agent Controller)才能远程调试,6.1开始已经不用了