如何备份和恢复RabbitMQ数据和配置

时间:2020-02-23 14:30:25  来源:igfitidea点击:

我们最近涵盖了在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.

启用管理插件后,下载 rabbitmqadminPython命令行工具与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>

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