Как сделать резервную копию и восстановить данные и конфигурации 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>
Когда новый узел начинается с резервной копии каталога и соответствующего имени узла, он должен выполнить необходимые шаги по обновлению и перейти к загрузке.