Повреждён файл журнала кворумных очередей RabbitMQ
«CRASH REPORT ... exited with reason: no case clause matching {ok,<<0,0,0,0,0>>} in ra_log_wal:open_existing/1» и «WAL: recovering» в журнале RabbitMQ: после аварийного завершения повреждён файл WAL кворумных очередей, и узел не запускается. Решение по справке вендора Directum RX.
Что это значит
Кворумные очереди RabbitMQ пишут изменения в журнал WAL. При запуске узел восстанавливает его (в журнале строка WAL: recovering ["<файл>.wal"]). Если сервер был аварийно остановлен и конец файла остался недописанным (нули вместо данных), восстановление падает с аварийным отчётом no case clause matching {ok,<<0,0,0,0,0>>} in ra_log_wal:open_existing/1, и супервизор ra_log_wal_sup не может запустить журнал. Узел RabbitMQ не стартует.
Случай описан в справке вендора в разделе об устранении неисправностей Directum Ario, но относится к RabbitMQ вообще.
Как проверить
Найти в журнале RabbitMQ строку WAL: recovering перед аварийным отчётом: в ней имя проблемного файла.
Что сделать
- Остановить RabbitMQ и сохранить копию каталога данных узла.
- Удалить файл WAL из строки
WAL: recoveringи запустить RabbitMQ. - Учитывать, что сообщения, которые были только в этом файле, теряются. В кластере кворумные очереди догонят данные с других узлов.
- Разобраться, почему узел останавливался аварийно: питание, OOM, принудительная перезагрузка.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать