You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供Linux下Multi-instance队列管理器与Broker优雅启停/切换脚本

IBM MQ Multi-Instance 队列管理器与Broker优雅启停/切换脚本

一、前置准备说明

  • 所有操作需以mqm用户身份执行
  • 已完成队列管理器多实例的共享存储、心跳检测等基础配置
  • Broker已关联目标多实例队列管理器,且节点间Broker配置文件路径统一

二、Broker优雅停止脚本(mq_broker_stop.sh)

#!/bin/bash
# 优雅停止指定Broker,优先处理完现有消息再终止进程
BROKER_NAME=$1

# 检查Broker运行状态
mqsistatus $BROKER_NAME > /dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "Broker $BROKER_NAME 未处于运行状态"
    exit 0
fi

# 触发优雅关闭:拒绝新请求,等待现有消息处理完成
mqshutdown -i $BROKER_NAME

# 等待进程终止,最多等待300秒(可根据业务调整)
WAIT_TIME=0
MAX_WAIT=300
while true; do
    mqsistatus $BROKER_NAME > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "Broker $BROKER_NAME 已成功停止"
        break
    fi
    if [ $WAIT_TIME -ge $MAX_WAIT ]; then
        echo "等待超时,强制终止Broker $BROKER_NAME 进程"
        mqsistop -f $BROKER_NAME
        break
    fi
    sleep 5
    WAIT_TIME=$((WAIT_TIME+5))
done

三、Multi-Instance队列管理器优雅停止/切换脚本(mq_mi_qmgr_stop.sh)

#!/bin/bash
# 优雅停止多实例队列管理器,优先触发主动切换至备用节点
QMGR_NAME=$1

# 检查队列管理器运行状态
dspmq -m $QMGR_NAME | grep -q "RUNNING"
if [ $? -ne 0 ]; then
    echo "队列管理器 $QMGR_NAME 未处于运行状态"
    exit 0
fi

# 尝试主动切换到备用节点(仅当备用节点可用时生效)
echo "尝试触发队列管理器 $QMGR_NAME 主动切换至备用节点..."
endmqm -s $QMGR_NAME

# 检查切换结果,若当前节点仍为活动节点则执行本地优雅停止
dspmq -m $QMGR_NAME | grep -q "RUNNING"
if [ $? -eq 0 ]; then
    echo "主动切换失败,执行本地优雅停止..."
    endmqm -i $QMGR_NAME
fi

# 等待队列管理器完全终止
WAIT_TIME=0
MAX_WAIT=120
while true; do
    dspmq -m $QMGR_NAME | grep -q "ENDED"
    if [ $? -eq 0 ]; then
        echo "队列管理器 $QMGR_NAME 已成功停止"
        break
    fi
    if [ $WAIT_TIME -ge $MAX_WAIT ]; then
        echo "等待超时,强制终止队列管理器 $QMGR_NAME"
        endmqm -f $QMGR_NAME
        break
    fi
    sleep 5
    WAIT_TIME=$((WAIT_TIME+5))
done

四、队列管理器+Broker联合切换脚本(mq_mi_full_switch.sh)

#!/bin/bash
# 完成多实例队列管理器与Broker的跨节点切换,先停Broker再处理队列管理器
QMGR_NAME=$1
BROKER_NAME=$2
TARGET_NODE=$3  # 备用节点的主机名或IP地址

# 1. 停止当前节点的Broker
echo "=== 停止当前节点Broker $BROKER_NAME ==="
./mq_broker_stop.sh $BROKER_NAME

# 2. 停止/切换当前节点的队列管理器
echo "=== 处理队列管理器 $QMGR_NAME 切换 ==="
./mq_mi_qmgr_stop.sh $QMGR_NAME

# 3. 在目标节点启动队列管理器(需提前配置mqm用户跨节点免密登录)
echo "=== 在目标节点 $TARGET_NODE 启动队列管理器 $QMGR_NAME ==="
ssh mqm@$TARGET_NODE "strmqm $QMGR_NAME"

# 4. 在目标节点启动Broker
echo "=== 在目标节点 $TARGET_NODE 启动Broker $BROKER_NAME ==="
ssh mqm@$TARGET_NODE "mqsistart $BROKER_NAME"

echo "=== 队列管理器与Broker切换操作完成 ==="

五、脚本使用说明

  • 给所有脚本添加执行权限:chmod +x *.sh
  • 单独停止Broker:./mq_broker_stop.sh <Broker名称>
  • 单独停止/切换队列管理器:./mq_mi_qmgr_stop.sh <队列管理器名称>
  • 执行跨节点联合切换:./mq_mi_full_switch.sh <队列管理器名称> <Broker名称> <目标节点>
  • 若需整合为系统服务,可将脚本封装进systemd单元,确保以mqm用户身份执行

内容的提问来源于stack exchange,提问作者Arun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:06:13