如何备份和恢复RabbitMQ数据和配置
我们最近涵盖了在CentOS 7,CentOS 6,Fedora和Ubuntu上的RabbitMQ的安装。
在CentOS 7/Fedora 29/Fedora安装RabbitMQ 28
如何在Ubuntu 18.04 LTS上安装最新的RabbitMQ服务器
在CentOS 6和CentOS 7上安装RabbitMQ
在这篇文章中,我希望我们来看看如何为RabbitMQ配置和数据执行备份。
这还将包括有关将RabbitMQ备份恢复为新部署的信息。
获取群集状态
$rabbitmqctl cluster_status Cluster status of node Hyman@theitroad ... [{nodes,[{disc,['Hyman@theitroad']}]}, {running_nodes,['Hyman@theitroad']}, {cluster_name,<<"Hyman@theitroad">>}, {partitions,[]}, {alarms,[{'Hyman@theitroad',[]}]}]
如何备份RabbitMQ配置
请注意,此备份不包含消息,因为它们存储在单独的消息存储中。
它只会备份rabbitmq users, vhosts, queues, exchanges, and bindings
。
备份文件是RabbitMQ元数据的JSON表示。
我们将使用备份 rabbitmqadmin
命令行工具。
管理插件用命令行工具rabbitmqadmin船舶。
我们需要启用管理插件:
rabbitmq-plugins enable rabbitmq_management
此插件用于执行与基于Web的UI相同的操作,并且可以更方便自动化任务。
下载rabbitmqadmin.
启用管理插件后,下载 rabbitmqadmin
Python命令行工具与HTTP API交互。
它可以从任何具有管理插件的RabbitMQ节点下载
http://{node-hostname}:15672/cli/
下载后,将文件可执行并移动到 /usr/local/bin
目录:
chmod +x rabbitmqadmin sudo mv rabbitmqadmin /usr/local/bin
要备份rabbitmq配置,请使用命令:
rabbitmqadmin export <backup-file-name>
例子:
$rabbitmqadmin export rabbitmq-backup-config.json Exported definitions for localhost to "rabbitmq-backup-config.json"
该导出将写入文件 rabbitmq-backup-config.json
。
如何还原RabbitMQ配置备份
如果我们想从备份恢复RabbitMQ配置,请使用命令:
rabbitmqadmin import <JSON backup file >
例子
$rabbitmqadmin import rabbitmq-backup.json Imported definitions for localhost from "rabbitmq-backup.json"
如何备份RabbitMQ数据
RabbitMQ定义和消息存储在位于节点数据目录中的内部数据库中。
要获取目录路径,请对运行RabbitMQ节点运行以下命令:
rabbitmqctl eval 'rabbit_mnesia:dir().'
示例
"/var/lib/rabbitmq/mnesia/Hyman@theitroad"
此目录包含许多文件:
# ls /var/lib/rabbitmq/mnesia/Hyman@theitroad cluster_nodes.config nodes_running_at_shutdown rabbit_durable_route.DCD rabbit_user.DCD schema.DAT DECISION_TAB.LOG rabbit_durable_exchange.DCD rabbit_runtime_parameters.DCD rabbit_user_permission.DCD schema_version LATEST.LOG rabbit_durable_exchange.DCL rabbit_serial rabbit_vhost.DCD msg_stores rabbit_durable_queue.DCD rabbit_topic_permission.DCD rabbit_vhost.DCL
在以3.7.0开始的rabbitmq版本中,所有邮件数据都在msg_stores/vhosts目录中组合并存储在每个vhost的子目录中。
每个vhost目录都以哈希命名,并包含vhost名称的.vhost文件,因此可以单独备份特定的vhost的消息集。
要做RabbitMQ定义和消息数据备份,复制或者存档此目录及其内容。
但首先,我们需要停止rabbitmq服务
sudo systemctl stop rabbitmq-server.service
下面的示例将创建一个存档:
tar cvf rabbitmq-backup.tgz /var/lib/rabbitmq/mnesia/Hyman@theitroad
如何恢复rabbitmq数据
要从备份还原,请从备份到数据目录中提取文件。
内部节点数据库在某些记录中存储节点的名称。
如果节点名称更改,必须首先更新数据库以使用以下rabbitmqctl命令反映更改:
rabbitmqctl rename_cluster_node <oldnode> <newnode>
当新节点以备份目录和匹配节点名称开始时,它应该根据需要执行升级步骤并继续启动。