15 votos

¿Cómo puedo reiniciar rabbitmq después de cambiar las máquinas?

Yo estoy usando django/apio en EC2, con rabbitmq como corredor. La máquina estaba usando fallado, así que me lancé otra instancia. Pero desde el cambio a la nueva máquina, no he sido capaz de conseguir el apio para trabajar.

EDIT: he incluido una gran cantidad de registros a continuación, sólo en caso de que yo soy un diagnóstico erróneo del problema. Pero yo soy del 85% de que el problema es que rabbitmq-server no se inicia en el "a partir de la base de datos de fase".

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

Cualquier idea sobre cómo obtener diagnóstico/a solucionar este problema?

Esto es lo que sucede cuando intento ejecutar el apio:

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

El seguimiento de nuevo, parece que el rabbitmq servidor es el problema, y la base de datos, en particular:

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

Pero no he sido capaz de averiguar cómo reiniciar el servidor:

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

También, no sé si es relevante, pero este proceso se ejecuta en segundo plano.

$ 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

No he sido capaz de encontrar ninguna documentación para este tipo de error. Alguna sugerencia?

15voto

Abe Puntos 303

Tengo algo de muy buena ayuda de la rabbitmq-discutir lista:

La base de datos de RabbitMQ utiliza está ligada a la de la máquina nombre de host, así que si te copian la base de datos de directorios a otra máquina, no va a funcionar. Si este es el caso, usted tiene que configurar un equipo con el mismo nombre de host como antes y transferir todos los mensajes pendientes para la nueva máquina. Si no hay nada importante en conejo, sólo podía borrar todo por la eliminación de la RabbitMQ archivos en /var/lib/rabbitmq.

He eliminado todo en /var/lib/rabbitmq/mnesia/conejo/ y se marcha sin problemas. ¡Hurra!

8voto

gextra Puntos 153

El problema está relacionado con el hecho de que Mnesia, que almacena la cola y meta-datos de configuración de RabbitMQ, crea una base de datos utilizando el nombre de host de la máquina.

Ejemplo de nombre de host basado en directorios de base de datos se encuentra en :

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

Así, la opción para eliminar el por encima de los 2 directorios y reiniciar rabbitmq de trabajo. Si usted tuvo la rabbitmq servidor migrado desde un host a otro, tendrá que llevar el antiguo nombre de host mnesia de la base de datos. Simplemente cambiar el nombre del directorio a la derecha hostname se no de trabajo, según mis pruebas.

Así, en caso de que usted necesita para preservar la cola de la estructura, las cuentas de usuario, y cualquier otro metadatos definidos para su RabbitMQ servidor, usted necesita para mantener una copia de los metadatos.

Hay dos formas de extraer o de importación de la configuración de los metadatos

  • Plugin de gestión : activar el plugin de gestión de rabbitmq y vaya a la dirección url del servidor:15672. La página principal en la parte inferior dos opciones, una para la exportación y para importar la definición

  • Línea de comando: rabbitmqadmin de exportación de carne de conejo.config ( o de importación en lugar de exportación )

Así, la parte inferior de la línea de sugerencias:

  • mantener una corriente de exportación de su cola de estructura/usuarios/etc
  • cuando la migración de servidores, o ir a través de la recuperación, a tomar las medidas para eliminar la antigua estructura de directorios ( si la cola de impresión de datos es irrelevante ) y volver a importar la configuración original/metadata.
  • Si cualquier persistente en la cola de datos que es relevante, la mejor opción es cambiar el nombre de host de su recuperado de host a la original y permitir que los mensajes de proceso/de la cola, entonces usted puede ajustar el nombre de host de nuevo si es necesario.

1voto

Dmytriy Voloshyn Puntos 111

Hola tuve una situación similar cuando migré de AWS EC2, de Pequeño a Grande Instancia y necesarios para mantener RabbitMq ejecutando y el trabajo con los viejos mnesia ficheros de base de datos en la nueva instancia ya que contenían una gran cantidad de importantes tareas retrasadas y cola de info. A continuación es la solución que he usado para manejar esto. Tal vez mi solución que le permite a uno no eliminar mnesia carpeta y conservar los datos puede ayudar a alguien.

El principal problema es que su nueva máquina tiene nuevo nombre de host y directorio es nombrado después de él (sólo cambiar el nombre de directorio, como se mencionó antes, no ayuda) así que tenemos que cambiar el nombre de tu máquina y hacer RabbitMq para trabajar con los archivos antiguos. Vamos a "ip-0-0-0-0" ser viejo nombre de la máquina (por lo que no debería ser un mnesia de carpeta /ver/lib/rabbitmq/mnsesia/ip-0-0-0-0), y el nuevo host de la máquina el nombre es algo así como "ip-1-1-1-1", pero el nuevo nombre no importa como vamos a sobrescribir. Ejecutar los siguientes comandos:

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

Después de reiniciar el equipo tendrá un nuevo nombre, y RabbitMq debe trabajar con los archivos antiguos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: