内容


使用自动客户端重连接为 UNIX 系统上的 WebSphere MQ 创建一个多实例队列管理器

Comments
免费下载:IBM® WebSphere® MQ V7.0.1 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

IBM® WebSphere® MQ V7 可以在无需专门技能或额外硬件的情况下帮助您提高信息的可用性。 在发生计划外停机或计划内停机的控制切换(比如应用软件维护) 时,它通过多示例队列管理器来提供自动故障转移。

有了这个新的可用性选项,多实例队列管理器的信息和数据通过网络文件系统协议(NFS),比如 NFS V4, 存储在网络存储设备上。之后您可以在不同机器上定义并启动此队列管理器的多个实例,包括一个活动实例和一个备用实例。 激活的队列管理器实例可以处理信息并接受来自应用程序和其他队列管理器的连接。它可以锁定队列管理器数据,确保 队列管理器中只有一个活动实例。备用队列管理器实例定期查看活动实例是否正在运行。 如果活动队列管理器实例发生故障或不再是连接的,备用实例在它释放后需尽快将队列管理器中的数据锁定,执行队列管理器重启处理,使其成为活动的队列管理器实例。

这是多实例队列管理器和客户端自动重连接的说明:

图 1.1
Figure 1.1
Figure 1.1
图 1.2
Figure 1.2
Figure 1.2
图 1.3
Figure 1.3
Figure 1.3

先决条件

  • 根据信息中心的指南和说明,在服务器和客户端机器上安装 Websphere MQ V7.0.1。
  • 这两台机器上应有属于 mqm 组的 mqm 和 mqtest 用户。
  • 两台机器上 mqm 和 mqtest 的用户 id 和组 id 应该是相同的。
  • 机器 1:
    • id mqm: uid=301(mqm), gid=301(mqm)
    • id mqtest: uid=501(mqtest), gid=301(mqm)
  • 机器 2:
    • id mqm: uid=301(mqm), gid=301(mqm)
    • id mqtest: uid=501(mqtest), gid=301(mqm)

在 HP-UX 上安装 NFS

本例中,NFS 服务器为:hpate1,导出路径为:/HA,NFS 客户端为:hostile.

HP-UX上的 NFS 服务器配置

  1. 以 root 身份登录服务器并进行配置。
  2. 编辑文件 /etc/rc.config.d/nfsconf,将 NFS_SERVERSTART_MOUNTD 的值改为 1:
    #more /etc/rc.config.d/nfsconf
    NFS_SERVER=1
    START_MOUNTD=1
  3. 启动 nfs.server 脚本:
    /sbin/init.d/nfs.server start
  4. 编辑 /etc/exports 为每一个将要导出的目录添加一个条目:
    # more /etc/exports
    /HA
    #
  5. 强迫 NFS daemon nfsd 重读 /etc/exports :
    #/usr/sbin/exportfs -a
  6. 使用 showmount -e 验证 NFS 的安装:
    # showmount -e
    export list for hpate1:
    HA (everyone)
    #

HP-UX 上的 NFS 客户端设置

  1. 以 root 身份登录。
  2. 检查 NFS 客户机上您将要导入的目录是否为空或不存在。
  3. 如果目录不存在,创建一个目录:
    #mkdir /HA
  4. 添加一个条目 /etc/fstab 这样文件系统将会在启动时自动安装:
    nfs_server:/nfs_server_dir /client_dir  nfs defaults 0 0
    # more /etc/fstab
    hpate1:/ha /ha NFS DEFAULTS 0 0
  5. 安装远程文件系统:
    #/usr/sbin/mount -a
  6. 验证 NFS 安装:
    # mount -v
    hpate1:/HA on /HA type nfs rsize=32768,wsize=32768,NFSv4,dev=4000004 
        on Tue Aug  3 14:15:18 2010
    #

在 AIX 上安装 NFS

本例中,NFS 服务器为:axion,导出路径为:/HA,NFS 客户端为:hurlqc.

AIX 上的 NFS 服务器配置

  1. 以 root 身份登录。
  2. 在命令行上输入 smitty mknfsexp,并指定要导出的目录:
    #smitty mknfsexp
    
    Pathname of directory to export                   [/HA]
    Anonymous UID                                     [-2]
    Public filesystem?                                no
    * Export directory now, system restart, or both?  Both
    Pathname of alternate exports file                []
    Allow access by NFS versions                      []
    External name of directory (NFS V4 access only)   []
    Referral locations (NFS V4 access only)           []
    Replica locations                                 []
    Ensure primary hostname in replica list           Yes
    Allow delegations?                                No
    Scatter                                           None
    * Security method 1                               [sys,krb5p,krb5i,krb5,dh]
    * Mode to export directory                        Read-write
    Hostname list. If exported read-mostly            []
    Hosts and netgroups allowed client access         []
    Hosts allowed root access                         []
    Security method 2                                 []
    Mode to export directory                          []

    没有问题的话,您应该能看到一个 “OK”。

  3. 验证服务器安装:
    # showmount -e
    export list for axion:
    /HA (everyone)
    #

