切换机器后如何重新启动rabbitmq?

我在EC2上运行django / celery,以rabbitmq作为代理。 我使用的机器失败了,所以我又开了另外一个例子。 但是自从转换到新机器以来,我一直没有能够得到芹菜。

编辑:我已经包含了很多日志,以防万一我误诊了这个问题。 但我85%确定问题是rabbitmq-server无法在“启动数据库”阶段启动。

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 

任何想法如何进一步诊断/解决这个问题?

下面是我尝试运行芹菜时发生的情况:

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

追溯它,看起来像rabbitmq服务器是问题,特别是数据库:

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

但我一直无法弄清楚如何重新启动服务器:

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

另外,不知道它是否相关,但是这个过程在后台运行。

 $ 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 

我一直无法find这种失败的任何文件。 有什么build议么?

    我从rabbitmq-discuss列表中得到了一些非常好的帮助:

    RabbitMQ使用的数据库绑定到机器的主机名,所以如果你将数据库目录拷贝到另一台机器上,它将不起作用。 如果是这种情况,则必须使用与以前相同的主机名来设置机器,并将所有未完成的消息传送到新机器。 如果没有什么重要的兔子,你可以通过删除/ var / lib / rabbitmq中的RabbitMQ文件来清除所有的东西。

    我删除了/ var / lib / rabbitmq / mnesia / rabbit /中的所有内容,并且没有任何问题。 万岁!

    这个问题与存储RabbitMQ的队列和元数据configuration的Mnesia使用机器的主机名创build数据库有关。

    这种基于主机名的数据库目录将位于:

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

    因此,删除上述2个目录并重新启动rabbitmq的选项将起作用。 如果您将rabbitmq服务器从主机迁移到另一个主机,则您将携带以前的主机名mnesia数据库。 根据我的testing,把目录重命名为正确的主机名是行不通的。

    因此, 如果您需要保留为您的RabbitMQ服务器定义的队列结构 ,用户帐户和任何其他元数据,则需要保留这些元数据的副本。

    有两种方法可以提取或导入元数据configuration

    • pipe理插件:激活rabbitmq的pipe理插件并转到url服务器:15672。 主页面有两个选项,一个导出,一个导入定义

    • 命令行:rabbitmqadmin导出rabbit.config(或导入而不是导出)

    所以,底线build议:

    • 保持队列结构/用户等的当前导出
    • 在迁移服务器或进行恢复时,采取措施删除以前的目录结构(如果排队的数据不相关)并重新导入原始configuration/元数据。
    • 如果任何持续排队的数据是相关的,最好的select是将您恢复的主机的主机名重命名为原来的主机名,并允许消息处理/出队,如果需要的话可以再次调整主机名。

    您好我有一个类似的情况,当我从AWS EC2小型迁移到大型实例,需要保持RabbitMq运行和旧的mnesia DB文件在新实例上的工作,因为他们包含了很多重要的延迟任务和队列信息。 以下是我用来pipe理这个的解决方法。 也许我的解决方法,使一个不删除mnesia文件夹和保存数据可以帮助某人。

    主要的问题是你的新机器有新的主机名 – 目录是以它的名字命名的(只是重命名目录,如前所述,没有帮助),所以我们需要重命名你的机器主机名,使RabbitMq使用旧文件。 假设“ip-0-0-0-0”是旧机器名(所以应该有一个mnesia文件夹/ ver / lib / rabbitmq / mnsesia / ip-0-0-0-0 ),并且新的机器主机名是像“ip-1-1-1-1”,但新的名称并不重要,因为我们将覆盖它。 执行以下命令:

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

    重启后你的机器将会有一个新的名字,RabbitMq应该可以和旧的文件一起工作。