Makineleri değiştirdikten sonra rabbitmq'i nasıl yeniden başlatırım?


16

EC2'de komisyoncu olarak rabbitmq ile django / kereviz kullanıyorum. Kullandığım makine başarısız oldu, bu yüzden başka bir örnek verdim. Ancak yeni makineye geçiş yaptığımdan beri kereviz işini yapamadım.

DÜZENLEME: Sorunu yanlış tanılamam ihtimaline karşı, aşağıda birçok günlük ekledim. Ama sorun% 85 eminim rabbitmq-server "başlangıç ​​veritabanı" aşamasında başlatılamıyor olmasıdır.

node          : rabbit@ip-10-212-66-181
app descriptor: /usr/lib/rabbitmq/lib/rabbitmq_server-1.7.2/sbin/../ebin/rabbit.app
home dir      : /var/lib/rabbitmq
cookie hash   : 5+uQ077En5bpvle3HJCQMg==
log           : /var/log/rabbitmq/rabbit.log
sasl log      : /var/log/rabbitmq/rabbit-sasl.log
database dir  : /var/lib/rabbitmq/mnesia/rabbit

starting internal event notification system                           ...done
starting logging server                                               ...done
starting database                                                     ...Erlang has closed

Bu sorunun nasıl teşhis edileceği / çözüleceği hakkında herhangi bir fikriniz var mı?

Kereviz çalıştırmaya çalıştığımda şöyle olur:

