![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 系统管理 > SCO > 正文 |
 |
| MQSeries for SCO Unix V1.4 系统维护指南 |
| 本文出自: www.ibm.com.cn (2001-05-28 18:08:00) |
MQSeries for SCO Unix V1.4 是一个版本较旧的MQ产品,管理维护与当前开放平台上的V5 系列MQ产品差别较大。本文着重介绍管理维护该产品中与平台相关的特殊之处,其余与平台无关的MQ基本概念与维护方法请参阅相关文档。
SCO Unix 的custom 命令安装 MQSeries for SCO Unix 完成后,先修改/etc/services文件 ,插入三行服务定义,为启动MCAMD进程作准备。
mqmcamd 3000/tcp #MQSeries mcamd
mqoper 3001/tcp #MQSeries oper
mqmca 3002/tcp #MQSeries mca
MCAMD(消息通道代理守护进程)是MQSeries for SCO Unix V1.4 系统的核心进程,管理通道定义数据。消息通道代理(MCA)和MQ管理程序MQM从MCAMD处获取通道定义。定义MQ队列管理器中各种部件和启动MCA通讯前,要先启动MCAMD 进程。启动MCAMD进程的命令语法如下:
mcamd [-u user_id] [-g group_id] &
通常系统管理员为MQSeries创建一个专用的用户和组,以指定的用户和组启动MCAMD及其他与MQ相关的进程,可以保证MQ的数据不被其他用户意外破坏。启动MCAMD进程时,会出现一个常见错误,日志中的错误信息如下:
MCAMDOpenConn: Attempt to perform connect to MCAMD named pipe failed error = 111
soc_conn: Error executing socket connect, error = 115
MCAmain: Message Channel Agent Starting, PID = 26544
soc_conn: Error getting host name entry (gethostbyname) SCO_SV
mca_init_mcamd_conn: Attempt to perform connect to MCAMD named pipe failed, error = 115
MCAmain: Unable to connect to the MCAMD process
MCAmain: Message Channel Agent Starting, PID = 26901
parse_command: mca -c ChannelName -f ChannelNameListFile -m QueueMgrName
错误原因是不能由主机名 SCO_SV 查找到相应的IP 地址,应先用这条命令检查主机名:
uname -a
然后把主机名加入/etc/hosts 文件中,如:
169.100.13.22 hosts1 SCO_SV
启动MCAMD进程后,用mqm命令启动MQ管理界面,第一次启动MQ管理界面后显示队列管理器定义界面生成队列管理器,每台机器上只能定义一个队列管理器。MQ系统运行的错误日志记录在/var/mqi/log目录下,文件名mqi??.log ,??代表产生错误的日期。配置成功后,可以在/etc/inittab或/etc/conf/cf.d/init.base文件中加入一行,使系统每次重新启动时都启动MCAMD进程。
mcad:2:respawn:usr/mqi/bin/mcamd -u user_id -g group_id > /dev/console 2>&1
生成队列管理器后,通常先定义本地队列,再定义通道和远程队列。定义本地队列时要指定一个文件名,该文件将用于存放进入队列中的消息数据,文件所在目录由队列管理器的属性决定,默认值时/var/mqi 。配置生产系统前,先估计最大消息数据量,然后划分一个足够大的文件系统存放队列数据文件,并确保MCA进程对队列数据文件有足够的读写权限,否则MCA进程将无法发送或接收消息。同时要保证MQM进程对该文件系统有足够的读写权限,否则无法在MQM管理界面中定义新的队列或删除队列。
生成队列管理器后,可以用MQM管理界面做系统管理的大部分工作,只有启动通道程序必须在管理界面外单独执行,每个通道程序(即每一个活动的通道)都占用一个端口,在/etc/services文件中指定服务名与端口号的对应关系,在mqm 管理界面中定义通道时必须使用已定义的服务名。MQ for SCO Unix V1.4 与高版本的MQ 不同,没有默认端口号,与高版本的MQ 连接时要注意。下面是/etc/services 文件中关于MQ 所用的端口号定义片段:
mqmcamd 3000/tcp #MQSeries mcamd
mqoper 3001/tcp #MQSeries oper
mqmca 3002/tcp #MQSeries mca
ch1 3003/tcp #Sender Channel
ch2 3004/tcp #Receiver Channel
MQSeries 1414/tcp #MQSeries mca
其中前三项是支持SCO Unix 上的MQ运行所必须的,第四项指远端MQ使用的网络端口号。如果在一台机器上定义多个通道,要注意端口的使用规则:一个端口可以用于多个发送通道(SENDER)或多个请求通道(REQUESTER),但只能用于一个接收通道( RECEIVER )或一个服务器通道(SERVER),而且接收通道和服务器通道使用的端口号不能重复,也不能与发送通道和请求通道使用的端口号重复。
管理MQ的定义时尽量注意以下几点,可以避免不必要的混乱:
1 检查通道的定义在发送方和接收方是否一致,MQ V1 与MQ V2 及更高版本的MQ 的通道参数名和默认值不完全一样。
消息序列号复位值 ( Sequence Wrap Value) 指通道的消息序列号增加到一定值后复位为1 ,在MQ for SCO 中的默认值是999999,而在高版本的MQ 中的默认值是999999999。
通道的批处理量(Batch Size) 指通道程序在一个传输事务中传送的消息数,高版本MQ的参数名是BATCHSZ,MQ for SCO中的参数名是checkpoint count。定义通道时最好把这两个参数对应置成相同的值。
MQ 上的通道定义中MCA HOSTNAME 要设成主机名,不要设成IP 地址。远程机器的主机名和IP地址要在/etc/hosts文件中加入定义。
2 MQ for SCO 队列管理器的字符集编码(CCSID) 默认值为0 ,与其他平台通讯时注意根据对方字符集编码设置相应的CCSID 。 如AIX 上的队列管理器使用字符集819 ,SCO 上的队列管理器也应使用字符集819 ,或其他与819 属于同一语言集(即英语)的字符集,如437等。不同语言集的字符集是不能互相转换的,使用属于不同语言集的字符集的队列管理器也不能启动通道互相交换数据。
3 所有部件的名字最好都用大写,避免发生名字不匹配的错误。在高版本MQ的MQSC 命令界面中小写的名字要用单引号括起,否则命令处理程序不能正确识别;如果与主机通讯,主机通常都只支持大写的名字。
最后要注意不要使用太长的名字。
通道代理程序MCA启动命令如下:
mca -m queue_manager [-f filename] [-c channel_name] [-c channel_name...] &
一个MCA进程可以支持多个通道,在指定的文件中分行列出所有通道或在启动命令中分别列出所有通道都可以启动通道。通道启动后,由于通讯线路故障和系统故障等原因,可能出现发送、接收双方通道的消息序列号不一致,在错误日志出现类似下面的错误信息:
18-May-00 11:19:57.800 mca_ack_rcvd: Error flag in ACK set, flags = 2
18-May-00 11:19:57.800 mca_log_nak: QMA.TO.QMB Out of Sequence. Sent MSN 74 when remote expecting MSN 1
这时只需在MQM管理界面中复位消息序列号,通道就能继续运行。
MQ产品安装完成后,提供三个例子应用程序及其源代码:
zmqecho 从一个队列中读取消息然后放入另一个队列
zmqwrite 写消息到指定队列中
zmqread 从指定队列中读取消息
例子程序的可执行代码在/usr/mqi/bin目录下,源代码及生成可执行程序的make文件放在/usr/mqi/src目录下。MQI接口的头文件是cmqc.h ,放在/usr/mqi/include 目录下。生成可执行程序时要连接MQSeries 产品提供的库文件/usr/mqi/lib/libmqi.a (链接到/usr/lib/libmqi.a)。
(http://www.fanqiang.com)
进入【UNIX论坛】
|
|
| 相关文章 |
|
===更多相关=== |
|
|
 |
★ 樊强制作 欢迎分享 ★ |