Làm cách nào để khởi động lại rabbitmq sau khi chuyển máy?


15

Tôi đang chạy django / cần tây trên EC2, với rabbitmq là nhà môi giới. Máy tôi đang sử dụng không thành công, vì vậy tôi đã khởi động một ví dụ khác. Nhưng kể từ khi chuyển sang máy mới, tôi không thể có được cần tây để làm việc.

EDIT: Tôi đã bao gồm rất nhiều nhật ký bên dưới, chỉ trong trường hợp tôi chẩn đoán sai vấn đề. Nhưng tôi chắc chắn 85% rằng vấn đề là máy chủ rabbitmq không khởi động được trong giai đoạn "khởi động cơ sở dữ liệu".

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

Bất kỳ ý tưởng về làm thế nào để chẩn đoán thêm / giải quyết vấn đề này?

Đây là những gì xảy ra khi tôi cố gắng chạy cần tây:

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

Theo dõi nó, có vẻ như máy chủ rabbitmq là vấn đề và đặc biệt là cơ sở dữ liệu:

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

Nhưng tôi chưa thể tìm ra cách khởi động lại máy chủ:

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

Ngoài ra, không biết nó có liên quan hay không, nhưng quá trình này đang chạy trong nền.

$ 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

Tôi đã không thể tìm thấy bất kỳ tài liệu cho loại thất bại này. Bất kỳ đề xuất?

Câu trả lời:


15

Tôi đã nhận được một số trợ giúp rất tốt từ danh sách thảo luận của rabbitmq:

Cơ sở dữ liệu mà RabbitMQ sử dụng được liên kết với tên máy chủ của máy, vì vậy nếu bạn đã sao chép thư mục cơ sở dữ liệu sang máy khác, nó sẽ không hoạt động. Nếu đây là trường hợp, bạn phải thiết lập một máy có cùng tên máy chủ như trước và chuyển bất kỳ tin nhắn chưa xử lý nào sang máy mới. Nếu không có gì quan trọng ở thỏ, bạn có thể xóa mọi thứ bằng cách xóa các tệp RabbitMQ trong / var / lib / rabbitmq.

Tôi đã xóa mọi thứ trong / var / lib / rabbitmq / mnesia / rabbit / và nó khởi động mà không gặp sự cố. Hoan hô!


8

Vấn đề liên quan đến thực tế là Mnesia, nơi lưu trữ cấu hình hàng đợi và siêu dữ liệu của RabbitMQ, tạo ra một cơ sở dữ liệu bằng tên máy chủ của máy.

Các thư mục cơ sở dữ liệu dựa trên tên máy chủ sẽ được đặt trong:

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

Vì vậy, tùy chọn xóa 2 thư mục trên và khởi động lại rabbitmq sẽ hoạt động. Nếu bạn có máy chủ rabbitmq di chuyển từ máy chủ này sang máy chủ khác, bạn sẽ mang cơ sở dữ liệu mnesia tên máy chủ cũ. Đơn giản chỉ cần đổi tên thư mục thành tên máy chủ bên phải sẽ không hoạt động, theo thử nghiệm của tôi.

Vì vậy, trong trường hợp bạn cần giữ nguyên cấu trúc hàng đợi , tài khoản người dùng và bất kỳ siêu dữ liệu nào khác được xác định cho máy chủ RabbitMQ của bạn, bạn cần giữ một bản sao của siêu dữ liệu đó.

Có hai cách để trích xuất hoặc nhập cấu hình siêu dữ liệu

  • Plugin quản lý: kích hoạt plugin quản lý của rabbitmq và truy cập máy chủ url: 15672. Trang chính có hai tùy chọn dưới cùng, một để xuất và một để nhập định nghĩa

  • Dòng lệnh: rabbitmqadmin export rabbit.config (hoặc nhập thay vì xuất)

Vì vậy, đề xuất dòng dưới cùng:

  • giữ một bản xuất hiện tại của cấu trúc hàng đợi / người dùng / v.v.
  • khi di chuyển máy chủ hoặc trải qua quá trình khôi phục, hãy thực hiện hành động xóa cấu trúc thư mục cũ (nếu dữ liệu được xếp hàng không liên quan) và nhập lại cấu hình / siêu dữ liệu gốc.
  • Nếu bất kỳ dữ liệu xếp hàng liên tục nào có liên quan, tùy chọn tốt nhất là đổi tên máy chủ của máy chủ đã khôi phục của bạn thành máy chủ ban đầu và cho phép các tin nhắn xử lý / dequeue, sau đó bạn có thể điều chỉnh lại tên máy chủ nếu cần.

1

Xin chào Tôi đã gặp trường hợp tương tự khi tôi di chuyển từ AWS EC2 từ nhỏ sang lớn và cần phải giữ RabbitMq hoạt động và làm việc với các tệp DB mnesia cũ trong trường hợp mới vì chúng chứa rất nhiều nhiệm vụ và thông tin xếp hàng bị trì hoãn quan trọng. Dưới đây là cách giải quyết tôi đã sử dụng để quản lý này. Có lẽ cách giải quyết của tôi cho phép một người không xóa thư mục mnesia và lưu giữ dữ liệu có thể giúp ai đó.

Vấn đề chính là máy mới của bạn có tên máy chủ mới - và thư mục được đặt theo tên của nó (chỉ đổi tên thư mục như đã đề cập trước đó, không giúp ích gì) vì vậy chúng tôi cần đổi tên tên máy chủ của bạn và làm cho RabbitMq hoạt động với các tệp cũ. Đặt "ip-0-0-0-0" là tên máy cũ (vì vậy cần có thư mục mnesia / ver / lib / rabbitmq / mnsesia / ip-0-0-0-0 ) và tên máy chủ mới là một cái gì đó như "ip-1-1-1-1", nhưng tên mới không quan trọng vì chúng tôi sẽ ghi đè lên nó. Thực hiện các lệnh sau:

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

Sau khi khởi động lại, máy của bạn sẽ có một tên mới và RabbitMq sẽ hoạt động với các tệp cũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.