Come posso riavviare rabbitmq dopo aver cambiato macchina?


16

Sto eseguendo django / sedano su EC2, con rabbitmq come broker. La macchina che stavo usando non è riuscita, quindi ho avviato un'altra istanza. Ma da quando sono passato alla nuova macchina, non sono stato in grado di far funzionare il sedano.

EDIT: ho incluso un sacco di registri di seguito, nel caso in cui sto diagnosticando erroneamente il problema. Ma sono sicuro all'85% che il problema è che il server Rabbitmq non si avvia nella fase di "avvio del database".

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

Qualche idea su come diagnosticare / risolvere ulteriormente questo problema?

Ecco cosa succede quando provo a eseguire il sedano:

$ 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...

Tracciandolo indietro, sembra che il problema sia il server rabbitmq, e in particolare il database:

$ 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==

Ma non sono stato in grado di capire come riavviare il server:

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 ()

Inoltre, non so se è pertinente, ma questo processo è in esecuzione in background.

$ 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

Non sono stato in grado di trovare alcuna documentazione per questo tipo di errore. Eventuali suggerimenti?

Risposte:


16

Ho ricevuto un ottimo aiuto dall'elenco rabbitmq-discuss:

Il database che RabbitMQ utilizza è associato al nome host della macchina, quindi se hai copiato la directory del database su un'altra macchina, non funzionerà. In tal caso, è necessario impostare una macchina con lo stesso nome host di prima e trasferire eventuali messaggi in sospeso sulla nuova macchina. Se non c'è nulla di importante in coniglio, puoi semplicemente cancellare tutto rimuovendo i file RabbitMQ in / var / lib / rabbitmq.

Ho cancellato tutto in / var / lib / rabbitmq / mnesia / rabbit / e si è avviato senza problemi. Evviva!


8

Il problema è legato al fatto che Mnesia, che archivia la coda e la configurazione dei metadati di RabbitMQ, crea un database usando il nome host della macchina.

Tali directory di database basate su nomi host si troveranno sotto:

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

Quindi, l'opzione per eliminare le 2 directory precedenti e riavviare rabbitmq funzionerà. Se il server rabbitmq è stato migrato da un host a un altro, porterai l'ex hostname mnesia database. La semplice ridenominazione della directory con il nome host corretto non funzionerà, secondo i miei test.

Pertanto, nel caso in cui sia necessario conservare la struttura della coda , gli account utente e tutti gli altri metadati definiti per il proprio server RabbitMQ, è necessario conservare una copia di tali metadati.

Esistono due modi per estrarre o importare la configurazione dei metadati

  • Plugin di gestione: attiva il plug-in di gestione di rabbitmq e vai al server url: 15672. La pagina principale ha in fondo due opzioni, una da esportare e una per importare la definizione

  • Riga di comando: rabbitmqadmin export rabbit.config (o import invece di export)

Quindi, suggerimenti per la linea di fondo:

  • mantenere un'esportazione corrente della struttura della coda / utenti / ecc
  • durante la migrazione dei server o durante il ripristino, eseguire l'azione per eliminare la struttura della directory precedente (se i dati in coda sono irrilevanti) e reimportare la configurazione / i metadati originali.
  • Se i dati in coda persistenti sono rilevanti, l'opzione migliore è quella di rinominare il nome host dell'host recuperato con quello originale e consentire ai messaggi di essere elaborati / cancellati, quindi è possibile modificare nuovamente il nome host, se necessario.

1

Ciao, ho avuto una situazione simile quando sono migrato da AWS EC2 Small a Large Instance e avevo bisogno di mantenere RabbitMq in esecuzione e lavorare con i vecchi file mnesia DB su una nuova istanza in quanto contenevano molte importanti attività ritardate e informazioni sulla coda. Di seguito è una soluzione alternativa che ho usato per gestire questo. Forse la mia soluzione alternativa che consente di non eliminare la cartella mnesia e conservare i dati può aiutare qualcuno.

Il problema principale è che il tuo nuovo computer ha un nuovo nome host - e la directory prende il nome da esso (solo rinominare la directory come menzionato prima, non aiuta), quindi abbiamo bisogno di rinominare il nome host del tuo computer e far funzionare RabbitMq con i vecchi file. Lascia che "ip-0-0-0-0" sia il vecchio nome della macchina (quindi dovrebbe esserci una cartella mnesia / ver / lib / rabbitmq / mnsesia / ip-0-0-0-0 ) e il nome host della nuova macchina è qualcosa come "ip-1-1-1-1", ma il nuovo nome non ha importanza poiché lo sovrascriveremo. Eseguire i seguenti comandi:

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

Dopo il riavvio, il computer avrà un nuovo nome e RabbitMq dovrebbe funzionare con i vecchi file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.