RabbitMQ: использование диска и перенос базы данных

By | 10/22/2018
 

Около 9 вечера мониторинг сообщил, что на одном из production-серверов забивается место. Причём забивалось оно очень быстро, и за пару часов “скушалось” 3 гига из 8 доступных на root-разделе.

Забивался диск в каталоге базы RabbitMQ – /var/lib/rabbitmq/mnesia.

Быстрый фикс – перенести его базу на отдельный диск.

Создаём новый каталог:

root@bttrm-prod-console:/home/admin# cd /data/ && mkdir rabbitdb

Обновляем конфиг реббита /etc/rabbitmq/rabbitmq-env.conf – задаём переменную RABBITMQ_MNESIA_BASE:

...
RABBITMQ_MNESIA_BASE=/data/rabbitdb

Останавливаем RabbitMQ:

root@bttrm-prod-console:/data# systemctl stop rabbitmq-server

Копируем данные из старого каталога и меняем владельца:

root@bttrm-prod-console:/data# cp -r /var/lib/rabbitmq/mnesia/* /data/rabbitdb/
root@bttrm-prod-console:/data# chown -R rabbitmq:rabbitmq rabbitdb/

Запускаем его:

root@bttrm-prod-console:/data# systemctl start rabbitmq-server

Проверяем статус:

root@bttrm-prod-console:/data# rabbitmqctl status
Status of node 'rabbit@bttrm-prod-console' ...
[{pid,30368},
{running_applications,
[{rabbitmq_management,"RabbitMQ Management Console","3.6.6"},
{rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.6"},
{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.6"},
...

Доступное ему место и Database directory path:

84 гига – окей.


На утром начали проверять – почему же RabbitMQ так засрал диск: оказалось, что в очередях скопилось 2 миллиона сообщений, которые не читались, потому что задачи supervisor-а, которые должны получать их, не были запущены.

Почитать по теме – RabbitMQ, backing stores, databases and disks.

Просмотреть список сообщений в очередях можно с помощью rabbitadmin:

root@bttrm-prod-console:/home/admin# rabbitmqadmin list queues -u adminuser -p p@ssw0rd
+------------------------+----------+
|          name          | messages |
+------------------------+----------+
| purchases              | 395      |
...

Ссылки по теме

Chaging RabbitMQ mnesia database location