MQV7双机HA方案

michele 贡献于2014-01-18

作者 luox  创建于2011-07-08 09:26:00   修改者hezhuhao  修改于2013-07-29 02:55:00字数6874

文档摘要:WebSphere MQ 的最小故障转移单元是队列管理器。通常,包括队列管理器的资源组还包含卷组或磁盘组(已保留,以供资源组专门使用)中的共享磁盘和 IP 地址(用于连接队列管理器)。还可能包括其他 WebSphere MQ 资源,例如同一资源组中的侦听器或触发器监视器(作为独立资源或处于队列管理器本身的控制之下)。
关键词:

IBM Global Technology Service MQV7双机HA方案 目录 1. HA相关说明 2 1.1 冷备相关说明 2 1.2 MQ和HA 2 2. 实施步骤 3 2.1 配置共享磁盘 3 2.2创建用于高可用性 (HA) 集群中的队列管理器 4 2.3将队列管理器配置信息添加到高可用性 (HA) 集群中的其他节点 4 2.4启动处于高可用性 (HA) 集群控制之下的队列管理器 5 2.5停止处于高可用性 (HA) 集群控制之下的队列管理器 6 2.7监视队列管理器 8 2.7将队列管理器置于高可用性 (HA) 集群控制之下 10 1. HA相关说明 1.1 冷备相关说明 备用配置是最基本的 HA 集群配置,在该配置中,一个节点执行工作时另一个节点只能作为备用节点。备用节点不执行工作并称为闲置节点;此配置有时称为冷备用。 1.2 MQ和HA WebSphere MQ 的最小故障转移单元是队列管理器。通常,包括队列管理器的资源组还包含卷组或磁盘组(已保留,以供资源组专门使用)中的共享磁盘和 IP 地址(用于连接队列管理器)。还可能包括其他 WebSphere MQ 资源,例如同一资源组中的侦听器或触发器监视器(作为独立资源或处于队列管理器本身的控制之下)。 要用于 HA 集群中的队列管理器,必须在集群中节点之间共享的磁盘上具有它自己的数据和日志。HA 集群确保一次只有集群中的一个节点可以写入磁盘。HA 集群可以使用监视脚本来监视队列管理器的状态。 可以对与队列管理器相关的数据和日志使用单个共享磁盘。但是,通常的实践是使用独立的共享文件系统,以便可以单独更改它们的大小和调整它们。 IBM Global Technology Service 展示了具有两个节点的 HA 集群。HA 集群正在管理已在资源组中定义的队列管理器的可用性。这是一个主动/被动或冷备用配置,因为当前只有一个节点(节点 A)正在运行队列管理器。该队列管理器是使用其数据和日志文件在共享磁盘上创建的。队列管理器具有服务 IP 地址(也由 HA 集群管理)。队列管理器依赖于共享磁盘和它的服务 IP 地址。当 HA 集群将队列管理器从节点 A 故障转移至节点 B 时,它先将队列管理器依赖的资源移至节点 B 上,然后启动队列管理器。 通常,HA 集群作为 root 用户来运行。WebSphere MQ 作为 mqm 用户来运行。将授予 mqm 组中的成员 WebSphere MQ 的管理权限。确保 mqm 用户和组都存在于所有 HA 集群节点上。用户标识和组标识在集群之间必须一致。不允许由 root 用户管理 WebSphere MQ;用于启动、停止或监视脚本的脚本必须切换为 mqm 用户。 注: 必须在所有节点上正确安装 WebSphere MQ;无法共享产品的可执行文件。 2. 实施步骤 2.1 配置共享磁盘 HA 集群中的 WebSphere® MQ 队列管理器需要数据文件和日志文件位于共享磁盘上已指定的公共远程文件系统中。 要配置共享磁盘,请完成下列步骤: IBM Global Technology Service 确定队列管理器的文件系统的安装点名称。例如,/MQHA/qmgrname/data(对于队列管理器的数据文件)和 /MQHA/qmgrname/log(对于它的日志文件)。 创建卷组(或磁盘组)以包含队列管理器的数据和日志文件。此卷组由队列管理器所在的同一资源组中的高可用性 (HA) 集群管理。 在卷组中为队列管理器的数据和日志文件创建文件系统。 反过来对于每个节点,为文件系统创建安装点并确保可以安装该文件系统。mqm 用户必须拥有安装点。 图 1 显示了 HA 集群中队列管理器的可能布局。队列管理器的数据和日志目录都位于安装在 /MQHA/QM1 的共享磁盘上。发生故障转移时,此磁盘将在 HA 集群的节点之间切换,这样无论队列管理器在何处重新启动,该数据都可用。mqs.ini 文件具有 QM1 队列管理器的节。qm.ini 文件中的 Log 节具有 LogPath 的值。 图 1. 指定共享 data 和 log 目录 2.2创建用于高可用性 (HA) 集群中的队列管理器 在高可用性集群中使用队列管理器的第一步便是在其中一个节点上创建队列管理器。 要创建用于 HA 集群中的队列管理器,请在集群中选择其中一个要在上面创建队列管理器的节点。在此节点上完成下列步骤: 1. 在节点上安装队列管理器的文件系统。 2. 使用 crtmqm 命令创建队列管理器。例如: crtmqm –md /MQHA/qmgrname/data –ld /MQHA/qmgrname/log qmgrname 3. 使用 strmqm 命令手动启动队列管理器。 4. 完成队列管理器的任何初始配置,如创建队列和通道以及设置队列管理器以在队列管理器启动时自动启动侦听器。 5. 使用 endmqm 命令停止队列管理器。 6. 使用 dspmqinf 命令显示可在后面的任务中使用的 addmqinf 命令: dspmqinf –o command qmgrname IBM Global Technology Service 其中 qmgrname 是队列管理器的名称。 7. 所显示的 addmqinf 命令将类似于下列示例: 8. addmqinf –sQueueManager –vName=qmgrname –vDirectory=qmgrname \ –vPrefix=/var/mqm –vDataPath=/MQHA/qmgrname/data/qmgrname 请仔细记录所显示的命令。 9. 卸下队列管理器的文件系统。 2.3将队列管理器配置信息添加到高可用性 (HA) 集群中的其他节点 必须将队列管理器的配置添加到 HA 集群中的其他节点。 要将队列管理器的配置信息添加到 HA 集群中的其他每个节点,请在其他每个节点上完成下列步骤: 1. 安装队列管理器的文件系统。 2. 可以通过直接编辑 /var/mqs.ini 或发出 addmqinf 命令将队列管理器配置信息添加到节点中。 3. 启动和停止队列管理器以验证配置。 4. 卸下队列管理器的文件系统。 2.4启动处于高可用性 (HA) 集群控制之下的队列管理器 队列管理器作为资源出现在 HA 集群中。HA 集群必须能够启动和停止队列管理器。大多数情况下,可以使用 shell 脚本启动队列管理器。必须通过使用网络文件系统或将这些脚本复制到每个本地磁盘,来让它们在集群中的所有节点上的相同位置都可用。 此处给出了合适的 shell 脚本示例。您可以按照需要定制这些脚本并使用它们来启动处于 HA 集群控制之下的队列管理器。 下列 shell 脚本是如何从 HA 集群用户切换到 mqm 用户以便可以成功启动队列管理器的示例: #!/bin/ksh # A simple wrapper script to switch to the mqm user. su mqm -c name_of_your_script $* 下列 shell 脚本是如何启动队列管理器而不对队列管理器当前状态进行任何假设的示例。请注意,它使用了极其意外的方法来结束属于队列管理器的任何进程: #!/bin/ksh # # This script robustly starts the queue manager. # # The script must be run by the mqm user. IBM Global Technology Service # The only argument is the queue manager name. Save it as QM variable QM=$1 if [ -z "$QM" ] then echo "ERROR! No queue manager name supplied" exit 1 fi # End any queue manager processes which might be running. srchstr="( |-m)$QM *.*$" for process in amqzmuc0 amqzxma0 amqfcxba amqfqpub amqpcsea amqzlaa0 \ amqzlsa0 runmqchi runmqlsr amqcrsta amqrrmfa amqrmppa \ amqzfuma amqzdmaa amqzmuf0 amqzmur0 amqzmgr0 do ps -ef | tr "\t" " " | grep $process | grep -v grep | \ egrep "$srchstr" | awk '{print $2}'| \ xargs kill -9 > /dev/null 2>&1 done # It is now safe to start the queue manager. # The strmqm command does not use the -x flag. strmqm ${QM} 您可以修改该脚本以启动其他相关程序。 2.5停止处于高可用性 (HA) 集群控制之下的队列管理器 大多数情况下,可以使用 shell 脚本停止队列管理器。此处给出了合适的 shell 脚本示例。您可以按照需要定制这些脚本并使用它们来停止处于 HA 集群控制之下的队列管理器。 下列脚本是如何立即停止队列管理器而不对队列管理器当前状态进行假设的示例。该脚本必须由 mqm 用户运行;因此,将此脚本合并在 shell 脚本中以将用户从 HA 集群用户切换为 mqm 是必需的: #!/bin/ksh # # The script ends the QM by using two phases, initially trying an immediate # end with a time-out and escalating to a forced stop of remaining # processes. # # The script must be run by the mqm user. # # There are two arguments: the queue manager name and a timeout value. QM=$1 IBM Global Technology Service TIMEOUT=$2 if [ -z "$QM" ] then echo "ERROR! No queue manager name supplied" exit 1 fi if [ -z "$TIMEOUT" ] then echo "ERROR! No timeout specified" exit 1 fi for severity in immediate brutal do # End the queue manager in the background to avoid # it blocking indefinitely. Run the TIMEOUT timer # at the same time to interrupt the attempt, and try a # more forceful version. If the brutal version fails, # nothing more can be done here. echo "Attempting ${severity} end of queue manager '${QM}'" case $severity in immediate) # Minimum severity of endmqm is immediate which severs connections. # HA cluster should not be delayed by clients endmqm -i ${QM} & ;; brutal) # This is a forced means of stopping queue manager processes. srchstr="( |-m)$QM *.*$" for process in amqzmuc0 amqzxma0 amqfcxba amqfqpub amqpcsea amqzlaa0 \ amqzlsa0 runmqchi runmqlsr amqcrsta amqrrmfa amqrmppa \ amqzfuma amqzdmaa amqzmuf0 amqzmur0 amqzmgr0 do ps -ef | tr "\t" " " | grep $process | grep -v grep | \ egrep "$srchstr" | awk '{print $2}'| \ xargs kill -9 > /dev/null 2>&1 done IBM Global Technology Service esac TIMED_OUT=yes SECONDS=0 while (( $SECONDS < ${TIMEOUT} )) do TIMED_OUT=yes i=0 while [ $i -lt 5 ] do # Check for execution controller termination srchstr="( |-m)$QM *.*$" cnt=`ps -ef | tr "\t" " " | grep amqzxma0 | grep -v grep | \ egrep "$srchstr" | awk '{print $2}' | wc -l ` i=`expr $i + 1` sleep 1 if [ $cnt -eq 0 ] then TIMED_OUT=no break fi done if [ ${TIMED_OUT} = "no" ] then break fi echo "Waiting for ${severity} end of queue manager '${QM}'" sleep 1 done # timeout loop if [ ${TIMED_OUT} = "yes" ] then continue # to next level of urgency else break # queue manager is ended, job is done fi done # next phase 2.7监视队列管理器 IBM Global Technology Service 通常会为高可用性 (HA) 集群提供一种方式以定期监视队列管理器的状态。大多数情况下,可以使用 shell 脚本来执行此操作。此处给出了合适的 shell 脚本示例。您可以按照需要定制这些脚本并使用它们来执行特定于您的环境的附加监视检查。 注: PowerHA™ for AIX® 没有提供向队列管理器的监视程序提供参数的方式。您必须为每个队列管理器都创建一个包含队列管理器名称的单独的监视程序。此处是一个脚本示例,用于在 AIX 上包含队列管理器名称: #!/bin/ksh su mqm -c name_of_monitoring_script qmname 下列脚本对于 runmqsc 挂起的可能性是不可靠的。 通常,HA 集群将挂起的监视脚本视为故障并且对这种可能性认为自己非常可靠。 但是,该脚本允许队列管理器处于启动状态。这是因为 HA 集群通常会在启动队列管理器时便对它进行监视。虽然有些 HA 集群会辨别资源的启动阶段和运行阶段,但配置启动阶段的持续时间仍然是必需的。因为启动队列管理器所花费的时间取决于该队列管理器要执行的工作量,所以很 难选择启动队列管理器所花费的最大时间量。如果选择的值太低,那么当队列管理器只是尚未完成启动时,HA 集群会错误地假设它已经失败。这可能会导致一系列无止境的故障转移。 此脚本必须由 mqm 用户运行;因此,将此脚本合并在 shell 脚本中以将用户从 HA 集群用户切换为 mqm 是必需的(启动处于高可用性 (HA) 集群控制之下的队列管理器中提供了一个 shell 脚本示例): #!/bin/ksh # # This script tests the operation of the queue manager. # # An exit code is generated by the runmqsc command: # 0 => Either the queue manager is starting or the queue manager is running and responds. # Either is OK. # >0 => The queue manager is not responding and not starting. # # This script must be run by the mqm user. QM=$1 if [ -z "$QM" ] then echo "ERROR! No queue manager name supplied" exit 1 fi # Test the operation of the queue manager. Result is 0 on success, non-zero on error. echo "ping qmgr" | runmqsc ${QM} > /dev/null 2>&1 pingresult=$? if [ $pingresult -eq 0 ] then # ping succeeded IBM Global Technology Service echo "Queue manager '${QM}' is responsive" result=0 else # ping failed # Don't condemn the queue manager immediately, it might be starting. srchstr="( |-m)$QM *.*$" cnt=`ps -ef | tr "\t" " " | grep strmqm | grep "$srchstr" | grep -v grep \ | awk '{print $2}' | wc -l` if [ $cnt -gt 0 ] then # It appears that the queue manager is still starting up, tolerate echo "Queue manager '${QM}' is starting" result=0 else # There is no sign of the queue manager starting echo "Queue manager '${QM}' is not responsive" result=$pingresult fi fi exit $result 2.7将队列管理器置于高可用性 (HA) 集群控制之下 必须使用队列管理器的 IP 地址和共享磁盘来配置 HA 集群控制之下的队列管理器。 要定义资源组以包含队列管理器及其所有相关联的资源,请完成下列步骤: 1. 创建包含队列管理器、队列管理器的卷或磁盘组以及队列管理器 IP 地址的资源组。该 IP 地址是虚拟 IP 地址,不是计算机的 IP 地址。 2. 验证 HA 集群是否在集群节点之间正确切换了资源以及准备好控制队列管理器。 IBM 2012-05

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 10 人已下载

下载文档