Как зарезервировать Docker-контейнер RabbitMQ (2026)

Безопасное резервирование RabbitMQ сводится к одному правилу: дампить, а не копировать. `rabbitmqctl export_definitions /tmp/definitions.json` даёт согласованный, восстановимый дамп из работающего контейнера, который restic затем шифрует во внешнее хранилище. экспорт определений захватывает всю топологию брокера в JSON — долговечную часть RabbitMQ, — тогда как живое хранилище сообщений Mnesia под нагрузкой не согласовано на момент времени. Всё, что копирует /var/lib/rabbitmq/mnesia вживую, рискует невосстановимой копией.

Обнаружение

Что находит Dockstash

Найденные переменные окруженияRABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_DEFAULT_VHOST
Порт по умолчанию5672
Живые пути данных (никогда не копируются вживую)/var/lib/rabbitmq/mnesia
Примеры образовrabbitmq:3.13-management, rabbitmq:3-management, rabbitmq
Шаг за шагом

Резервируем RabbitMQ с Dockstash, шаг за шагом

  1. Создайте аккаунт Dockstash и откройте панель

    Зарегистрируйтесь бесплатно на app.dockstash.com/register. Одноразовый мастер настройки спросит ваш VPS для хранения (машину, где будут лежать зашифрованные резервные копии) и сгенерирует пароль шифрования — сразу сохраните его в менеджере паролей: он показывается ровно один раз.

  2. Добавьте Docker-проект, в котором работает RabbitMQ

    На экране Projects Dockstash автоматически находит каждую папку Compose-проекта на сервере (по умолчанию под /var/www). Выберите проект с вашим сервисом RabbitMQ. Пока ничего не резервируется — вы лишь указываете Dockstash, где живёт проект.

  3. Проверьте, что RabbitMQ распознан

    Откройте проект и вкладку Plan. Dockstash читает docker-compose.yml, распознаёт образ rabbitmq и добавляет слой, экспортирующий определения брокера — плюс имя контейнера и найденные переменные (RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_DEFAULT_VHOST). Файлы, базы и конфиги прокси можно переключать перед сохранением.

  4. Опционально: проверьте экспорт вручную

    Если хотите доказательство до автоматизации, выполните rabbitmqctl export_definitions в контейнере. Он запишет JSON со всей топологией брокера — vhosts, обменники, очереди, привязки, пользователи и политики. Откройте его: вы узнаете каждую очередь вашего приложения; этот JSON и резервируется.

    docker exec <rabbitmq-container> rabbitmqctl export_definitions /tmp/definitions.json
  5. Подтвердите место хранения

    Резервные копии хранятся как зашифрованные снимки restic на вашем собственном VPS для хранения, по SSH. Если вы прошли мастер настройки, всё уже настроено; хост, пользователя, порт или SSH-ключ можно изменить в любой момент в Settings → Storage.

  6. Настройте расписание резервного копирования

    Во вкладке Schedule выберите ежедневно, еженедельно или собственный cron (валидируется при вводе). Для большинства брокеров ежедневного хватает с запасом — топология меняется при деплое, а не ежеминутно. Добавьте еженедельный prune с политикой хранения.

  7. Запустите первую копию сейчас

    Нажмите Backup Now. Dockstash выполнит rabbitmqctl export_definitions в работающем контейнере и передаст JSON restic вместе с файлами проекта — живой вывод смотрите в панели логов. Определения экспортируются чисто, пока брокер обслуживает трафик; ничего не останавливается и не блокируется.

  8. Убедитесь, что снимок существует

    По завершении запуска карточка проекта показывает новое время последней копии, число снимков и размер репозитория. Откройте экран Snapshots: точка восстановления появится на таймлайне — это ваше доказательство, что копия дошла до внешнего хранилища.

Команды

Команда дампа

rabbitmqctl export_definitions /tmp/definitions.json

Команда восстановления

rabbitmqctl import_definitions /tmp/definitions.json

экспорт определений захватывает всю топологию брокера в JSON — долговечную часть RabbitMQ, — тогда как живое хранилище сообщений Mnesia под нагрузкой не согласовано на момент времени.

Восстановить и проверить

Восстановите копию RabbitMQ и докажите, что она работает

