Как зарезервировать 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, шаг за шагом
Создайте аккаунт Dockstash и откройте панель
Зарегистрируйтесь бесплатно на app.dockstash.com/register. Одноразовый мастер настройки спросит ваш VPS для хранения (машину, где будут лежать зашифрованные резервные копии) и сгенерирует пароль шифрования — сразу сохраните его в менеджере паролей: он показывается ровно один раз.
Добавьте Docker-проект, в котором работает RabbitMQ
На экране Projects Dockstash автоматически находит каждую папку Compose-проекта на сервере (по умолчанию под /var/www). Выберите проект с вашим сервисом RabbitMQ. Пока ничего не резервируется — вы лишь указываете Dockstash, где живёт проект.
Проверьте, что RabbitMQ распознан
Откройте проект и вкладку Plan. Dockstash читает docker-compose.yml, распознаёт образ rabbitmq и добавляет слой, экспортирующий определения брокера — плюс имя контейнера и найденные переменные (RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_DEFAULT_VHOST). Файлы, базы и конфиги прокси можно переключать перед сохранением.
Опционально: проверьте экспорт вручную
Если хотите доказательство до автоматизации, выполните rabbitmqctl export_definitions в контейнере. Он запишет JSON со всей топологией брокера — vhosts, обменники, очереди, привязки, пользователи и политики. Откройте его: вы узнаете каждую очередь вашего приложения; этот JSON и резервируется.
docker exec <rabbitmq-container> rabbitmqctl export_definitions /tmp/definitions.jsonПодтвердите место хранения
Резервные копии хранятся как зашифрованные снимки restic на вашем собственном VPS для хранения, по SSH. Если вы прошли мастер настройки, всё уже настроено; хост, пользователя, порт или SSH-ключ можно изменить в любой момент в Settings → Storage.
Настройте расписание резервного копирования
Во вкладке Schedule выберите ежедневно, еженедельно или собственный cron (валидируется при вводе). Для большинства брокеров ежедневного хватает с запасом — топология меняется при деплое, а не ежеминутно. Добавьте еженедельный prune с политикой хранения.
Запустите первую копию сейчас
Нажмите Backup Now. Dockstash выполнит rabbitmqctl export_definitions в работающем контейнере и передаст JSON restic вместе с файлами проекта — живой вывод смотрите в панели логов. Определения экспортируются чисто, пока брокер обслуживает трафик; ничего не останавливается и не блокируется.
Убедитесь, что снимок существует
По завершении запуска карточка проекта показывает новое время последней копии, число снимков и размер репозитория. Откройте экран Snapshots: точка восстановления появится на таймлайне — это ваше доказательство, что копия дошла до внешнего хранилища.
Команда дампа
rabbitmqctl export_definitions /tmp/definitions.jsonКоманда восстановления
rabbitmqctl import_definitions /tmp/definitions.jsonэкспорт определений захватывает всю топологию брокера в JSON — долговечную часть RabbitMQ, — тогда как живое хранилище сообщений Mnesia под нагрузкой не согласовано на момент времени.
Восстановите копию RabbitMQ и докажите, что она работает
Резервная копия RabbitMQ становится настоящей только после восстановления. Восстановления Dockstash по умолчанию не перезаписывают живой брокер — сначала в новое место, проверка топологии, затем осознанное продвижение. Помните, что вы восстанавливаете: JSON определений отстраивает топологию, а не сообщения, лежавшие в очередях.
Выберите точку восстановления
Откройте Snapshots, выберите проект и просмотрите таймлайн. Каждая строка содержит экспортированный JSON определений — полную топологию брокера на тот момент — плюс файлы проекта того же запуска.
Восстановите в новое место
Нажмите Restore и оставьте режим по умолчанию «Restore to new location». Введите имя проекта для подтверждения — осознанное действие с набором текста. Дамп и файлы попадут в выбранный целевой путь, не трогая живой проект.
Проверьте восстановленную топологию
Выполните rabbitmqctl list_queues на тестовом брокере: он выведет каждую очередь с числом сообщений. Каждая очередь приложения должна появиться (счётчики будут нулевыми — сообщения в копию не входят). Проверьте обменники, привязки, пользователей и политики так же или через management-интерфейс.
docker exec <rabbitmq-container> rabbitmqctl list_queuesПродвигайте, когда всё проверено
Когда восстановленные данные проверены, переключите на них приложение (или повторите восстановление в режиме «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 восстанавливает последний снимок в изолированную рабочую область, сверяет каждый файл по байтам с источником и проверяет восстановленный дамп — затем ставит на проект значок «прошло/провалено». Еженедельная тренировка означает всегда свежее доказательство.