$ python manage.py celeryd -l info
/opt/bitnami/python/lib/python2.6/site-packages/django_celery-2.4.2-py2.6.egg/djcelery/loaders.py:86: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn("Using settings.DEBUG leads to a memory leak, never "
[2011-12-05 19:40:13,545: WARNING/MainProcess]  

 -------------- celery@ip-10-212-66-181 v2.4.3
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://guest@localhost:5672//
- ** ----------   . loader:      djcelery.loaders.DjangoLoader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 1
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery


[Tasks]
  . tbAnalytics.models.processAnalysis
  . tbCollections.models.processCollection

[2011-12-05 19:40:13,558: INFO/PoolWorker-1] child process calling self.run()
[2011-12-05 19:40:13,562: WARNING/MainProcess] celery@ip-10-212-66-181 has started.
[2011-12-05 19:40:13,564: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 2 seconds...
[2011-12-05 19:40:15,574: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 4 seconds...

Geri izlemek, tavşanmq sunucusu sorun ve özellikle veritabanı gibi görünüyor:

$ sudo rabbitmqctl status
Status of node 'rabbit@ip-10-212-66-181' ...
Error: unable to connect to node 'rabbit@ip-10-212-66-181': nodedown
diagnostics:
- nodes and their ports on ip-10-212-66-181: [{rabbitmqctl14448,38289}]
- current node: 'rabbitmqctl14448@ip-10-212-66-181'
- current node home dir: /var/lib/rabbitmq
- current node cookie hash: 5+uQ077En5bpvle3HJCQMg==

Ancak sunucuyu nasıl yeniden başlatacağımı anlayamadım:

bitnami@ip-10-212-66-181:/var/log/rabbitmq$ sudo rabbitmq-server start_app

+---+   +---+
|   |   |   |
|   |   |   |
|   |   |   |
|   +---+   +-------+
|                   |
| RabbitMQ  +---+   |
|           |   |   |
|   v1.7.2  +---+   |
|                   |
+-------------------+
AMQP 8-0
Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial Technologies LLC., and Rabbit Technologies Ltd.
Licensed under the MPL.  See http://www.rabbitmq.com/

node          : rabbit@ip-10-212-66-181
app descriptor: /usr/lib/rabbitmq/lib/rabbitmq_server-1.7.2/sbin/../ebin/rabbit.app
home dir      : /var/lib/rabbitmq
cookie hash   : 5+uQ077En5bpvle3HJCQMg==
log           : /var/log/rabbitmq/rabbit.log
sasl log      : /var/log/rabbitmq/rabbit-sasl.log
database dir  : /var/lib/rabbitmq/mnesia/rabbit

starting internal event notification system                           ...done
starting logging server                                               ...done
starting database                                                     ...Erlang has closed
{"init terminating in do_boot",{{nocatch,{error,{cannot_start_application,rabbit,{bad_return,{{rabbit,start,[normal,[]]},{'EXIT',{{case_clause,{error,{timeout_waiting_for_tables,[rabbit_user,rabbit_user_permission,rabbit_vhost,rabbit_config,rabbit_listener,rabbit_durable_route,rabbit_route,rabbit_reverse_route,rabbit_durable_exchange,rabbit_exchange,rabbit_durable_queue,rabbit_queue]}}},[{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}]}}}}}}},[{init,start_it,1},{init,start_em,1}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

Ayrıca, alakalı olup olmadığını bilmiyorum, ancak bu işlem arka planda çalışıyor.

$ ps aux | grep rabbit
rabbitmq   714  0.0  0.0   1980   408 ?        S    Dec04   0:00 /usr/lib/erlang/erts-5.7.4/bin/epmd -daemon

Bu tür bir arıza için herhangi bir belge bulamadım. Herhangi bir öneri?

Yanıtlar:


16

Rabbitmq-tartışma listesinden çok iyi yardım aldım:

RabbitMQ'nun kullandığı veritabanı makinenin ana bilgisayar adına bağlıdır, bu nedenle veritabanı dizinini başka bir makineye kopyaladıysanız çalışmaz. Bu durumda, önceki ile aynı ana makine adına sahip bir makine ayarlamanız ve bekleyen iletileri yeni makineye aktarmanız gerekir. Tavşanda önemli bir şey yoksa, / var / lib / rabbitmq içindeki RabbitMQ dosyalarını kaldırarak her şeyi temizleyebilirsiniz.

/ Var / lib / rabbitmq / mnesia / rabbit / içindeki her şeyi sildim ve sorunsuz bir şekilde başladı. Yaşasın!


8

Sorun, RabbitMQ'nun kuyruk ve meta veri yapılandırmasını depolayan Mnesia'nın makinenin ana bilgisayar adını kullanarak bir veritabanı oluşturmasıyla ilgilidir.

Bu tür ana bilgisayar adı tabanlı veritabanı dizinleri aşağıdaki konumlarda bulunur:

<rabbitmq_installdir>/var/lib/rabbitmq/mnesia/rabbit@<yourhostname>
<rabbitmq_installdir>/var/lib/rabbitmq/mnesia/rabbit@<yourhostname>-plugins-expanded

Bu nedenle, yukarıdaki 2 dizini silme ve rabbitmq'i yeniden başlatma seçeneği işe yarayacaktır. Rabbitmq sunucusunu bir ana bilgisayardan diğerine geçirdiyseniz, eski ana bilgisayar adı mnesia veritabanını taşırsınız. Basitçe edecek doğru ana makine adına dizini yeniden adlandırma değil benim testlere göre çalışırlar.

Bu nedenle, kuyruk yapısını , kullanıcı hesaplarını ve RabbitMQ sunucunuz için tanımlanan diğer meta verileri korumanız gerekiyorsa, bu tür meta verilerin bir kopyasını tutmanız gerekir.

Meta veri yapılandırmasını ayıklamanın veya içe aktarmanın iki yolu vardır

  • Yönetim Eklentisi: rabbitmq yönetim eklentisini etkinleştirin ve url sunucusuna gidin: 15672. Ana sayfada, biri dışa ve diğeri tanımı içe aktarmak için alt iki seçenek bulunur

  • Komut Satırı: rabbitmqadmin export rabbit.config (veya dışa aktarma yerine içe aktarma)

Yani, alt satır önerileri:

  • kuyruk yapınızın / kullanıcılar / vb.
  • sunucuları taşırken veya kurtarma işleminden geçerken, eski dizin yapısını silmek için gerekli işlemleri yapın (kuyruğa alınan veriler ilgisizse) ve orijinal yapılandırmayı / meta verileri yeniden içe aktarın.
  • Herhangi bir kalıcı kuyruk verisi alakalı ise, en iyi seçenek kurtarılan ana makinenizin ana bilgisayar adını orijinal olarak yeniden adlandırmak ve iletilerin işlenmesine / ayıklanmasına izin vermektir, o zaman gerekirse ana bilgisayar adını yeniden ayarlayabilirsiniz.

1

Merhaba ben AWS EC2 küçükten büyük örneğe geçiş benzer bir durum vardı ve onlar önemli gecikmeli görev ve kuyruk bilgi bir sürü içerdiği gibi RabbitMq yeni örnek eski çalışan mnesia DB dosyaları ile çalışan ve çalışma tutmak için gerekli. Aşağıda bunu yönetmek için kullandığım geçici çözüm bulunmaktadır. Belki de mnesia klasörünü silmemeyi ve verileri korumamayı sağlayan geçici çözümüm birine yardımcı olabilir.

Ana sorun, yeni makinenizin yeni ana bilgisayar adına sahip olmasıdır - ve dizin bundan sonra adlandırılır (daha önce belirtildiği gibi dizini yeniden adlandırmak yardımcı olmaz), bu nedenle makine ana makine adınızı yeniden adlandırmamız ve RabbitMq'in eski dosyalarla çalışmasını sağlamamız gerekir. "İp-0-0-0-0" eski makine adı olsun (bu yüzden bir mnesia klasörü / ver / lib / rabbitmq / mnsesia / ip-0-0-0-0 olmalıdır ) ve yeni makine ana bilgisayar adı "ip-1-1-1-1" gibi bir şey, ancak üzerine yazacağımız için yeni ad önemli değil. Aşağıdaki komutları yürütün:

sudo -s
echo "127.0.0.1 ip-0-0-0-0" >> /etc/hosts 
echo "ip-0-0-0-0" > /etc/hostname
reboot

Yeniden başlattıktan sonra makinenizin yeni bir adı olacak ve RabbitMq eski dosyalarla çalışmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.