如何备份和还原RabbitMQ数据和配置

时间:2020-02-23 14:38:16  来源:igfitidea点击:

如何对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交互的rabbitmqadminPython命令行工具。可以从启用了管理插件的任何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>

当新节点以备份目录和匹配的节点名称开头时,它应根据需要执行升级步骤并继续引导。