青成林语

协助他人,成就彼此 ^_^
mq

没问题!为了确保你的迁移过程万无一失,我将整个方案升级到了企业级严谨标准

这份方案补充了严格的前置检查(防冲突)多维度的验证步骤(防假死),请严格按照以下流程执行:


🛑 第一阶段:严谨的前置条件检查(执行前必读)

在动手之前,请务必确认以下 4 项条件已满足,否则极易导致启动失败:

  1. 端口冲突检查:确保本地虚拟机的 567215672 端口未被占用。
    ss -tuln | grep -E '5672|15672'
    # 如果没有任何输出,说明端口空闲,可以继续
    
  2. 清理历史残留:如果之前测试过 RabbitMQ,必须先彻底删除旧容器和匿名卷。
    docker stop rabbitmq && docker rm -v rabbitmq
    
  3. 备份文件完整性检查:确认从华为云拷贝过来的备份包没有损坏。
    # 假设你的备份包名为 rabbitmq_backup.tar.gz
    tar -tzf /path/to/rabbitmq_backup.tar.gz > /dev/null && echo "备份包校验通过" || echo "备份包已损坏,请重新下载"
    
  4. 目录权限检查:确保宿主机目录存在,且属于 RabbitMQ 的默认 UID (999)。
    mkdir -p /home/hydev/rabbitmq/{data,logs}
    chown -R 999:999 /home/hydev/rabbitmq
    

🚀 第二阶段:启动容器并验证基础环境

  1. 执行优化版启动命令

    docker run -d \
      --name rabbitmq \
      --hostname rabbitmq-node1 \
      -p 5672:5672 \
      -p 15672:15672 \
      --restart always \
      -v /home/hydev/rabbitmq/data:/var/lib/rabbitmq \
      -v /home/hydev/rabbitmq/logs:/var/log/rabbitmq \
      -e RABBITMQ_DEFAULT_USER=admin \
      -e RABBITMQ_DEFAULT_PASS=admin123456 \
      -e RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.3 \
      rabbitmq:3.13-management-alpine
    
  2. 基础环境验证(空容器状态)

    • 等待启动:RabbitMQ 启动需要时间,等待 30 秒。
    • 检查进程状态
      docker ps | grep rabbitmq
      # 确认 STATUS 显示为 Up,且没有反复重启的迹象
      
    • 检查内部日志
      docker logs rabbitmq | grep -i "Server startup complete"
      # 必须能看到这行输出,否则说明服务未真正就绪
      
    • 网络连通性测试
      # 测试 AMQP 端口
      nc -zv localhost 5672
      # 测试 Web 管理端口
      nc -zv localhost 15672
      

🔄 第三阶段:严谨的数据恢复流程

  1. 安全停止容器
    docker stop rabbitmq
    
  2. 清空并导入数据
    # 清空刚才启动时生成的空数据
    rm -rf /home/hydev/rabbitmq/data/*
    
    # 导入华为云备份数据
    tar -xzvf /path/to/rabbitmq_backup.tar.gz -C /home/hydev/rabbitmq/data
    
  3. 强制修复权限(关键)
    解压操作通常会改变文件的所有者,必须重新赋权,否则 RabbitMQ 会因无法写入 .erlang.cookiemnesia 数据库而崩溃。
    chown -R 999:999 /home/hydev/rabbitmq/data
    
  4. 启动容器
    docker start rabbitmq
    

✅ 第四阶段:多维度恢复验证(防假死)

数据导入后,必须通过以下 3 个维度交叉验证,确保 100% 恢复成功:

  1. 底层日志验证

    docker logs -f rabbitmq
    
    • 成功标志:看到 Server startup complete 且没有 Permission deniedMnesia dir not found 等报错。
    • 失败标志:如果容器在启动后 10 秒内自动退出(docker ps -a 显示 Exited),说明数据文件存在版本不兼容或严重的权限问题。
  2. Web 控制台验证
    浏览器访问 http://<你的虚拟机IP>:15672,使用 admin / admin123456 登录。

    • 检查 Overview 面板:节点名称应为 rabbit@rabbitmq-node1
    • 检查 QueuesExchanges 面板:确认业务队列和交换机数量与华为云上一致。
  3. 命令行深度验证(最可靠)
    即使 Web 界面能打开,也建议用命令行核对核心数据:

    # 检查队列列表(报错不用管)
    docker exec rabbitmq rabbitmqctl list_queues name messages consumers
    
    # 检查交换机列表(报错不用管)
    docker exec rabbitmq rabbitmqctl list_exchanges name type
  4. 101上是怎么样的,做个对照,需要完全切换后对照

    root@192.168.0.101[15:38:49]:~
    $ docker exec rabbitmq rabbitmqctl list_queues -p my_vhost name
    
    Timeout: 60.0 seconds ...
    Listing queues for vhost my_vhost ...
    name
    PAID_LISTEN
    TL_PAID_LISTEN
    COLLECT_LISTEN
    COLLECT_HAND_ORDER_LISTEN
    PAID_HAND_ORDER_LISTEN
    SETTLEMENT_HAND_ORDER_LISTEN
    SETTLEMENT_LISTEN
    TL_PROTOCOL_COLLECT_LISTEN
    COMPENSATION_REFUND_ORDER_LISTEN
    COMPENSATION_REFUND_LISTEN
    root@192.168.0.101[15:40:08]:~
    $
    root@192.168.0.101[15:40:08]:~
    $ docker exec rabbitmq rabbitmqctl --timeout 300 list_queues -p my_vhost name messages consumers
    Timeout: 300.0 seconds ...
    Listing queues for vhost my_vhost ...
    name messages consumers
    PAID_LISTEN 0 1
    TL_PAID_LISTEN 0 0
    COLLECT_LISTEN 0 5
    COLLECT_HAND_ORDER_LISTEN 0 5
    PAID_HAND_ORDER_LISTEN 0 1
    SETTLEMENT_HAND_ORDER_LISTEN 0 1
    SETTLEMENT_LISTEN 0 1
    TL_PROTOCOL_COLLECT_LISTEN 0 0
    COMPENSATION_REFUND_ORDER_LISTEN 0 5
    COMPENSATION_REFUND_LISTEN 0 5
    
    查出来了,我是不是可以用这个到本地新建的也验证还是,到时候按照其他方式验证

     

  5. 如果命令能正常返回数据,且与华为云上的业务数据完全吻合,即可宣布迁移成功!

posted on 2026-06-25 15:31  青成林语  阅读(2)  评论(0)    收藏  举报