欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-13 12:17:28
...

对随需应变计算的成功而言,维持最大限度的系统运行时间变得越来越重要。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 的高可用配置(网摘)
            
    
    博客分类: 集群 mq 
 

在下面的章节中,我将向您详细介绍安装 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

  • WebSphere MQ 的高可用配置(网摘)
            
    
    博客分类: 集群 mq 
  • 大小: 16.7 KB
相关标签: mq

上一篇: ActiveMQ

下一篇: IBM MQ 使用指南