मशीनों को स्विच करने के बाद मैं खरगोशबिट को कैसे पुनः आरंभ करूं?


16

मैं django / celery को EC2 पर चला रहा हूं, ब्रोकर के रूप में खरगोश के साथ। जिस मशीन का मैं उपयोग कर रहा था वह विफल रही, इसलिए मैंने एक और उदाहरण निकाल दिया। लेकिन नई मशीन में जाने के बाद से, मैं काम करने के लिए अजवाइन नहीं ले पाया।

संपादित करें: मैंने नीचे बहुत सारे लॉग शामिल किए हैं, बस अगर मैं समस्या को गलत बता रहा हूं। लेकिन मुझे 85% यकीन है कि समस्या यह है कि खरगोश-सर्वर "शुरुआती डेटाबेस" चरण में शुरू करने में विफल रहता है।

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

इसे वापस ट्रेस करने पर, यह दिखता है कि खरगोशबिट सर्वर समस्या है, और विशेष रूप से डेटाबेस:

$ 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

मैं इस तरह की विफलता के लिए कोई दस्तावेज नहीं ढूंढ पाया। कोई सुझाव?

जवाबों:


16

मुझे खरगोश-चर्चा सूची से कुछ बहुत अच्छी मदद मिली:

डेटाबेस RabbitMQ का उपयोग मशीन के होस्टनाम से जुड़ा होता है, इसलिए यदि आपने डेटाबेस को किसी अन्य मशीन में कॉपी किया है तो यह काम नहीं करेगा। यदि यह मामला है, तो आपको पहले की तरह ही होस्टनाम के साथ एक मशीन स्थापित करनी होगी और किसी भी बकाया संदेश को नई मशीन में स्थानांतरित करना होगा। अगर खरगोश में कुछ भी महत्वपूर्ण नहीं है, तो आप / var / lib / rabbitmq में RabbitMQ फ़ाइलों को हटाकर सब कुछ साफ कर सकते हैं।

मैंने / var / lib / rabbitmq / mnesia / rabbit / में सब कुछ डिलीट कर दिया और यह बिना किसी परेशानी के शुरू हुआ। हुर्रे!


8

मुद्दा इस तथ्य से संबंधित है कि मेन्सिया, जो RabbitMQ की कतार और मेटा-डेटा कॉन्फ़िगरेशन को संग्रहीत करता है, मशीन के होस्टनाम का उपयोग करके एक डेटाबेस बनाता है।

इस तरह के hostname आधारित डेटाबेस निर्देशिका के तहत स्थित हो जाएगा:

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

तो, उपरोक्त 2 निर्देशिकाओं को हटाने और खरगोश के पुनः आरंभ करने का विकल्प काम करेगा। यदि आपके पास खरगोशबिटक सर्वर होस्ट से दूसरे में माइग्रेट हो गया है, तो आप पूर्व होस्टनाम मेन्सिया डेटाबेस ले जाएंगे। मेरे परीक्षण के अनुसार, डायरेक्ट होस्टनाम को सही होस्टनाम में बदलने से काम नहीं चलेगा ।

इसलिए, यदि आपको कतार संरचना , उपयोगकर्ता खाते, और आपके RabbitMQ सर्वर के लिए परिभाषित किसी अन्य मेटाडेटा को संरक्षित करने की आवश्यकता है , तो आपको ऐसे मेटाडेटा की एक प्रति रखने की आवश्यकता है।

मेटाडेटा कॉन्फ़िगरेशन को निकालने या आयात करने के दो तरीके हैं

  • प्रबंधन प्लगइन: खरगोशबैंक के प्रबंधन प्लगइन को सक्रिय करें और यूआरएल सर्वर पर जाएं: 15672। मुख्य पृष्ठ में नीचे दो विकल्प हैं, एक निर्यात करने के लिए और दूसरा परिभाषा आयात करने के लिए

  • आदेश पंक्ति: rabbitmqadmin निर्यात rabbit.config (या निर्यात के बजाय आयात)

तो, निचला रेखा सुझाव:

  • अपनी कतार संरचना / उपयोगकर्ताओं / आदि का वर्तमान निर्यात रखें
  • जब सर्वरों में माइग्रेट हो रहा है, या रिकवरी से गुजर रहा है, तो पूर्व निर्देशिका संरचना (यदि कतार डेटा अप्रासंगिक है) को हटाने के लिए कार्रवाई करें और मूल कॉन्फ़िगरेशन / मेटाडेटा को फिर से आयात करें।
  • यदि कोई लगातार कतारबद्ध डेटा प्रासंगिक है, तो सबसे अच्छा विकल्प आपके पुनर्प्राप्त होस्ट के होस्टनाम को मूल एक में बदलना है और संदेशों को संसाधित / समाप्त करने की अनुमति देता है, तो यदि आवश्यक हो तो आप होस्टनाम को फिर से समायोजित कर सकते हैं।

1

नमस्ते, जब मैं AWS EC2 स्मॉल टू लार्ज इंस्टेंस से माइग्रेट हुआ था, तब भी मेरे पास ऐसी ही स्थिति थी और रैबिटमैक को नए उदाहरण पर पुराने mnesia DB फाइलों के साथ चलाने और काम करने की आवश्यकता थी क्योंकि उनमें बहुत सारे महत्वपूर्ण विलंबित कार्य और कतार जानकारी शामिल थी। नीचे वर्कअराउंड है जिसे मैं इसका प्रबंधन करता था। शायद मेरा वर्कअराउंड जो किसी को mnesia फ़ोल्डर को हटाने में सक्षम नहीं करता है और डेटा को संरक्षित रखने से किसी की मदद हो सकती है।

मुख्य समस्या यह है कि आपकी नई मशीन में नया होस्टनाम है - और निर्देशिका का नाम उसके नाम पर रखा गया है (बस पहले की तरह इसका नाम बदलने वाली निर्देशिका में मदद नहीं करता है), इसलिए हमें आपके मशीन होस्टनाम का नाम बदलने और पुरानी फ़ाइलों के साथ काम करने के लिए रैबिटमैक बनाने की आवश्यकता है। "Ip-0-0-0-0" को पुरानी मशीन का नाम दें (इसलिए एक माईन्सिया फ़ोल्डर / 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 को पुरानी फाइलों के साथ काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.