AIX 上的 NFS 客户端配置

  1. 以 root 身份登录。
  2. 检查 NFS 客户机上您要导入的目录是否为空或不存在。
  3. 如果目录不存在,创建一个目录:#mkdir /HA
    smitty mknfsmnt
    
    Type or select values in entry fields.
    Press Enter AFTER making all desired changes.
    [TOP]                                                [Entry Fields]
    * Pathname of mount point                            [/HA]
    * Pathname of remote directory                       [/HA]
    * Host where remote directory resides                [axion]
      Mount type name                                    []
    * Security method                                    [sys]
    * Mount now, add entry to /etc/filesystems or both?  Both
    * /etc/filesystems entry will mount the directory    Yes
         on system restart.
    * Mode for this NFS file system                      Read-write
    * Attempt mount in foreground or background          Background
    * Number of times to attempt mount                   []
    * Buffer size for read                               []
    * Buffer size for writes                             []
    [MORE...26]
    
    F1=Help         F2=Refresh        F3=Cancel          F4=List
    F5=Reset        F6=Command        F7=Edit            F8=Image
    F9=Shell        F10=Exit          Enter=Do

    如果收到消息 “OK”,表示它正常运行。您应该能看到并连接上安装的 NFS。

在 Solaris 上安装 NFS。

本例中, NFS 服务器为:stallion.in.ibm.com,导出路径为:/HA,NFS 客户端为:saigon.in.ibm.com

Solaris 上的 NFS 服务器配置

  1. 以 root 身份登录。
  2. 检查 NFS 客户机上您要输入的目录是否为空或不存在。
  3. 如果目录不存在创建一个目录并更改相应的权限:
    #mkdir /HA
    #chmod 777 HA
  4. 编辑 /etc/dfs/dfstab 来添加一个入口用于和 NFS 客户端分享 HA 目录。
    # more /etc/dfs/dfstab
    share -F nfs -o rw /HA
  5. 启动 NFS 服务器:
    #/etc/init.d/nfs.server start
  6. 使用 showmount 命令验证安装:
    #showmount -e
    export list for stallion:
    /HA (everyone)
    #

Solaris 上的 NFS 客户端配置

  1. 以 root 身份登录客户机。
  2. 创建一个目录并授予适当权限:
    #mkdir /HA
    #chmod 777 HA
  3. 输入:
    mount -f nfs stallion.in.ibm.com:/ /HA
  4. 使用 mount -v 命令验证安装:
    #mount -v
    stallion.in.ibm.com:/HA on /HA type nfs remote/read/write/setuid/devices/xattr/dev=
        5280002 on Mon Aug 23 15:00:50  2010
    #

执行 amqmfsck 以验证文件系统与 POSIX 的标准是否保持一致

本例中: Server1 = stallion.in.ibm.com 和 Server2 = saigon.in.ibm.com

  1. 执行不带任何选项的 amqmfsck 来检查基本锁定情况:
    su - mqtest
    export PATH=/opt/mqm/bin:$PATH
    
    On Server1:
    $ amqmfsck /HA/mqdata
    The tests on the directory completed successfully.
    
    On Server2:
    $ amqmfsck /HA/mqdata
    The tests on the directory completed successfully.
  2. 执行带有 -c 选项的 amqmfsck 来测试写入目录:
    On Server1:
    $ amqmfsck -c /HA/mqdata
    Start a second copy of this program with the same parameters on another server. 
    Writing to test file. 
    This will normally complete within about 60 seconds.
    .................
    The tests on the directory completed successfully.
    
    On Server2:
    
    $ amqmfsck -c /HA/mqdata
    Start a second copy of this program with the same parameters on another server.
    Writing to test file. 
    This will normally complete within about 60 seconds.
    .................
    The tests on the directory completed successfully.
  3. 在两台机器上同步执行带有 -w 选项的 amqmfschk,检测等待同时释放对目录的锁定:
    On Server1:
    $ $ amqmfsck -wv /HA/mqdata
    System call: stat("/HA/mqdata",&statbuf)
    System call: statvfs("/HA/mqdata")
    System call: fd = open("/HA/mqdata/amqmfsck.lkw",O_CREAT|O_RDWR,0666)
    System call: fchmod(fd,0666)
    System call: fstat(fd,&statbuf)
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Start a second copy of this program with the same parameters on another server.
    File lock acquired.
    Press Enter or terminate this process to release the lock.
    
    On Server2:
    
    $ amqmfsck -wv /HA/mqdata
    System call: stat("/HA/mqdata",&statbuf)
    System call: statvfs("/HA/mqdata")
    System call: fd = open("/HA/mqdata/amqmfsck.lkw",O_CREAT|O_RDWR,0666)
    System call: fchmod(fd,0666)
    System call: fstat(fd,&statbuf)
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    Waiting for the file lock.
    System call: fcntl(fd,F_SETLK,F_WRLCK)
    File lock acquired.
    Press Enter or terminate this process to release the lock.
    
    System call: close(fd)
    File lock released.
    
    The tests on the directory completed successfully.

