ฉันจะรีสตาร์ท rabbitmq หลังจากเปลี่ยนเครื่องได้อย่างไร


16

ฉันใช้ django / คื่นฉ่ายบน EC2 โดยมี 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

ฉันไม่สามารถค้นหาเอกสารใด ๆ สำหรับความล้มเหลวประเภทนี้ได้ ข้อเสนอแนะใด ๆ

คำตอบ:


16

ฉันได้รับความช่วยเหลือที่ดีมากจากรายการ Rabbitmq- อภิปราย:

ฐานข้อมูล RabbitMQ ใช้นั้นเชื่อมโยงกับชื่อโฮสต์ของเครื่องดังนั้นหากคุณคัดลอกฐานข้อมูล dir ไปยังเครื่องอื่นจะไม่สามารถใช้งานได้ หากเป็นกรณีนี้คุณต้องตั้งค่าเครื่องด้วยชื่อโฮสต์เดียวกับก่อนและถ่ายโอนข้อความที่คงค้างไปยังเครื่องใหม่ หากไม่มีอะไรสำคัญในกระต่ายคุณสามารถล้างทุกอย่างได้โดยการลบไฟล์ RabbitMQ ใน / var / lib / rabbitmq

ฉันลบทุกอย่างใน / var / lib / rabbitmq / mnesia / rabbit / และมันเริ่มต้นขึ้นโดยไม่มีปัญหา ไชโย!


8

ปัญหานี้เกี่ยวข้องกับความจริงที่ว่า Mnesia ซึ่งเก็บการกำหนดค่าคิวและ meta-data ของ RabbitMQ นั้นจะสร้างฐานข้อมูลโดยใช้ชื่อโฮสต์ของเครื่อง

ไดเรกทอรีฐานข้อมูลชื่อโฮสต์ดังกล่าวจะอยู่ภายใต้:

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

ดังนั้นตัวเลือกในการลบ 2 ไดเรกทอรีข้างต้นและการรีสตาร์ท rabbitmq จะใช้งานได้ หากคุณมีเซิร์ฟเวอร์ Rabbitmq ที่ย้ายข้อมูลจากโฮสต์ไปยังอีกเครื่องคุณจะต้องใช้ชื่อโฮสต์เดิมฐานข้อมูล mnesia เพียงเปลี่ยนชื่อไดเรกทอรีเป็นชื่อโฮสต์ที่ถูกต้องจะไม่ทำงานตามการทดสอบของฉัน

ดังนั้นในกรณีที่คุณต้องการรักษาโครงสร้างคิวบัญชีผู้ใช้และข้อมูลเมตาอื่น ๆ ที่กำหนดไว้สำหรับเซิร์ฟเวอร์ RabbitMQ ของคุณคุณจำเป็นต้องเก็บสำเนาข้อมูลเมตาดังกล่าว

มีสองวิธีในการแยกหรือนำเข้าการกำหนดค่าเมทาดาทา

  • Management ปลั๊กอิน: เปิดใช้งานปลั๊กอินการจัดการของ rabbitmq และไปที่เซิร์ฟเวอร์ url: 15672 หน้าหลักมีสองตัวเลือกด้านล่างหนึ่งรายการเพื่อส่งออกและอีกหนึ่งรายการเพื่อนำเข้าคำจำกัดความ

  • Command Line: rabbitmqadmin export rabbit.config (หรือนำเข้าแทนการส่งออก)

ดังนั้นข้อเสนอแนะด้านล่าง:

  • เก็บการส่งออกปัจจุบันของโครงสร้างคิวของคุณ / users / etc
  • เมื่อย้ายเซิร์ฟเวอร์หรือดำเนินการกู้คืนให้ดำเนินการเพื่อลบโครงสร้างไดเรกทอรีเดิม (หากข้อมูลที่อยู่ในคิวไม่เกี่ยวข้อง) และนำเข้าการกำหนดค่า / เมทาดาทาเดิมอีกครั้ง
  • หากข้อมูลที่อยู่ในคิวแบบถาวรมีความเกี่ยวข้องตัวเลือกที่ดีที่สุดคือการเปลี่ยนชื่อโฮสต์ของโฮสต์ที่กู้คืนของคุณเป็นชื่อเดิมและอนุญาตให้ข้อความประมวลผล / dequeue จากนั้นคุณสามารถปรับชื่อโฮสต์อีกครั้งหากจำเป็น

1

สวัสดีฉันมีสถานการณ์ที่คล้ายกันเมื่อฉันย้ายจาก AWS EC2 ขนาดเล็กไปจนถึงขนาดใหญ่อินสแตนซ์และต้องการให้ RabbitMq ทำงานและทำงานกับไฟล์ mnesia DB เก่าในอินสแตนซ์ใหม่เนื่องจากพวกเขามีงานล่าช้าที่สำคัญและข้อมูลคิว ด้านล่างเป็นวิธีแก้ปัญหาที่ฉันใช้ในการจัดการสิ่งนี้ บางทีวิธีการแก้ปัญหาของฉันที่ช่วยให้โฟลเดอร์ที่จะไม่ลบ 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 ควรทำงานกับไฟล์เก่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.