This guide covers backup and restore procedures for various types of data a RabbitMQ node may contain.
RabbitMQ backups are a JSON representation of your broker’s metadata. This includes users, vhosts, queues, exchanges, and bindings. Backups are made against a running cluster using the export
command provided by the RabbitMQ management plugin. Messages are not included in the backup.
Related Content
- How to install Erlang on ArchLinux
- How to install Erlang on FreeBSD 13
- How to install RabbitMQ in FreeBSD 13
- How to install Erlang on Ubuntu 20.04
- How to install Erlang on OpenSUSE Leap 15.3
- How to install RabbitMQ in OpenSUSE Leap 15.3
- How to install Erlang on Fedora 35
- How to install RabbitMQ in Fedora 35
- How to install Erlang on Rocky Linux/Alma Linux/CentOS 8
- How To Install and Enable EPEL Repository on Rocky Linux/Centos 8
RabbitMQ Cluster Status
To get the cluster status
<meta charset="utf-8">sudo rabbitmqctl cluster_status
Output on my server
$ sudo rabbitmqctl cluster_status
/usr/lib/erlang/erts-12.1.5/bin/beam.smp: /usr/lib/libncursesw.so.6: no version information available (required by /usr/lib/erlang/erts-12.1.5/bin/beam.smp)
Cluster status of node rabbit@ip-10-2-40-103 ...
Basics
Cluster name: rabbit@ip-10-2-40-103
Disk Nodes
rabbit@ip-10-2-40-103
Running Nodes
rabbit@ip-10-2-40-103
Versions
rabbit@ip-10-2-40-103: RabbitMQ 3.8.22 on Erlang 24.1.7
Maintenance status
Node: rabbit@ip-10-2-40-103, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@ip-10-2-40-103, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@ip-10-2-40-103, interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@ip-10-2-40-103, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Feature flags
Flag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
Downloading rabbitmqadmin
The rabbitmqadmin command line tool will be used for backup and restore.
The management plugin ships with a command line tool **rabbitmqadmin. **You need to enable the management plugin:
sudo rabbitmq-plugins enable rabbitmq_management
My output
~> sudo rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
Plugin configuration unchanged.
This plugin is used to perform some of the same actions as the Web-based UI, and which may be more convenient for automation tasks.
Once you enable the management plugin, download rabbitmqadmin
Python command line tool that interacts with the HTTP API. It can be downloaded from any RabbitMQ node that has the management plugin enabled at
http://{node-hostname}:15672/cli/
Once downloaded, make the file executable and move it to /usr/local/bin
directory:
chmod +x rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin
How to Backup RabbitMQ Configurations
RabbitMQ backup doesn’t include Messages since they are stored in a separate message store. It will only backup RabbitMQ users, vhosts, queues, exchanges, and bindings. The backup file is a JSON representation of RabbitMQ metadata.
To backup RabbitMQ configurations, use the command:
rabbitmqadmin export <backup-file-name>
Example:
$ rabbitmqadmin export rabbitmq-backup-config.json Exported definitions for localhost to "rabbitmq-backup-config.json"
The export will be written to filerabbitmq-backup-config.json
.
How to Restore RabbitMQ Configurations backup
To restore your RabbitMQ configurations from a backup, use the command:
rabbitmqadmin import <JSON backup file >
Example
$ rabbitmqadmin import rabbitmq-backup-config.json Imported definitions for localhost from "rabbitmq-backup.json"
How to Backup RabbitMQ Data
RabbitMQ Definitions and Messages are stored in an internal database located in the node’s data directory. To get the directory path, run the following command against a running RabbitMQ node:
sudo rabbitmqctl eval 'rabbit_mnesia:dir().'
Sample output:
$ sudo rabbitmqctl eval 'rabbit_mnesia:dir().' "/var/lib/rabbitmq/mnesia/rabbit@ip-10-2-40-103"
This directory contains many files:
# ls /var/lib/rabbitmq/mnesia/rabbit@ip-10-2-40-103 cluster_nodes.config msg_stores rabbit_durable_exchange.DCD rabbit_durable_queue.DCL rabbit_runtime_parameters.DCL rabbit_user.DCD rabbit_vhost.DCD DECISION_TAB.LOG nodes_running_at_shutdown rabbit_durable_exchange.DCL rabbit_durable_route.DCD rabbit_serial rabbit_user_permission.DCD schema.DAT LATEST.LOG quorum rabbit_durable_queue.DCD rabbit_runtime_parameters.DCD rabbit_topic_permission.DCD rabbit_user_permission.DCL schema_version
In RabbitMQ versions starting with 3.7.0 all messages data is combined in the msg_stores/vhosts directory and stored in a subdirectory per vhost. Each vhost directory is named with a hash and contains a .vhost file with the vhost name, so a specific vhost’s message set can be backed up separately.
To do RabbitMQ definitions and messages data backup, copy or archive this directory and its contents. But first, you need to stop RabbitMQ service
sudo systemctl stop rabbitmq-server
The example below will create an archive:
tar cvf rabbitmq-backup.tgz /var/lib/rabbitmq/mnesia/<meta charset="utf-8">rabbit@ip-10-2-40-103
How to Restore RabbitMQ Data
To restore from Backup, extract the files from backup to the data directory.
Internal node database stores node’s name in certain records. Should node name change, the database must first be updated to reflect the change using the following rabbitmqctl command:
rabbitmqctl rename_cluster_node <oldnode> <newnode>
When a new node starts with a backed up directory and a matching node name, it should perform the upgrade steps as needed and proceed to boot.
Conclusion
In this guide we explored how to backup and restore rabbitmq data.