[ English | Indonesia | Deutsch | 日本語 ]

RabbitMQ Fehlerbehebung

Dieser Abschnitt enthält Tipps zur Lösung häufiger Probleme mit RabbitMQ.

RabbitMQ-Dienst hängt fest

Es ist durchaus üblich, dass der RabbitMQ-Dienst hängt, wenn er neu gestartet oder gestoppt wird. Daher wird dringend empfohlen, RabbitMQ auf jedem Controller-Knoten manuell neu zu starten.

Bemerkung

Der Name des RabbitMQ-Dienstes kann je nach Betriebssystem oder Anbieter, der den RabbitMQ-Dienst anbietet, variieren.

  1. Starten Sie den RabbitMQ-Dienst auf dem ersten Controller-Knoten neu. Der Befehl service rabbitmq-server restart funktioniert in bestimmten Situationen möglicherweise nicht, daher ist es am besten, ihn zu verwenden:

    # service rabbitmq-server stop
    # service rabbitmq-server start
    
  2. Wenn sich der Dienst weigert zu stoppen, führen Sie den Befehl pkill aus, um den Dienst zu stoppen, und starten Sie dann den Dienst neu:

    # pkill -KILL -u rabbitmq
    # service rabbitmq-server start
    
  3. Überprüfen Sie, ob RabbitMQ-Prozesse ausgeführt werden:

    # ps -ef | grep rabbitmq
    # rabbitmqctl list_queues
    # rabbitmqctl list_queues 2>&1 | grep -i error
    
  4. Wenn es Fehler gibt, führen Sie den Befehl cluster_status aus, um sicherzustellen, dass es keine Partitionen gibt:

    # rabbitmqctl cluster_status
    

    Weitere Informationen finden Sie unter RabbitMQ-Dokumentation.

  5. Gehen Sie zurück zum ersten Schritt und versuchen Sie, den RabbitMQ-Dienst erneut zu starten. Wenn Sie immer noch Fehler haben, entfernen Sie den Inhalt im Verzeichnis /var/lib/rabbitmq/mnesia/ zwischen dem Beenden und Starten des RabbitMQ-Dienstes.

  6. Wenn keine Fehler vorliegen, starten Sie den RabbitMQ-Dienst auf dem nächsten Controller-Knoten neu.

Seit der Liberty-Version stellen die OpenStack-Dienste automatisch nach einem RabbitMQ-Ausfall wieder her. Sie sollten den Neustart von OpenStack-Diensten erst in Betracht ziehen, nachdem Sie geprüft haben, ob die RabbitMQ Heartbeat-Funktionalität aktiviert ist und ob die OpenStack-Dienste keine Nachrichten von RabbitMQ-Warteschlangen empfangen.

RabbitMQ Warnmeldungen

Wenn Sie Warnmeldungen für RabbitMQ erhalten, führen Sie die folgenden Schritte aus, um das Problem zu beheben und zu beheben:

  1. Bestimmen Sie, von welchen Servern die RabbitMQ-Alarme kommen.

  2. Versuch, eine nova-Instanz in der betroffenen Umgebung zu starten.

  3. Wenn Sie eine Instanz nicht starten können, fahren Sie mit der Fehlerbehebung fort.

  4. Melden Sie sich bei jedem der Steuerungsknoten für die betroffene Umgebung an und überprüfen Sie die Protokolldateien /var/log/rabbitmq auf gemeldete Probleme.

  5. Suchen Sie nach Verbindungsproblemen, die in den Protokolldateien identifiziert wurden.

  6. Betrachten Sie für jeden Controller-Knoten in Ihrer Umgebung das Verzeichnis /etc/init.d`, um sicherzustellen, dass es nova*, cinder*, neutron* oder glance* enthält. Überprüfen Sie auch die RabbitMQ-Nachrichtenwarteschlangen, die wachsen, ohne verbraucht zu werden, was anzeigt, welcher OpenStack-Dienst betroffen ist. Starten Sie den betroffenen OpenStack-Dienst neu.

  7. Betrachten Sie für jeden Compute-Knoten Ihrer Umgebung das Verzeichnis /etc/init.d und überprüfen Sie, ob es nova*, cinder*, neutron* oder glance* enthält, und überprüfen Sie auch die RabbitMQ-Nachrichtenwarteschlangen, die wachsen, ohne verbraucht zu werden, was anzeigt, welche OpenStack-Dienste betroffen sind. Starten Sie die betroffenen OpenStack-Dienste neu.

  8. Öffnen Sie das OpenStack Dashboard und starten Sie eine Instanz. Wenn die Instanz startet, ist das Problem behoben.

  9. Wenn Sie eine Instanz nicht starten können, überprüfen Sie die Protokolldateien /var/log/rabbitmq auf gemeldete Verbindungsprobleme.

  10. Starten Sie den RabbitMQ-Dienst auf allen Controller-Knoten neu:

    # service rabbitmq-server stop
    # service rabbitmq-server start
    

    Bemerkung

    Dieser Schritt gilt, wenn Sie bereits nur die OpenStack-Komponenten neu gestartet haben und keine Verbindung zum RabbitMQ-Dienst herstellen können.

  11. Wiederholen Sie die Schritte 7-8.

Übermäßiger Speicherverbrauch der Datenbankverwaltung

Seit dem Liberty-Release hat OpenStack mit RabbitMQ 3.4.x oder 3.6.x ein Problem mit der Verwaltungsdatenbank, die den RabbitMQ zugewiesenen Speicher verbraucht. Dies wird durch die Erhebung und Verarbeitung von Statistiken verursacht. Wenn ein einzelner Knoten mit RabbitMQ seine Speicherschwelle erreicht, wird die gesamte Austausch- und Warteschlangenverarbeitung gestoppt, bis sich der Speicheralarm erholt hat.

Um dieses Problem zu lösen:

  1. Überprüfen Sie den Speicherverbrauch:

    # rabbitmqctl status
    
  2. Bearbeiten Sie die Konfigurationsdatei /etc/rabbitmq/rabbitmq.config und ändern Sie den Parameter collect_statistics_interval zwischen 30000-60000 Millisekunden. Alternativ können Sie die Statistikerfassung deaktivieren, indem Sie den Parameter collect_statistics auf „none“ setzen.

Dateideskriptorbeschränkungen bei der Skalierung einer Cloud-Umgebung

Eine Cloud-Umgebung, die auf eine bestimmte Größe skaliert ist, erfordert eine Anpassung der Grenzen des Dateideskriptors.

Führen Sie den Befehl rabbitmqctl status aus, um die aktuellen Grenzen des Datei-Deskriptors anzuzeigen:

"{file_descriptors,
     [{total_limit,3996},
      {total_used,135},
      {sockets_limit,3594},
      {sockets_used,133}]},"

Passen Sie die entsprechenden Grenzwerte in der Konfigurationsdatei /etc/security/limits.conf an.