Резервная копия RabbitMQ становится настоящей только после восстановления. Восстановления Dockstash по умолчанию не перезаписывают живой брокер — сначала в новое место, проверка топологии, затем осознанное продвижение. Помните, что вы восстанавливаете: JSON определений отстраивает топологию, а не сообщения, лежавшие в очередях.

  1. Выберите точку восстановления

    Откройте Snapshots, выберите проект и просмотрите таймлайн. Каждая строка содержит экспортированный JSON определений — полную топологию брокера на тот момент — плюс файлы проекта того же запуска.

  2. Восстановите в новое место

    Нажмите Restore и оставьте режим по умолчанию «Restore to new location». Введите имя проекта для подтверждения — осознанное действие с набором текста. Дамп и файлы попадут в выбранный целевой путь, не трогая живой проект.

  3. Проверьте восстановленную топологию

    Выполните rabbitmqctl list_queues на тестовом брокере: он выведет каждую очередь с числом сообщений. Каждая очередь приложения должна появиться (счётчики будут нулевыми — сообщения в копию не входят). Проверьте обменники, привязки, пользователей и политики так же или через management-интерфейс.

    docker exec <rabbitmq-container> rabbitmqctl list_queues
  4. Продвигайте, когда всё проверено

    Когда восстановленные данные проверены, переключите на них приложение (или повторите восстановление в режиме «Overwrite existing» — явный опт-ин). Ещё лучше: пусть еженедельная тренировка восстановления делает это доказательство автоматически, чтобы восстановление никогда не было вашей первой репетицией.

Подводные камни

Каких ловушек избегать

  • Резервируйте определения брокера (топологию) через export_definitions — это долговечная, восстановимая часть RabbitMQ.
  • Хранилище сообщений Mnesia держит сообщения в полёте и небезопасно для живого копирования; относитесь к персистентным сообщениям как к преходящим и полагайтесь на продюсеров/консьюмеров.
  • Восстановление определений воссоздаёт топологию, но не сообщения, лежавшие в очередях на момент копии.
Устранение неполадок

Типичные проблемы резервирования RabbitMQ

Симптом
Восстановление «сработало», но все очереди пусты.
Причина
Определения и сообщения — разные вещи. export_definitions захватывает топологию — vhosts, обменники, очереди, привязки, пользователей, политики — но никогда тела сообщений, стоявших в очередях на момент копии.
Решение
Это ожидаемо. Относитесь к сообщениям в очередях как к преходящим: продюсеры перепубликуют, консьюмеры терпят повтор. Сообщение, обязанное пережить потерю брокера, хранится в базе данных, а не в очереди.
Симптом
Брокер, запущенный из копии каталога /var/lib/rabbitmq/mnesia, падает или не стартует.
Причина
Mnesia пишется непрерывно, пока брокер работает: живая копия внутренне несогласована — а хранилище к тому же привязано к имени узла и ломается на хосте с другим hostname.
Решение
Не копируйте Mnesia как резервную копию. Экспортируйте определения и импортируйте их в свежий брокер; это поддерживаемый, восстановимый путь.
Симптом
import_definitions в работающий брокер даёт ошибки или смесь старой и новой топологии.
Причина
Импорт сливается с существующим — конфликтующие аргументы очередей, существующие пользователи или политики сталкиваются с записями JSON, а не заменяются ими.
Решение
Импортируйте в свежий брокер, когда возможно. Если приходится в работающий: ждите слияния, а не сброса — сперва удалите конфликтующие сущности, затем проверьте результат через rabbitmqctl list_queues и management-интерфейс.

Сделайте это в один клик с Dockstash

Dockstash выполняет ровно тот дамп, что выше, передаёт его restic вовне и автоматически проверяет восстановление тренировкой — без скриптов на поддержке.

Последнее обновление: July 2026

Часто задаваемые вопросы

Какую часть RabbitMQ резервировать?

Определения: vhosts, обменники, очереди, привязки, пользователей и политики. Их экспорт в JSON захватывает всю топологию брокера — именно то, что нужно для восстановления после потери.

Можно ли зарезервировать сообщения, стоящие в очередях?

Ненадёжно, пока брокер работает. Хранилище Mnesia под нагрузкой не согласовано на момент времени, а сообщения задуманы преходящими. Стройте консьюмеров, терпящих повтор, вместо надежды на копию сообщений.

Как восстановить брокер RabbitMQ?

Поднимите свежий брокер и выполните rabbitmqctl import_definitions с экспортированным JSON. Вся топология — обменники, очереди, привязки, пользователи, политики — воссоздаётся.

Копия /var/lib/rabbitmq/mnesia — валидная резервная копия?

Нет. Mnesia пишется непрерывно, живая копия несогласована. Вместо этого экспортируйте определения; это поддерживаемый путь.

Как часто резервировать RabbitMQ?

Ежедневного хватает с запасом — определения меняются только при деплое новых очередей, пользователей или политик. На Free копии вручную (Backup Now); Pro — до ежечасных, Business — любой cron.

Где на самом деле живут резервные копии?

На вашем собственном VPS для хранения, как зашифрованные снимки restic, отправляемые по SSH. Dockstash никогда не держит ваши данные в чужом облаке — вы указываете машину под вашим контролем, а репозиторий зашифрован паролем, который есть только у вас.

Как узнать, что копия восстановима, без ручного восстановления?

Запланируйте тренировку восстановления. Dockstash восстанавливает последний снимок в изолированную рабочую область, сверяет каждый файл по байтам с источником и проверяет восстановленный дамп — затем ставит на проект значок «прошло/провалено». Еженедельная тренировка означает всегда свежее доказательство.