安装一个多实例队列管理器

本例中,Server1 = stallion.in.ibm.com 和 Server2 = saigon.in.ibm.com.

Server 1

  1. 在共享文件系统中创建日志和 qmgrs 目录:
    # mkdir logs
    # mkdir qmgrs
    # chown -R mqm:mqm /HA
    # chmod -R ug+rwx /HA
  2. 创建队列管理器:
    # crtmqm -ld /HA/logs -md /HA/qmgrs -q QM1
    WebSphere MQ queue manager created.
    Directory '/HA/qmgrs/QM1' created.
    Creating or replacing default objects for QM1.
    Default objects statistics : 65 created. 0 replaced. 0 failed.
    Completing setup.
    Setup completed.
    #
  3. 从 Server1 中复制队列管理器配置细节:
    #  dspmqinf -o command QM1
  4. 将上述命令复制到 Notepad。输出格式如下:
    addmqinf -s QueueManager -v Name=QM1 -v Directory=QM1 -v Prefix=/var/mqm -v  
        DataPath=/HA/qmgrs/QM1

Server 2

  1. 粘帖步骤 4 保存在 Notepad 中的输出命令:
    # addmqinf -s QueueManager -v Name=QM1 -v Directory=QM1 -v Prefix=/var
    /mqm -v DataPath=/HA/qmgrs/QM1
    WebSphere MQ configuration information added.
    #
  2. 启动 Server 1 中队列管理器的活动实例:
    # strmqm -x QM1
    WebSphere MQ queue manager 'QM1' starting.
    5 log records accessed on queue manager 'QM1' during the log replay phase.
    Log replay for queue manager 'QM1' complete.
    Transaction manager state recovered for queue manager 'QM1'.
    WebSphere MQ queue manager 'QM1' started.
    #
  3. 启动 Server 2 中队列管理器的备用实例:
    # strmqm -x QM1
    WebSphere MQ queue manager QM1 starting.
    A standby instance of queue manager QM1 has been started. 
    The active instance is running elsewhere.
    #
  4. 使用 dspmq -x 验证安装:
    On Server1 (stallion)
    # dspmq -x
    QMNAME(QM1) STATUS(Running)
        INSTANCE(stallion) MODE(Active)
        INSTANCE(saigon) MODE(Standby)
    #
    
    On Server2 (saigon)
    # dspmq -x
    QMNAME(QM1) STATUS(Running as standby)
        INSTANCE(stallion) MODE(Active)
        INSTANCE(saigon) MODE(Standby)
    #

创建一个客户端自动重连接安装

