2015-05-19 3 views
1

Я создал кластер кролика в двух экземплярах на EC2. В моем приложении django используется сельдерей для задач async, который, в свою очередь, использует RabbitMQ для очереди сообщений.Django Сельдерей не может подключиться к удаленному RabbitMQ на EC2

Всякий раз, когда я начинаю сельдерей с помощью команды:

python manage.py celery worker --loglevel=INFO 

ИЛИ

python manage.py celeryd --loglevel=INFO 

Я получаю следующее сообщение об ошибке, связанной с удаленным RabbitMQ:

[2015-05-19 08:58:47,307: ERROR/MainProcess] consumer: Cannot connect to amqp://myuser:**@<ip-address>:25672/myvhost/: Socket closed. 
Trying again in 2.00 seconds... 

Я установить разрешения с помощью:

sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*" 

и затем перезапущен rabbitmq-server на обоих узлах кластера. Однако это не помогло.

В файле журнала, я вижу несколько записей, как показано ниже:

=INFO REPORT==== 19-May-2015::08:14:41 === 
accepting AMQP connection <0.1981.0> (<ip-address>:38471 -> <ip-address>:5672) 

=ERROR REPORT==== 19-May-2015::08:14:44 === 
closing AMQP connection <0.1981.0> (<ip-address>:38471 -> <ip-address>:5672): 
{handshake_error,opening,0, 
       {amqp_error,access_refused, 
          "access to vhost 'myvhost' refused for user 'myuser'", 
          'connection.open'}} 
+0

ли питон рабочие и RabbitMQ в разных случаях? – dgil

+0

Да. Работник сельдерея находится на моем ноутбуке, а rabbitmq находится на EC2. – Dharmit

+0

Хорошо, проблема в том, что ваш экземпляр находится за брандмауэром в EC2, и он не принимает запросы извне. – dgil

ответ

0

Оказывается, я не создал соответствующие файлы конфигурации. В моем случае (Ubuntu 14.04), я должен был создать ниже двух конфигурационных файлов:

$ cat /etc/rabbitmq/rabbitmq-env.conf 
RABBITMQ_NODE_IP_ADDRESS=<ip_of_ec2_instance> 

<ip_of_ec2_instance> должен быть внутренний IP, который использует EC2. Не публичный IP-адрес, который используется для ssh в экземпляре. Его можно получить с помощью команды ip a.

$ cat /etc/rabbitmq/rabbitmq.config 
[ 
    {mnesia, [{dump_log_write_threshold, 1000}]}, 
    {rabbit, [{tcp_listeners, [25672]}]}, 
    {rabbit, [{loopback_users, []}]} 
]. 

Я думаю, что линия {rabbit, [{tcp_listeners, [25672]}]}, была одна из наиболее важной части конфигурации, что я пропал без вести.

Спасибо @dgil за помощь по устранению неполадок.

0

Файл /usr/local/etc/rabbitmq/rabbitmq-env.conf содержит запись для NODE_IP_ADDRESS, чтобы связать его только к локальной машине. Удаление записи NODE_IP_ADDRESS из конфигурации связывает порт со всеми network inferfaces.

Источник: https://superuser.com/questions/464311/open-port-5672-tcp-for-access-to-rabbitmq-on-mac

+0

В каталоге '/ usr/local/etc' нет такой директории. – Dharmit

+0

Путь, который я написал, находится в Mac. Я предполагаю, что вы используете Linux. Можете ли вы проверить, есть ли это в '/ usr/local/rabbitmq', пожалуйста? – dgil

+0

Не могу видеть. Страница man для 'rabbitmq-env.conf' на моей системе Ubuntu 14.04 говорит, что путь«/etc/rabbitmq/rabbitmq-env.conf ». Файл не существует, поэтому я думаю, что я просто создам новый. – Dharmit

0

На вопрос был дан ответ. но просто оставить записки с подобным вопросом я столкнулся должен кто-нибудь еще найти его полезным

У меня есть flask app работает на ec2 с amqp as a broker on port 5672 и ec2 elasticcache memcached as a backend.AMQP брокера были проблемы собирание задачи, которые были уволят - так я решить ее путем фиксации в качестве такого

Если у вас есть rabbitmq-server установлен (sudo apt-get install rabbitmq-server), добавить пользователя и задать свойства в качестве такого

sudo add_user username password 
set_permissions username ".*" ".*" ".*" 

перезагрузка сервера: sudo service rabbitmq-server restart

В флягу приложение для конфигурации сельдерея

broker_url=amqp://username:[email protected]:5672// (Set as above) 
backend=cache+memcached://(ec2 cache url):11211/ 

(Кэш + memcached: // отключил меня - без него я продолжал получать ошибку импорта (не могу импортировать модуль)

Откройте порт 5672 на вашем экземпляре ec2 в группе безопасности.

Теперь, если вы запустите ваш сельдерея работника, он должен подобрать задачи, которые уволят и хранить результаты на вашем сервере Memcached

Смежные вопросы