`

WebSphere MQ 的高可用配置(网摘)

mq 
阅读更多

对随需应变计算的成功而言,维持最大限度的系统运行时间变得越来越重要。WebSphere MQ 是一个重要的消息中间件,可以帮助企业加快向随需应变商务的转型。架构师需要考虑如何将 WebSphere MQ 引入到高可用配置的重要性。本文讲述了如何在硬件级上使用开源软件,让使用所提供集群的 WebSphere MQ 具备高可用性。

 

WebSphere MQ 具备异步消息和排队能力,可以确保仅发送一次消息。通过同时使用 WebSphere MQ 和 heartbeat,有可能进一步提高 WebSphere MQ 队列管理器的可用性。

在本系列的第 1 部分中,我向您介绍了高可用性(HA)概念,以及如何安装和配置 heartbeat。在本文中,我将讨论如何使用 heartbeat 在冷备份配置中获得 WebSphere MQ 的 HA 实现。在这个实现中,heartbeat 会检测到主节点出现的问题。这个问题可以是硬件或者软件问题。备份机器将:

  • 接管 IP 地址。
  • 接管存储了队列管理器的队列和日志文件的共享磁盘。
  • 启动队列管理器和相关进程。

为了最大限度地理解并使用本文,您应该对 WebSphere MQ 和高可用集群有基本的了解。


将要用于 heartbeat 集群中的队列管理器需要将它的日志和数据存储在共享的磁盘上,以便在某个节点失败时,仍可以在运行的节点上访问到它们。运行队列管理器的节点还必须在内部磁盘上维持许多文件。这些文件包括与节点上所有队列管理器相关的文件,比如 /var/mqm/mqs.ini,以及用来生成内部控制信息的队列管理器特有的文件。因此,与队列管理器相关的文件分开存放在内部的和共享的磁盘上。

关于存储在共享磁盘上的队列管理器文件,可以为所有与队列管理器相关的恢复数据(日志和数据)使用一个单一的共享磁盘。不过,为了产品环境中的性能优化,建议将日志和数据存放在分开的文件系统中,这样可以分别对它们进行磁盘 I/O 调优。

图 1 展示了我们的设置中文件系统的组织。显示的链接线是使用 shell 脚本自动生成的,下面将对它们进行解释。



 

在下面的章节中,我将向您详细介绍安装 WebSphere MQ 以及创建和测试高可用队列管理器配置的步骤。


遵循这一节中列出的步骤,在主节点和备份节点上安装 WebSphere MQ 5.3.0.2 和 Fixpack 7。有关的更多资料,请参考 WebSphere MQ for Linux for Intel and Linux for zSeries Quick Beginnings 文档:

  1. 使用下面的命令对 WebSphere MQ 5.3.0.2 RPM 进行解压缩:

    rm -rf /tmp/mq5.3.0.2-install

    mkdir /tmp/mq5.3.0.2-install

    tar xzf C48UBML.tar.gz -C /tmp/mq5.3.0.2-install

    tar xf /tmp/mq5.3.0.2-install/MQ53Server_LinuxIntel.tar -C /tmp/mq5.3.0.2-install

    在这里,C48UBML.tar.gz 是 WebSphere MQ 的安装图像文件。

  2. 设置内核版本:

    export LD_ASSUME_KERNEL=2.4.19

  3. 使用 IBM 1.4.2 JDK JRE 替换 WebSphere MQ 附带的 Java 运行时环境(JRE):

    mv /tmp/mq5.3.0.2-install/lap/jre /tmp/mq5.3.0.2-install/lap/jre.mq

    ln -s /opt/IBMJava2-142/jre /tmp/mq5.3.0.2-install/lap/jre

  4. 接受许可:

    /tmp/mq5.3.0.2-install/mqlicense.sh -accept -text_only

  5. 安装 WebSphere MQ RPM:

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesRuntime-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesSDK-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesServer-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesClient-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesSamples-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesJava-5.3.0-2.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.2-install/MQSeriesMan-5.3.0-2.i386.rpm

  6. 清除以下内容:

    rm -rf /tmp/mq5.3.0.2-install/

  7. 解压缩 fixpack 7 RPM:

    rm -rf /tmp/mq5.3.0.7-install/

    mkdir /tmp/mq5.3.0.7-install/

    tar xzf U496732.nogskit.tar.gz -C /tmp/mq5.3.0.7-install/

  8. 安装 fixpack 7 RPM:

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesRuntime-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesSDK-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesServer-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesClient-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesSamples-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesJava-U496732-5.3.0-7.i386.rpm

    rpm -Uvh /tmp/mq5.3.0.7-install/MQSeriesMan-U496732-5.3.0-7.i386.rpm

  9. 再次清除:

    rm -rf /tmp/mq5.3.0.7-install/


在某些平台上,高可用队列管理器的创建是由 WebSphere MQ HA Support Packs 中的脚本自动完成的,比如 MC63 和 IC61。不过,这些支持包(support pack)不能用于 Linux。

这一节中使用的脚本是 MC63 支持包中的脚本的修改版本,具有下列限制:

  • 日志和数据只能用一个文件系统(/ha)。
  • 每次一个队列。

遵循下面列出的步骤来创建高可用队列管理器 ha.queue.manager

  1. 在共享磁盘(/ha)上创建下面的目录:
    • /ha/ha.queue.manager
    • /ha/ha.queue.manager/data
    • /ha/ha.queue.manager/log

  2. 在主节点(ha1)上使用下面的命令创建一个高可用的队列管理器(以 root 身份):

    /ha/hacode/mq/hascripts/hacrtmqm ha.queue.manager

    hacrtmqm 命令将创建队列管理器,并将确保它的目录安排考虑到了 HA 操作。本文附带了 hacrtmqm 脚本的源代码。

  3. 在两个节点上的 mqm 用户的 .bashrc(启动脚本)中添加下面两行。

    LD_ASSUME_KERNEL=2.4.19
    export LD_ASSUME_KERNEL

  4. 运行 setmqcap 命令,输入您所购买的处理器数目。在 ha1 上运行以下命令:

    /opt/mqm/bin/setmqcap 4

  5. 以用户 mqm 的身份使用 strmqm 命令启动队列管理器 ha.queue.manager。

    /opt/mqm/bin/strmqm ha.queue.manager

  6. 启动 MQSC 命令,输入以下内容:

    /opt/mqm/bin/runmqsc ha.queue.manager

    出现一条消息,告诉您已经启动了一个 MQSC 会话。MQSC 没有命令提示符。

  7. 创建一个本地队列 HA.QUEUE,输入下面的命令:

    define qlocal (HA.QUEUE)

  8. 创建一个通道 HA.CHANNEL,输入下面的命令:

    define channel(HA.CHANNEL) chltype(svrconn) trptype(tcp) mcauser('mqm')

  9. 输入 end 来停止 MQSC。出现一些消息,并且命令提示符会重新显示出来。

  10. 使用 endmqm 命令手工停止队列管理器 ha.queue.manager:

    /opt/mqm/bin/endmqm ha.queue.manager

  11. 在备份节点(ha2)上,以用户 mqm 身份创建队列管理器。可以使用下面给出的命令,不过要写在同一行上。您可能需要以 root 身份挂载 /ha:

    cd /ha/hacode/mq/hascripts/
    ./halinkmqm ha.queue.manager ha\!queue\!manager
    /ha/ha.queue.manager/data standby

    在内部, hacrtmqm 使用一个称为 halinkmqm 的脚本来重新链接用作 IPC 的子目录,并创建一个指向 /ha/$qmgr/data/qmgrs/$qmgr 目录的符号链接 /var/mqm/qmgrs/$qmgr。不要在使用 hacrtmqm 创建队列管理器的节点上运行 halinkmqm — 它已经在那里运行了。

  12. 运行 setmqcap 命令,输入您所购买的处理器数目:

    /opt/mqm/bin/setmqcap 4

  13. 在备份节点上,使用 strmqm 命令启动队列管理器 ha.queue.manager。确认它已启动。

  14. 停止备份节点上的队列管理器。

在下面列出了配置 heartbeat 来管理 WebSphere MQ 服务器所需要的步骤:

  1. 如前所述,heartbeat 所管理的资源基本上只是 start/stop 脚本。您需要创建启动和停止 WebSphere MQ 队列管理器和相关进程的脚本。清单 1 中给出了一个非常基本的脚本。您可以通过进一步对这个脚本进行定制来满足您的需要。这个脚本必须放置在 /etc/rc.d/init.d 目录中。


                            
    #!/bin/bash
    #
    #   /etc/rc.d/init.d/mqseries
    #
    # Starts the MQ Server
    #
    # chkconfig: 345 88 57
    # description: Runs  MQ
    . /etc/init.d/functions
    # Source function library.
    PATH=/usr/bin:/bin:/opt/mqm/bin
    QMGRS="ha.queue.manager"
    PS=/bin/ps
    GREP=/bin/grep
    SED=/bin/sed
    #======================================================================
    SU="sh"
    if [ "`whoami`" = "root" ]; then
       SU="su - mqm"
    fi
    #======================================================================
    killproc() {            # kill the named process(es)
          pid=`$PS -e |
              $GREP -w $1 |
              $SED -e 's/^  *//' -e 's/ .*//'`
          [ "$pid" != "" ] && kill -9 $pid
    }
    #======================================================================
    start() {
       for qmgr in $QMGRS ; do
          export qmgr
       echo "$0: starting $qmgr"
       $SU -c "strmqm $qmgr"
       $SU -c "nohup runmqlsr -m $qmgr -t tcp -p 1414 >> /dev/null 2&t;&1 < /dev/null &"
       done
    }
    #======================================================================
    stop() {
       for qmgr in $QMGRS ; do
          export qmgr
          echo ending $qmgr
    	killproc runmqlsr
    	$SU -c "endmqm -w $qmgr &"
          sleep 30
       done
    }
    case $1 in
    'start')
       start
       ;;
    'stop')
       stop
       ;;
    'restart')
       stop
       start
       ;;
    *)
       echo "usage: $0 {start|stop|restart}"
       ;;
    esac
              

  2. 现在需要配置 /etc/ha.d/haresources(在两个节点上),使它们包含上面的 mqseries 脚本,如下所示:

    ha1.haw2.ibm.com 9.22.7.46
    Filesystem::hanfs.haw2.ibm.com:/ha::/ha::nfs::rw,hard mqseries

    这表示,在 heartbeat 启动时,它将使 ha1 服务集群 IP 地址,挂载共享文件系统 /ha,然后启动 WebSphere MQ 进程。在关闭时,heartbeat 将首先停止 WebSphere MQ 进程,然后卸载文件系统,最后释放 IP 地址。


本节列出了测试队列管理器 ha.queue.manager 的高可用性所需要的步骤。

  1. 启动主节点上的 heartbeat 服务,然后在备份节点上执行以下命令:

    /etc/rc.d/init.d/heartbeat start

    如果失败,那么可查看 /var/log/messages 中的消息来确定其原因,并纠正它。当 heartbeat 成功启动后,您应该看到一个新的接口,其地址是您在 ha.cf 文件中配置的地址。可以通过运行 ifconfig 来显示它。清单 2 给出了与设置的输出相关的部分:


                            
    ...
    eth0:0    Link encap:Ethernet  HWaddr 00:D0:59:DA:01:50
              inet addr:
                9.22.7.46  Bcast:9.22.7.127  Mask:255.255.255.128
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:76541 errors:0 dropped:0 overruns:0 frame:0
              TX packets:61411 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:8830515 (8.4 Mb)  TX bytes:6755709 (6.4 Mb)
              Interrupt:11 Base address:0x6400 Memory:c0200000-c0200038
    ...
              

    一旦启动了 heartbeat,在测试它之前,要先看一下日志文件(默认情况下是 /var/log/ha-log)。如果一切顺利,那么主机器的日志(本例中的 ha1)内容应该类似于清单 3 所示(出于版面方面考虑,省略了一些行)。


                            
    ...
    heartbeat: 2004/09/01_11:17:13 info: **************************
    heartbeat: 2004/09/01_11:17:13 info: Configuration validated.
    	Starting heartbeat 1.2.2
    heartbeat: 2004/09/01_11:17:13 info: heartbeat: version 1.2.2
    heartbeat: 2004/09/01_11:17:13 info: Heartbeat generation: 10
    heartbeat: 2004/09/01_11:17:13 info: Starting serial heartbeat on
    	tty /dev/ttyS0 (19200 baud)
    heartbeat: 2004/09/01_11:17:13 info: ping heartbeat started.
    heartbeat: 2004/09/01_11:17:13 info: pid 9226 locked in memory.
    heartbeat: 2004/09/01_11:17:13 info: Local status now set to: 'up'
    heartbeat: 2004/09/01_11:17:14 info: pid 9229 locked in memory.
    heartbeat: 2004/09/01_11:17:14 info: pid 9230 locked in memory.
    heartbeat: 2004/09/01_11:17:14 info: pid 9231 locked in memory.
    heartbeat: 2004/09/01_11:17:14 info: pid 9232 locked in memory.
    heartbeat: 2004/09/01_11:17:14 info: pid 9233 locked in memory.
    heartbeat: 2004/09/01_11:17:14 info: Link 9.22.7.1:9.22.7.1 up.
    heartbeat: 2004/09/01_11:17:14 info: Status update for node 9.22.7.1:
    	status ping
    ...
    heartbeat: 2004/09/01_11:19:18 info: Acquiring resource group:
    	ha1.haw2.ibm.com 9.22.7.46 mqseries
    heartbeat: 2004/09/01_11:19:18 info: Running /etc/ha.d/resource.d/IPaddr
    	9.22.7.46 start
    heartbeat: 2004/09/01_11:19:18 info: /sbin/ifconfig eth0:0 9.22.7.46
    	netmask 255.255.255.128  broadcast 9.22.7.127
    heartbeat: 2004/09/01_11:19:18 info: Sending Gratuitous Arp for
    	9.22.7.46 on eth0:0 [eth0]
    ...
    heartbeat: 2004/09/01_11:19:49 info: Running /etc/init.d/mqseries  start
    ...
              

    您可以看到它正在进行 IP 接管,并随后启动 WebSphere MQ 进程。可以使用 ps 命令来确认 WebSphere MQ 正在主节点上运行。

  2. 向 BGQUEUE 添加一些持久存储消息。可以通过运行 MQ Sender 程序 send.bat 或者 send.sh(视您的操作系统而定)来完成这项操作。您应该在一台安装了 MQ Client 的机器上运行这个程序。清单 4 展示了在节点 ha1 上运行这个程序的输出。


                            
    [root@ha1 mq]# ./send.sh
    MSender is running
    Hostname  = ha.haw2.ibm.com
    QManager = ha.queue.manager
    Channel Name  = HA.CHANNEL
    Channel Port  = 1414
    Q  = HA.QUEUE
    Enter a message:
    Hello
    This
    is
    a
    test
    Done Sending Message
    [root@ha1 mq]#
              

  3. 浏览并获得这些消息。然后使用 MQ Browse 程序 receive.bat 或者 receive.sh(视您的操作系统而定)。除了最后一个“test”消息之外,您将得到先前添加到队列中的所有消息。您将在进行故障恢复后得到这些消息。清单 5 给出了在节点 ha1 上运行的输出。


                            
    [root@ha1 mq]# ./receive.sh
    MBrowse is running
    Hostname  = ha.haw2.ibm.com
    QManager = ha.queue.manager
    Channel Name  = HA.CHANNEL
    Channel Port  = 1414
    Q  = HA.QUEUE
    Browsed message: Hello
    Actually get message?y
    Actually getting the message
    Browsed message: This
    Actually get message?y
    Actually getting the message
    Browsed message: is
    Actually get message?y
    Actually getting the message
    Browsed message: a
    Actually get message?y
    Actually getting the message
    Browsed message: test
    Actually get message?n
    MQJE001: Completion Code 2, Reason 2033
    MQ exception: CC = 2 RC = 2033
              

    忽略结尾带有原因代码 2033 的 MQ Exception。出现这种异常是因为无法再从队列中获得消息。

  4. 模拟故障恢复。只需在主系统上使用以下命令停止 heartbeat 即可:

    /etc/rc.d/init.d/heartbeat stop

    您应该观察到,在不到一分钟时间内,第二台机器上的所有服务都启动起来。如果没有,那么可以去查看 /var/log/messages 中的消息来确定其原因,并纠正它。通过再次启动 heartbeat,您可以自动恢复至主节点。heartbeat 总是优先选择主系统,只要有可能,就先从那里开始运行。在备份机器上检查 /var/log/ha-log 文件和 ps 命令,以此确认 WebSphere MQ 正在运行。

  5. 浏览并获得最后一条消息。运行 MQ Browse 程序 receive.bat 或者 receive.sh(视您的操作系统而定)。这一次您将得到最后一条消息。清单 6 给出了在 ha2 上运行的输出。


                            
    [root@ha2 mq]# ./receive.sh
    MBrowse is running
    Hostname  = ha.haw2.ibm.com
    QManager = ha.queue.manager
    Channel Name  = HA.CHANNEL
    Channel Port  = 1414
    Q  = HA.QUEUE
    Browsed message: test
    Actually get message?y
    Actually getting the message
    MQJE001: Completion Code 2, Reason 2033
    MQ exception: CC = 2 RC = 2033
              

  6. 重新在主节点上启动 heartbeat 服务。这应该会停止备份节点上的 WebSphere MQ 服务器进程,并在主节点上启动它们。主节点还应该接管集群 IP。

现在您已经了解了如何通过使用共享磁盘,使得在故障恢复之前添加到某个队列中的消息可以在以后被恢复。

 

 原文地址:http://www.ibm.com/developerworks/cn/linux/l-halinux2/index.html

  • 大小: 16.7 KB
分享到:
评论

相关推荐

    IBM WebSphere MQ 技术白皮书.doc

    IBM WebSphere MQ 技术白皮书 IBM WebSphere MQ 技术白皮书是 IBM 公司发布的一份技术白皮书,旨在介绍 IBM WebSphere MQ 产品的技术特性、架构和价值。下面是根据白皮书的内容生成的相关知识点。 概述 在概述...

    Heartbeat+WebsphereMQ 高可用.docx

    Heartbeat+WebsphereMQ

    Websphere MQ入门教程

    6.2.4 WebSphere MQ对象配置实例 81 6.3通道的维护 83 6.3.1通道的状态 83 6.3.2通道维护命令 84 6.3.3设置MaxChannels和MaxActiveChannels属性 88 6.4配置侦听程序 88 6.4.1 Windows 平台 88 6.4.2 unix 平台 88 ...

    IBM WebSphere MQ 安装包

    IBM WebSphere MQ是IBM业界领先面向消息的中间件产品,也是MQ系列产品的基础和核心,它使不同的应用程序能够以企业级的性能,在广泛的平台上安全而可靠地通讯。

    WebSphere MQ配置.rar

    WebSphere MQ配置.rar WebSphere MQ配置.rar WebSphere MQ配置.rar

    IBM WebSphere MQ入门教程.pdf

    IBM WebSphere MQ入门教程 IBM WebSphere MQ 是一种基于消息队列的中间件,用于实现不同的应用程序之间的异步通信。下面是对 IBM WebSphere MQ 的入门教程的总结,涵盖了 WebSphere MQ 的原理、体系结构、重要特点...

    websphere mq远程通信配置

    websphere mq是一个非常好的中间件。但是帮助说明做得实在有点过分,居然按照上面的一步一步的做就直接报错,永远调试不通。网上一搜,都是一篇文章四处转载,愤怒!!!各位网民还是先自己动手测试下在转载吧。这篇...

    WebSphere MQ自学笔记

    本人自学IBM的WebSphereMQ自学笔记,内有MQ安装文档,建MQ的例子等。 1、 MQ6.0安装 2 1.1 启动MQ v6.0 安装程序 2 1.2 软件需求检查 2 1.3 WebSphere Eclipse Platform V3.0.1软件安装 2 1.4 网络配置检查 3 1.5 ...

    Websphere MQ入门教程7

    第二部分 WebSphere MQ系统管理,分为六章,分别介绍安装、配置、管理、控制命令和问题确定;第三部分 WebSphere MQ应用开发,由五章组成,介绍程序设计、编写和例子程序。 本书是WebSphere MQ产品的实用指南,...

    IBM Websphere MQ入门教程

    IBM Websphere MQ入门教程 IBM Websphere MQ是IBM公司开发的一款消息队列中间件,旨在提供一个可靠的异步通信机制,实现不同应用程序之间的数据...但是,Websphere MQ的配置和管理也存在一定的复杂性和高昂的成本。

    WebSphereMQ_V7.5.0.2_for_Windows(4-1)

    通过为重要的消息和事务提供可靠的、一次且仅一次的传递,Websphere MQ 可以处理复杂的通信协议,并动态地将消息传递工作负载分配给可用的资源。 IBM 消息中间件MQ以其独特的安全机制、简便快速的编程风格、卓越不凡...

    WebSphere MQ7.0配置与测试(java 源码,含图)

    WebSphere MQ7.0配置与测试 WebSphere MQ发送接收消息的实现 附java 源码

    WebSphere MQ 开发培训

    WebSphere MQ 开发培训 IBM软件部 软件部 WebSphere MQ 议程 WebSphere MQ 概览 WebSphere MQ 安装配置 WebSphere MQ 应用开发 WebSphere MQ 参考

    Active MQ 与 IBM WebSphere MQ 可用性和管理分析

    Active MQ 与 WebSphere MQ 高可用性和管理分析。

    非常全面的WebsphereMQ的PDF学习资料

    个人收集整理,非常全面的WebsphereMQ的PDF学习资料。Websphere MQ Programming Guide,Websphere MQ Using C++,WebSphere MQ Using Java,WEBSPHERE MQ6.0 JAVA编程,WebSphere MQ基础教程,IBM WEBSPHERE MQ教程...

    WebSphereMQ_V7.5.0.2_for_Windows.part2.rar

    通过为重要的消息和事务提供可靠的、一次且仅一次的传递,Websphere MQ 可以处理复杂的通信协议,并动态地将消息传递工作负载分配给可用的资源。 IBM 消息中间件MQ以其独特的安全机制、简便快速的编程风格、卓越不凡...

    IBM Websphere mq安装

    IBM Websphere mq安装IBM Websphere mq安装

    WebSphere MQ 通道设置与测试.docx

    WebSphere MQ 通道设置与测试 WebSphere MQ 是 IBM 提供的一种消息队列 middleware,它允许不同的应用程序之间进行异步通信。WebSphere MQ 通道是将消息从一个队列传输到另一个队列的过程。下面将对 WebSphere MQ ...

    IBM Websphere MQ 教程之备份与恢复

    IBM Websphere MQ 教程之备份与恢复

    WebSphere MQ

    WebSphere MQ WebSphere MQWebSphere MQ WebSphere MQ

Global site tag (gtag.js) - Google Analytics