本例中,Server1 = lins.in.ibm.com 和 Server2 = gtstress42.in.ibm.com。在 Server 1:

  1. 使用 defpsist(yes) 创建一个名为 Q 的本地队列。
  2. 创建一个名为 CHL 的 svrconn 通道。
  3. 启动一个运行在 9898 端口的监听器:
    [root@lins ~]# runmqsc QM1
    5724-H72 
    (C) Copyright IBM Corp. 1994, 2009.  ALL RIGHTS RESERVED.
    Starting MQSC for queue manager QM1.
    
    def ql(Q) defpsist(yes)
        1 : def ql(Q) defpsist(yes)
    AMQ8006: WebSphere MQ queue created.
    define channel(CHL) chltype(SVRCONN) trptype(tcp) MCAUSER('mqm') replace
        2 : define channel(CHL) chltype(SVRCONN) trptype(tcp) MCAUSER('mqm') replace
    AMQ8014: WebSphere MQ channel created.
    end
    
    [root@lins ~]# runmqlsr -m SAMP -t tcp -p 9898 &
    [1] 26866
    [root@lins ~]# 5724-H72 
    (C) Copyright IBM Corp. 1994, 2009.  ALL RIGHTS RESERVED.
  4. 在 Server 1 上把 MQSERVER 设置为变量:
    Export MQSERVER=<channelname>/tcp/<server1(port), server2(port)>
    
    For example: export MQSERVER=CHL/TCP/'9.122.163.105(9898),9.122.163.77(9898)'
  5. 在 Server 2 上,启动端口 9898上的一个监听器:
    [root@gtstress42 ~]# runmqlsr -m QM1 -t tcp -p 9898 &
    [1] 24467
    [root@gtstress42 ~]# 5724-H72 
    (C) Copyright IBM Corp. 1994, 2009.  ALL RIGHTS RESERVED.

执行客户端自动重连接样例

Server 1

  1. 调用 amqsphac 样例程序:
    [root@lins ~]# amqsphac Q QM1
    Sample AMQSPHAC start
    target queue is Q
    message < Message 1 >
    message < Message 2 >
    message < Message 3 >
    message < Message 4 >
    message < Message 5 >
    message < Message 6 >
    message < Message 7 >
    message < Message 8 >
    message < Message 9 >
    message < Message 10 >
  2. 在 Server 1 的另一个窗口中,使用 -is 选项结束队列管理器,这样它将切换到备用队列管理器:
    Server 1(new session):
    
    [root@lins ~]# endmqm -is QM1
    WebSphere MQ queue manager 'QM1' ending.
    WebSphere MQ queue manager 'QM1' ended, permitting switchover to a standby
  3. 验证一个切换是否已发生:
    On Server2:
    
    [root@gtstress42 ~]# dspmq -x -o standby
    QMNAME(QM1)         STANDBY(Permitted)
        INSTANCE(gtstress42.in.ibm.com) MODE(Active) instance.
  4. 该连接将断开,且备用队列管理器中出现重连接:
    On Server 1
    16:12:28 : EVENT : Connection Reconnecting (Delay: 57ms)
    10/06/2010 04:12:35 PM AMQ9508: Program cannot connect to the queue manager.
    10/06/2010 04:12:35 PM AMQ9999: Channel program ended abnormally.
    16:12:37 : EVENT : Connection Reconnecting (Delay: 0ms)
    10/06/2010 04:12:37 PM AMQ9508: Program cannot connect to the queue manager.
    10/06/2010 04:12:37 PM AMQ9999: Channel program ended abnormally.
    16:12:37 : EVENT : Connection Reconnected
    16:12:38 : EVENT : Connection Broken
    message < Message 11 >
    message < Message 12 >
    message < Message 13 >
    message < Message 14 >
    message < Message 15 >
    message < Message 16 >
    message < Message 17 >
    message < Message 18 >
    message < Message 19 >
    message < Message 20 >
    message < Message 21 >
    message < Message 22 >
  5. 在 Server 1 上运行样例程序 amsghac,得到以下信息:
    [root@lins ~]# amqsghac Q SAMP
    Sample AMQSGHAC start
    10/06/2010 04:14:33 PM AMQ9508: Program cannot connect to the queue manager.
    10/06/2010 04:14:33 PM AMQ9999: Channel program ended abnormally.
    message < Message 1 >
    message < Message 2 >
    message < Message 3 >
    message < Message 4 >
    message < Message 5 >
    message < Message 6 >
    message < Message 7 >
    message < Message 8 >
    message < Message 9 >
    message < Message 10 >
    message < Message 11 >
    message < Message 12 >
    message < Message 13 >
    message < Message 14 >
    message < Message 15 >
    message < Message 16 >
    message < Message 17 >
    message < Message 18 >
    message < Message 19 >
    message < Message 20 >
    message < Message 21 >
    message < Messagee 22 >

结束语

本文向您介绍了如何在不同的 Unix 系统,包括 AIX 和 Solaris 上,安装多实例队列管理器,以及如何运行样例程序来检查客户端的自动重连接。

致谢

作者在此感谢 IBM Websphere MQ Level-3 支持团队的 Umamahesh Ponnuswamy 对于本文档技术准确性的审查。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=742614
ArticleTitle=使用自动客户端重连接为 UNIX 系统上的 WebSphere MQ 创建一个多实例队列管理器
publish-date=07252011