如何备份和还原RabbitMQ数据和配置
如何对RabbitMQ配置和数据执行备份。
获取集群状态
$rabbitmqctl cluster_status Cluster status of node theitroad@localhost ... [{nodes,[{disc,['theitroad@localhost']}]}, {running_nodes,['theitroad@localhost']}, {cluster_name,<<"theitroad@localhost">>}, {partitions,[]}, {alarms,[{'theitroad@localhost',[]}]}]
如何备份RabbitMQ配置
请注意,此备份不包括消息,因为它们存储在单独的消息存储中。它只会备份用户,虚拟主机,队列,交换和绑定的RabbitMQ。备份文件是RabbitMQ元数据的JSON表示形式。我们将使用" rabbitmqadmin"命令行工具进行备份。
使用命令行工具rabbitmqadmin的管理插件。我们需要启用管理插件:
rabbitmq-plugins enable rabbitmq_management
此插件用于执行一些与基于Web的UI相同的操作,对于自动化任务而言可能更方便。
下载rabbitmqadmin
启用管理插件后,请下载与HTTP API交互的rabbitmqadmin
Python命令行工具。可以从启用了管理插件的任何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/theitroad@localhost"
此目录包含许多文件:
# ls /var/lib/rabbitmq/mnesia/theitroad@localhost 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文件,因此可以单独备份特定的虚拟主机消息集。
要备份RabbitMQ定义和消息数据,请复制或者存档此目录及其内容。但是首先,我们需要停止RabbitMQ服务
sudo systemctl stop rabbitmq-server.service
以下示例将创建一个存档:
tar cvf rabbitmq-backup.tgz /var/lib/rabbitmq/mnesia/theitroad@localhost
如何还原RabbitMQ数据
要从备份还原,请将文件从备份提取到数据目录。
内部节点数据库将节点名称存储在某些记录中。如果节点名称更改,则必须首先使用以下rabbitmqctl命令更新数据库以反映更改:
rabbitmqctl rename_cluster_node <oldnode> <newnode>
当新节点以备份目录和匹配的节点名称开头时,它应根据需要执行升级步骤并继续引导。