Как обновить RabbitMQ при переходе с Debian 12 на 13 (проблема feature flags)

Как обновить RabbitMQ при переходе с Debian 12 на 13 (проблема feature flags)

При обновлении операционной системы с 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

Подробнее про feature flags


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Другие проекты SKILX


UNLIX © Все права защищены 2015 - 2026 | SKILX

Копирование материалов с сайта UNLIX без указания полной ссылки на источник ЗАПРЕЩЕНО!