При обновлении операционной системы с Debian 12 (Bookworm) на Debian 13 (Trixie) многие сталкиваются с проблемой: RabbitMQ перестает запускаться. Это происходит из-за того, что RabbitMQ «перепрыгивает» через несколько мажорных версий (с 3.10 сразу на 4.0), а критически важные feature flags не успевают включиться.
В этой статье я расскажу, как успешно выполнить обновление, сохранив все данные и настройки.
Типичные ошибки
1. Ошибка с feature flags
Feature flags: `stream_filtering`: required feature flag not enabled!
It must be enabled before upgrading RabbitMQ.
Error during startup: {error,failed_to_initialize_feature_flags_registry}
Причина: RabbitMQ 4.0 требует feature flag stream_filtering, который отсутствовал в старой версии.
2. Ошибка зависимостей при установке
rabbitmq-server depends on erlang-base (>= 1:26.0) Version of erlang-base on system is 1:25.2.3+dfsg-1+deb12u4
Причина: RabbitMQ 3.13+ требует Erlang 26+, а в Debian 12 доступен только Erlang 25.
3. Служба не запускается после обновления
● rabbitmq-server.service - RabbitMQ Messaging Server
Active: activating (auto-restart) (Result: exit-code)
Process: 1835 ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server (code=exited, status=1/FAILURE)
Пошаговое решение
Шаг 1: Экспорт данных (на Debian 12)
Перед удалением RabbitMQ обязательно сохраните все настройки:
# Экспорт определений (очереди, обменники, пользователи, права) rabbitmqctl export_definitions /root/rabbitmq-definitions.json # Резервная копия данных Mnesia (на всякий случай) cp -r /var/lib/rabbitmq/mnesia /root/rabbitmq-mnesia-backup # Сохраняем список пользователей и очередей rabbitmqctl list_users > /root/rabbitmq-users.txt rabbitmqctl list_queues > /root/rabbitmq-queues.txt
Если экспорт не происходит из-за ошибки прав доступа, просто укажите /tmp/rabbitmq-definitions.json в качестве пути. Затем переместите файл в нужную директорию (например /root), чтобы он не удалился после перезагрузки.
Шаг 2: Удаление RabbitMQ
Удаляем RabbitMQ с очисткой конфигурации (данные уже сохранены):
# Останавливаем службу systemctl stop rabbitmq-server # Удаляем пакет с очисткой apt-get remove --purge rabbitmq-server # Удаляем оставшиеся файлы (опционально) rm -rf /etc/rabbitmq rm -rf /var/lib/rabbitmq
Шаг 3: Обновление Debian 12 до Debian 13
Теперь можно безопасно обновить операционную систему:
# Обновляем все пакеты apt-get update apt-get upgrade -y apt-get dist-upgrade -y # Устанавливаем инструмент обновления apt-get install update-manager-core -y # Запускаем обновление do-release-upgrade
Здесь более подробная инструкция по обновлению Debian.
После завершения обновления перезагрузите сервер.
Шаг 4: Установка RabbitMQ на Debian 13
В Debian 13 доступен Erlang 27 и RabbitMQ 4.0 из официальных репозиториев:
# Устанавливаем RabbitMQ apt-get update apt-get install rabbitmq-server -y # Включаем плагин управления rabbitmq-plugins enable rabbitmq_management # Проверяем версию rabbitmqctl version # Должно показать 4.0.x # Проверяем Erlang erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell # Должно показать "27"
Шаг 5: Восстановление данных
Импортируем сохраненные настройки:
# Останавливаем службу перед импортом systemctl stop rabbitmq-server # Если вы сохраняли Mnesia, можно восстановить её # (но импорт JSON надежнее при переходе между мажорными версиями) # cp -r /root/rabbitmq-mnesia-backup/* /var/lib/rabbitmq/mnesia/ # chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia # Импортируем определения из JSON rabbitmqctl import_definitions /root/rabbitmq-definitions.json # Запускаем службу systemctl start rabbitmq-server
Шаг 6: Настройка пользователя
Если пользователь admin не восстановился, создайте его заново:
# Создаем пользователя rabbitmqctl add_user admin ваш_пароль # Даем права администратора rabbitmqctl set_user_tags admin administrator # Даем полный доступ к виртуальному хосту "/" rabbitmqctl set_permissions -p / admin ".*" ".*" ".* # Проверяем пользователей rabbitmqctl list_users
Шаг 7: Проверка веб-интерфейса
Откройте в браузере http://ваш_сервер:15672 и войдите под пользователем admin или guest (только с localhost, пароль по умолчанию — guest).
Возможные проблемы и их решение
Проблема: Не удается установить RabbitMQ из-за ошибок зависимостей
Решение: В Debian 13 эта проблема не возникает, так как Erlang 27 доступен в официальных репозиториях.
Проблема: Веб-интерфейс не открывается
# Включаем плагин управления rabbitmq-plugins enable rabbitmq_management # Перезапускаем сервер systemctl restart rabbitmq-server # Проверяем порт netstat -tlnp | grep 15672
Проблема: Ошибка при импорте определений
Если импорт из JSON не работает, попробуйте восстановить данные из резервной копии Mnesia:
systemctl stop rabbitmq-server rm -rf /var/lib/rabbitmq/mnesia cp -r /root/rabbitmq-mnesia-backup /var/lib/rabbitmq/mnesia chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia systemctl start rabbitmq-server
Проблема: Не удается войти с паролем admin
Сбросьте пароль:
rabbitmqctl change_password admin новый_пароль
Краткий итог
- Сначала экспортируйте данные — это самый надежный способ сохранить настройки при переходе между мажорными версиями.
- Удалите RabbitMQ перед обновлением — это предотвращает конфликты с feature flags.
- Обновляйте Debian — после обновления Erlang 27 будет доступен из официальных репозиториев.
- Установите RabbitMQ заново — теперь все зависимости удовлетворены.
- Импортируйте определения — восстановите очереди, обменники и пользователей.
- Проверьте веб-интерфейс — убедитесь, что все работает.
Этот подход гарантированно работает и позволяет обновить систему без потери данных. Главное — не забыть сделать экспорт определений перед удалением RabbitMQ.
Полезные команды для проверки
# Проверка версии RabbitMQ rabbitmqctl version # Проверка версии Erlang erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell # Проверка статуса службы systemctl status rabbitmq-server # Просмотр логов journalctl -u rabbitmq-server -n 50 # Проверка feature flags rabbitmqctl list_feature_flags # Проверка порта веб-интерфейса netstat -tlnp | grep 15672

