mq
没问题!为了确保你的迁移过程万无一失,我将整个方案升级到了企业级严谨标准。
这份方案补充了严格的前置检查(防冲突)和多维度的验证步骤(防假死),请严格按照以下流程执行:
🛑 第一阶段:严谨的前置条件检查(执行前必读)
在动手之前,请务必确认以下 4 项条件已满足,否则极易导致启动失败:
- 端口冲突检查:确保本地虚拟机的
5672和15672端口未被占用。ss -tuln | grep -E '5672|15672' # 如果没有任何输出,说明端口空闲,可以继续 - 清理历史残留:如果之前测试过 RabbitMQ,必须先彻底删除旧容器和匿名卷。
docker stop rabbitmq && docker rm -v rabbitmq - 备份文件完整性检查:确认从华为云拷贝过来的备份包没有损坏。
# 假设你的备份包名为 rabbitmq_backup.tar.gz tar -tzf /path/to/rabbitmq_backup.tar.gz > /dev/null && echo "备份包校验通过" || echo "备份包已损坏,请重新下载" - 目录权限检查:确保宿主机目录存在,且属于 RabbitMQ 的默认 UID (
999)。mkdir -p /home/hydev/rabbitmq/{data,logs} chown -R 999:999 /home/hydev/rabbitmq
🚀 第二阶段:启动容器并验证基础环境
-
执行优化版启动命令:
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 -
基础环境验证(空容器状态):
- 等待启动: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
🔄 第三阶段:严谨的数据恢复流程
- 安全停止容器:
docker stop rabbitmq - 清空并导入数据:
# 清空刚才启动时生成的空数据 rm -rf /home/hydev/rabbitmq/data/* # 导入华为云备份数据 tar -xzvf /path/to/rabbitmq_backup.tar.gz -C /home/hydev/rabbitmq/data - 强制修复权限(关键):
解压操作通常会改变文件的所有者,必须重新赋权,否则 RabbitMQ 会因无法写入.erlang.cookie或mnesia数据库而崩溃。chown -R 999:999 /home/hydev/rabbitmq/data - 启动容器:
docker start rabbitmq
✅ 第四阶段:多维度恢复验证(防假死)
数据导入后,必须通过以下 3 个维度交叉验证,确保 100% 恢复成功:
-
底层日志验证:
docker logs -f rabbitmq- 成功标志:看到
Server startup complete且没有Permission denied或Mnesia dir not found等报错。 - 失败标志:如果容器在启动后 10 秒内自动退出(
docker ps -a显示Exited),说明数据文件存在版本不兼容或严重的权限问题。
- 成功标志:看到
-
Web 控制台验证:
浏览器访问http://<你的虚拟机IP>:15672,使用admin/admin123456登录。- 检查 Overview 面板:节点名称应为
rabbit@rabbitmq-node1。 - 检查 Queues 和 Exchanges 面板:确认业务队列和交换机数量与华为云上一致。
- 检查 Overview 面板:节点名称应为
-
命令行深度验证(最可靠):
即使 Web 界面能打开,也建议用命令行核对核心数据:# 检查队列列表(报错不用管) docker exec rabbitmq rabbitmqctl list_queues name messages consumers # 检查交换机列表(报错不用管) docker exec rabbitmq rabbitmqctl list_exchanges name type -
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 查出来了,我是不是可以用这个到本地新建的也验证还是,到时候按照其他方式验证
-
如果命令能正常返回数据,且与华为云上的业务数据完全吻合,即可宣布迁移成功!
浙公网安备 33010602011771号