Почему RabbitMQ продолжает ломаться от поврежденного файла журнала persister? - PullRequest
4 голосов
/ 04 декабря 2011

Я использую Сельдерей в приложении Django с RabbitMQ в качестве посредника сообщений.Тем не менее, RabbitMQ продолжает рушиться так.Во-первых, это ошибка, которую я получаю от Джанго.Трассировка в основном не важна, потому что я знаю, что является причиной ошибки, как вы увидите.

Traceback (most recent call last):

  ...

  File "/usr/local/lib/python2.6/dist-packages/amqplib/client_0_8/transport.py", line 85, in __init__
    raise socket.error, msg

error: [Errno 111] Connection refused

Я знаю, что это связано с поврежденным файлом rabbit_persister.log .Это связано с тем, что после того, как я убил все процессы, связанные с RabbitMQ, я запускаю «sudo rabbitmq-server start», чтобы получить следующий сбой:

...

starting queue recovery                                               ...done
starting persister                                                    ...BOOT ERROR: FAILED
Reason: {{badmatch,{error,{{{badmatch,eof},
                            [{rabbit_persister,internal_load_snapshot,2},
                             {rabbit_persister,init,1},
                             {gen_server,init_it,6},
                             {proc_lib,init_p_do_apply,3}]},
                           {child,undefined,rabbit_persister,
                                  {rabbit_persister,start_link,[]},
                                  transient,100,worker,
                                  [rabbit_persister]}}}},
         [{rabbit_sup,start_child,2},
          {rabbit,'-run_boot_step/1-lc$^1/1-1-',1},
          {rabbit,run_boot_step,1},
          {rabbit,'-start/2-lc$^0/1-0-',1},
          {rabbit,start,2},
          {application_master,start_it_old,4}]}
Erlang has closed

Мое текущее исправление: Каждый раз, когда это происходитЯ переименую соответствующий файл rabbit_persister.log во что-то другое (rabbit_persister.log.bak) и могу успешно перезапустить RabbitMQ.Но проблема продолжает возникать, и я не могу сказать, почему.Есть идеи?

Кроме того, как заявление об отказе от ответственности, я не имею опыта работы с Erlang;Я использую только RabbitMQ, потому что это брокер, предпочитаемый Celery.

Заранее спасибо, эта проблема действительно раздражает меня, потому что я продолжаю делать одно и то же исправление снова и снова.

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

Персистером является внутренняя база данных сообщений RabbitMQ.Этот «журнал», вероятно, похож на журнал базы данных, и удаление его приведет к потере сообщений.Я предполагаю, что это повреждается нечистыми остановками брокера, но это немного не относится к делу.

Интересно, что вы получаете ошибку в модуле rabbit_persister.Последняя версия RabbitMQ с этим файлом - 2.2.0, поэтому я настоятельно рекомендую вам обновить ее.Лучшая версия всегда самая последняя, ​​которую вы можете получить, используя хранилище RabbitMQ APT .В частности, персистер видел довольно большое количество исправлений в версиях после 2.2.0, поэтому есть большая вероятность того, что ваша проблема уже решена.

Если вы все еще видите проблему после обновления, вам следуетсообщите об этом в RabbitMQ Обсудить список рассылки.Разработчики (как из Celery, так и из RabbitMQ) решают все проблемы, о которых там сообщается.

0 голосов
/ 29 января 2012

A.Потому что вы используете старую версию RabbitMQ ранее, чем 2.7.1 B. Потому что у RabbitMQ недостаточно оперативной памяти.Вам нужно запустить RabbitMQ на сервере в одиночку и выделить этому серверу достаточно оперативной памяти, чтобы объем оперативной памяти в 2,5 раза превышал максимально возможный размер вашего постоянного журнала сообщений.

Возможно, вы сможете исправить это без какого-либо программного обеспеченияизменения, просто добавив больше оперативной памяти и убив другие службы на коробке.

Еще один подход к этому - создать свой собственный RabbitMQ из исходного кода и включить расширение toke, которое сохраняет сообщения с помощью Tokyo Cabinet.Убедитесь, что вы используете локальный жесткий диск, а не разделы NFS, потому что в Tokyo Cabinet есть проблемы с повреждением NFS.И, конечно, для этого используйте версию 2.7.1.В зависимости от содержимого вашего сообщения, вы также можете воспользоваться настройками сжатия Tokyo Cabinets, чтобы уменьшить активность чтения / записи сохраняемых сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...