Как сделать резервную копию и восстановить данные и конфигурации RabbitMQ

Как сделать резервную копию и восстановить данные и конфигурации RabbitMQ

 

Недавно мы рассказали об установке RabbitMQ на CentOS 7, CentOS 6, Fedora и Ubuntu. 

В этом посте я хотел бы, чтобы мы посмотрели, как выполнить резервное копирование конфигураций и данных RabbitMQ. Это также будет включать информацию о восстановлении резервной копии RabbitMQ в новом развертывании.

Получить статус кластера

$ rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,['[email protected]']}]},
{running_nodes,['[email protected]']},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{'[email protected]',[]}]}]

Как сделать резервную копию конфигураций RabbitMQ

Обратите внимание, что эта резервная копия не включает сообщения, поскольку они хранятся в отдельном хранилище сообщений. Это будет только резервная копия RabbitMQ users, vhosts, queues, exchanges, and bindings. Файл резервной копии представляет собой JSON-представление метаданных RabbitMQ. Мы сделаем резервную копию с помощью rabbitmqadminинструмента командной строки.

Плагин управления  поставляется с инструментом командной строки  rabbitmqadmin. Вам необходимо включить плагин управления:

rabbitmq-plugins enable rabbitmq_management

Этот плагин используется для выполнения тех же действий, что и веб-интерфейс, и может быть более удобным для задач автоматизации.

Скачать 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/[email protected]"

Этот каталог содержит много файлов:

# ls /var/lib/rabbitmq/mnesia/[email protected]
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

В версиях RabbitMQ, начиная с 3.7.0, все данные сообщений объединяются в каталоге 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/[email protected]

Как восстановить данные RabbitMQ

Чтобы восстановить из резервной копии, извлеките файлы из резервной копии в каталог данных.

Внутренняя база данных узла хранит имя узла в определенных записях. В случае изменения имени узла сначала необходимо обновить базу данных, чтобы отразить это изменение с помощью следующей команды rabbitmqctl:

rabbitmqctl rename_cluster_node <oldnode> <newnode>

Когда новый узел начинается с резервной копии каталога и соответствующего имени узла, он должен выполнить необходимые шаги по обновлению и перейти к загрузке.

Прокрутить вверх