2013-03-21 1 views
1

그래서 클러스터 된 rabbitmq 백엔드가있는 여러 서버에서 셀러리를 실행하고 있습니다. 최근에, 나는 셀러리와 함께 할 아무것도 무기한 매달려 및 rabbitmq이 모호한 오류 메시지와 함께 나를 제공에 대한 로그를 확인하기 시작했다 :이 rabbitmq/celery 오류는 어떻게 수정합니까?

# rabbitmqctl list_bindings -p celery 
Listing bindings ... 
     exchange celery queue celery [] 
celery exchange celery queue celery [] 
...done. 

내가 할 무엇 : rabbitmqctl의 list_bindings 실행

=ERROR REPORT==== 20-Mar-2013::23:52:25 === 
connection <0.15823.3>, channel 1 - soft error: 
{amqp_error,not_found, 
     "no binding i-69995906 between exchange 'i-69995906' in vhost 'celery' and queue 'i-69995906' in vhost 'celery'", 
     'queue.bind'} 

나에게이 있습니다 오류를 제거하려면 어떻게해야합니까? 이미 Rabbitmq을 다시 시작한 후 Rabbitmq을 다시 설치하고 클러스터를 삭제하고 복원했습니다. 나는 기존 바인딩을 복원해야한다고 생각하지만, rabbitmqctl이나 celery에서 어떻게되는지 모르겠습니다. 이것이 작동하지 않는다면, 셀러리 작업은 전혀 작동하지 않습니다.

답변

3

감사합니다. 나는 정확하게 같은 장소에서 끝났다.

은 내가이 오류와 그것을 해결하는 유일한 방법이 있었다

rabbitmqctl delete_vhost celery 
rabbitmqctl add_vhost celery 
rabbitmqctl set_permissions -p celery <user> ".*" ".*" ".*" 
1

가상 호스트를 삭제하고 다시이 문제를 해결 할 수있었습니다을 한 번에 종료 전체 클러스터를하고 그것을 해제 할 수 있었다 몇 초.

서문 : 우리는 하나의 큐에 밀어 수 없었다 또한 바인딩을 재현 할 수 없었다과 같은 오류가 발생했습니다 전에 일부 파티션을 경험했다.

하나씩 중단하고 시작하는 기능이 작동하지 않습니다. 오류가 유지되고 클러스터의 일부 노드가 캐시에 문제가있는 ip/config라고 가정합니다.

감지 :이 오류가 모든 노드에서 rabbitmqctl list_queues를 실행하는 경우 좋은 방법은 확인합니다. 노드가 다른 대기열을 표시하면 무언가 잘못되었습니다.

해결책 : 해결 방법은 모든 토끼 서버를 몇 초간 중지시켜 "캐시"가 없도록하는 것입니다. 물론 이것은 영구적 인 대기열에 의존하지 않는 유일한 해결책입니다.

1

동일한 문제가 발생하여 클러스터를 종료하거나 가상 호스트를 재설정하지 않고도 문제를 해결할 수있었습니다.

클러스터에 3 개의 라우팅 키가 바인딩 된 큐가 있습니다. 노드 중 하나가 다운 된 후에 대기열을 제거해야하고 이후에 동일한 이름의 새로 생성 된 대기열에 다시 라우팅 키를 등록하려고 할 때 "vhost와 대기열의 교환간에 바인딩이 없음"오류가 표시됩니다.

원래 큐는 '내구성'과 솔루션으로 만들어진

는 것이었다 :

  • 이 (비 내구성) '과도'를 같은 이름으로 새 큐를 작성하지만, 큐
  • 삭제
  • 대기열에 원래의 3 개의 라우팅 키를 등록하면 오류가 발생하지 않습니다.

내구성 큐를 갖고 싶었 기 때문에 큐를 다시 삭제하고 같은 이름의 새로운 '내구성 큐'를 만든 다음 완벽하게 작동하는 라우팅 키를 바인딩했습니다.

다른 '내구성'유형으로 새 대기열을 만들면 어딘가에 남아있는 이전 바인딩을 재설정했을 것입니다.

관련 문제