Восстановление соединения серверного модуля SIGUR с RabbitMQ после восстановления Erlang Runtime

После перезагрузки сервера серверный модуль SIGUR не запустился. При попытке запустить его вручную появлялась ошибка:

Не удается присоединиться к запущенному серверному модулю.
Повторить попытку соединения?

Ошибка запуска RabbitMQ

При проверке выяснилось, что не запускается служба RabbitMQ. В журнале RabbitMQ была ошибка:

cannot get bootfile,start_sasl.boot

После этого начали разбираться с причиной и обнаружили, что на сервере отсутствует Erlang Runtime. Как выяснилось позже, его случайно удалили примерно за две недели до этого, но проблема проявилась только после перезагрузки.

Erlang устанавливается вместе с RabbitMQ при установке серверной части SIGUR. После того как нашли ошибку RabbitMQ и отсутствие Erlang, решили попробовать обновить SIGUR до новой версии в расчёте на то, что установщик восстановит недостающие компоненты.

Обновление прошло, но проблему не исправило. В каталоге:

C:\Program Files (x86)\SIGUR access management\web\broker\erl

по-прежнему отсутствовала часть файлов, необходимых для запуска Erlang и RabbitMQ.

После ручного восстановления полного Erlang Runtime служба RabbitMQ начала запускаться нормально.

Ошибка аутентификации RabbitMQ

Но серверный модуль SIGUR всё ещё не мог подключиться к брокеру. Теперь в журнале RabbitMQ появилась другая ошибка:

PLAIN login refused: user 'sigur' - invalid credentials

Причина оказалась связана с предыдущим обновлением. Установщик SIGUR успел сгенерировать новый пароль для RabbitMQ и записать его в конфигурационные файлы сервисов. Но применить этот же пароль к пользователю sigur в самом RabbitMQ не смог, потому что в момент обновления брокер не работал из-за отсутствующего Erlang Runtime.

В результате сервисы SIGUR уже использовали новый пароль, а в RabbitMQ он не был установлен.

Получение актуального пароля

В конфигурационных файлах SIGUR пароль RabbitMQ хранится не в открытом виде, а в зашифрованном значении:

message.broker.password=$...

Для работы с такими значениями в составе SIGUR есть штатная утилита:

web\utils\password-utils.jar

При разборе утилиты выяснилось, что она умеет расшифровывать значения из конфигурации. Из актуального message.broker.password был получен исходный пароль, который сервисы SIGUR используют для подключения к RabbitMQ.

Синхронизация пароля

После этого пароль пользователя sigur в RabbitMQ синхронизировали:

rabbitmqctl change_password sigur <актуальный_пароль>

Проверка аутентификации прошла успешно:

Authenticating user "sigur" ...
Success

В журнале RabbitMQ после этого появились нормальные подключения сервисов:

user 'sigur' authenticated and granted access to vhost '/'

Итог

Проблема состояла из двух частей.

  1. После перезагрузки проявилось отсутствие Erlang Runtime, из-за чего перестал запускаться RabbitMQ.
  2. Обновление SIGUR перезаписало пароль RabbitMQ в конфигурации сервисов, но не смогло применить его к самому брокеру.

После восстановления Erlang Runtime и синхронизации пароля серверные компоненты SIGUR снова начали работать нормально.

Как восстановить работу SIGUR после удаления Erlang Runtime, отказа RabbitMQ и рассинхронизации пароля пользователя sigur.

ЕСТЬ ЗАДАЧА?

Можно начать с её обсуждения.

Связаться