RabbitMQ 在 CentOS 上的备份与恢复
一、备份与恢复总览
- 备份对象通常分为两类:
- 元数据:包括 vhost、用户、权限、队列/交换器/绑定、策略 等,适合用 rabbitmqctl 或 管理 API 导出为 JSON 定义文件;
- 消息数据:即 Mnesia 数据库目录(默认在 /var/lib/rabbitmq/mnesia/ 下,目录名形如 rabbit@),用于持久化队列内容与状态。
- 恢复时遵循“先元数据、后消息数据”的顺序;若跨主机/改名,需保证 节点名一致 或执行 节点重命名,否则 Mnesia 无法正确引导。必要时在恢复前停止应用(stop_app)以避免写入冲突。
二、场景化操作步骤
三、自动化与定期备份脚本
- 元数据定时备份脚本(基于管理 API,保留最近 30 天)
- 备份脚本 backup_defs.sh
- #!/bin/bash
BACKUP_DIR=“/data/rabbitmq/backup”
DATE=$(date +%F-%H-%M)
mkdir -p “$BACKUP_DIR”
wget --user “$RABBIT_USER” --password “$RABBIT_PASS”
-O “$BACKUP_DIR/defs-$DATE.json”
“http://$RABBIT_HOST:15672/api/definitions”
find “$BACKUP_DIR” -name “defs-*.json” -mtime +30 -delete
- 恢复命令
- curl -T “$BACKUP_DIR/defs-2025-11-25-10-00.json”
-X POST -u “$RABBIT_USER:$RABBIT_PASS”
-H “Content-Type: application/json”
“http://$RABBIT_HOST:15672/api/definitions”
- 建议:将脚本加入 crontab(如每日 2 点)并妥善保存凭据与备份文件权限。
四、验证与常见注意事项
- 验证
- 检查节点与集群状态:rabbitmqctl cluster_status
- 查看队列与镜像同步:rabbitmqctl list_queues name slave_nodes synchronised_slave_nodes
- 核对资源与告警:rabbitmqctl status;并检查磁盘/内存(如 df -h、free -m)与日志(/var/log/rabbitmq/)是否有异常或流控提示。
- 注意事项
- 版本兼容:导入定义或替换 Mnesia 目录时,尽量保持 RabbitMQ 版本一致或兼容,避免升级/降级导致引导失败。
- 节点名一致性:Mnesia 目录名与节点名绑定,跨机迁移或改名请先规划并通过 rename_cluster_node 处理,再启动服务。
- 队列类型影响可用性:普通队列不跨节点复制内容,节点故障会丢失该节点上的消息;如需更高可用性,使用 镜像队列 或队列高可用策略,并在恢复后核对同步状态。
- 备份一致性:对消息数据做文件系统级备份时,优先选择停机窗口或确保队列无写入;对高可用场景,可结合 定义备份 + 镜像队列 + 监控告警 形成完整方案。