Fehlerbehebung bei Backend-Serverproblemen des Load Balancers

Informationen zu Backend-Serverproblemen im Zusammenhang mit Load Balancern.

Backend-Server-Timeout debuggen

Wenn der Backend-Server beim Antworten auf eine Anforderung die Antwortzeit überschreitet, tritt ein 504-Fehler auf, der angibt, dass der Backend-Server entweder heruntergefahren ist oder nicht auf die vom Load Balancer weitergeleitete Anforderung reagiert. Die Clientanwendung erhält den folgenden Antwortcode: HTTP/1.1 504 Gateway Timeout.

Fehler können aus folgenden Gründen auftreten:

  • Der Load Balancer konnte keine Verbindung zum Backend-Server herstellen, bevor der Verbindungstimeout abgelaufen ist.
  • Der Load Balancer habe eine Verbindung zum Backend-Server hergestellt, das Backend habe jedoch vor Ablauf des Inaktivitätstimeouts geantwortet.
  • Die Sicherheitslisten oder Netzwerksicherheitsgruppen für das Subnetz oder die VNIC haben keinen Traffic von den Backends zum Load Balancer zugelassen.
  • Der Backend-Server oder Anwendungsserver war nicht erfolgreich.

Führen Sie die folgenden Schritte aus, um Timeoutfehler des Backend-Servers zu beheben:

  1. Mit dem Utility curl können Sie den Backend-Server direkt von einem Host im selben Netzwerk aus testen.
    curl -i http://backend_ip_address
    Wenn dieser Test länger als eine Sekunde für die Antwort benötigt, liegt ein Latenzproblem auf Anwendungsebene vor. Es wird empfohlen, alle Upstreamabhängigkeiten zu prüfen, die Latenz verursachen können, einschließlich:
    • Network Attached Storage (NAS) wie iSCSI oder NFS
    • Datenbanklatenz
    • Eine Off-Premise-API
    • Eine Application Tier
  2. Prüfen Sie die Anwendung, indem Sie direkt über den Backend-Server darauf zugreifen. Prüfen Sie die zugehörigen Zugriffslogs, um festzustellen, ob auf die Anwendung zugegriffen werden kann und ob sie ordnungsgemäß funktioniert.
  3. Wenn sich der Load Balancer und der Backend-Server in unterschiedlichen Subnetzen befinden, prüfen Sie, ob die Sicherheitslisten Regeln enthalten, um Traffic zuzulassen. Wenn keine Regeln vorhanden sind, wird Traffic nicht zugelassen.
  4. Geben Sie die folgenden Befehle ein, um festzustellen, ob auf den Backend-Servern Firewallregeln vorhanden sind, die den Traffic blockieren:

    iptables -L listet alle von iptables durchgesetzten Firewallregeln auf.

    sudo firewall-cmd --list-all listet alle von firewalld durchgesetzten Firewallregeln auf.

  5. Aktivieren Sie das Logging auf dem Load Balancer, um festzustellen, ob die Latenz vom Load Balancer oder vom Backend-Server verursacht wird.

TCP- und HTTP-Backend-Server testen

In diesem Thema wird beschrieben, wie Sie Probleme mit einer Load-Balancer-Verbindung beheben. Die in dieser Prozedur verwendete Topologie verfügt über einen öffentlichen Load Balancer in einem öffentlichen Subnetz, und die Backend-Server sind im selben Subnetz.

Wir empfehlen, dass Sie Probleme mit dem Oracle Cloud Infrastructure Logging-Service beheben. (Weitere Informationen finden Sie unter Details zu Load-Balancer-Logs.)

Neben dem Oracle Cloud Infrastructure-Logging können Sie jedoch andere Utilitys verwenden, die in diesem Abschnitt aufgeführt sind, um den Traffic zu beheben, der vom Load Balancer verarbeitet und an einen Backend-Server gesendet wurde. Um diese Tests auszuführen, wird empfohlen, dass Sie eine Instanz in dem Netzwerk erstellen, das sich des Load Balancers befindet, und den Traffic in denselben Netzwerksicherheitsgruppen und Sicherheitslisten zulassen. Mit den folgenden Tools können Sie Fehler beheben:

  • Ping
    Bevor Sie die hier aufgeführten erweiterten Utilitys nutzen, wird empfohlen, einen einfachen ping-Test auszuführen. Damit dieser Test erfolgreich durchgeführt wird, müssen Sie ICMP-Traffic zwischen der Testinstanz und dem Backend-Server zulassen.
    $ ping backend_ip_address
    Die Antwort sollte in etwa wie folgt aussehen:
    PING 192.0.2.2 (192.0.2.2) 56(84) bytes of data.
    64 bytes from 192.0.2.2: icmp_seq=1 ttl=64 time=0.028 ms
    64 bytes from 192.0.2.2: icmp_seq=2 ttl=64 time=0.044 ms

    Wenn Sie eine Nachricht erhalten, die "64 bytes from..." enthält, war der Ping-Test erfolgreich.

    Wenn Sie eine Meldung empfangen, die "Destination Host Unreachable" enthält, wird angezeigt, dass das System noch nicht vorhanden ist.

    Wenn keine Meldung angezeigt wird, ist das System vorhanden, das ICMP-Protokoll aber nicht zulässig. Prüfen Sie alle Firewalls, Sicherheitslisten und Netzwerksicherheitsgruppen, um sicherzustellen, dass ICMP zulässig ist.

  • curl

    Verwenden Sie das Utility curl, um HTTP-Anforderungen an einen bestimmten Host, einen bestimmten Port oder eine bestimmte URL zu senden.

    • Das folgende Beispiel zeigt, dass Sie mit curl eine Verbindung zu einem Backend-Server herstellen, der einen Fehler 403 Forbidden sendet:

      $ curl -I http://backend_ip_address/health
      HTTP/1.1 403 Forbidden
      Date: Tue, 17 Mar 2021 17:47:10 GMT
      Content-Type: text/html; charset=UTF-8
      Content-Length: 3539
      Connection: keep-alive
      Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT
      ETag: "dd3-5b3c6975e7600"
      Accept-Ranges: bytes

      Im vorherigen Beispiel wird der Health Check nicht erfolgreich zurückgegeben. Dabei wird ein 403-Fehler zurückgegeben, der angibt, dass die lokalen Dateiberechtigungen für die Health-Check-Seite nicht ordnungsgemäß konfiguriert wurden.

    • Das folgende Beispiel zeigt, dass Sie mit curl eine Verbindung zu einem Backend-Server herstellen, der einen Fehler 404 Not Found sendet:
      $ curl -I http://backend_ip_address/health
      HTTP/1.1 404 Not Found
      Date: Tue, 17 Mar 2021 17:47:10 GMT
      Content-Type: text/html; charset=UTF-8
      Content-Length: 3539
      Connection: keep-alive
      Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT
      ETag: "dd3-5b3c6975e7600"
      Accept-Ranges: bytes

      Im vorherigen Beispiel wird ein 404-Fehler zurückgegeben, der angibt, dass die Health-Check-Seite am erwarteten Ort nicht vorhanden ist.

    • Das folgende Beispiel zeigt einen vorhandenen Backend-Server, bei dem entweder eine Netzwerksicherheitsgruppe, die Sicherheitslisten oder eine lokale Firewall den Traffic blockiert:
      $ curl -I backend_ip_address
      curl: (7) Failed connect to backend_ip_address:port; Connection refused
    • Das folgende Beispiel zeigt einen Backend-Server, der nicht vorhanden ist:
      $ curl -I backend_ip_address
      curl: (7) Failed connect to backend_ip_address:port; No route to host
  • Netcat

    Netcat ist ein Netzwerkutility zum Lesen aus und Schreiben in Netzwerkverbindungen mit TCP oder UDP.

    • Das folgende Beispiel zeigt, wie Sie mit dem Utility netcat auf TCP-Ebene sicherstellen, dass der Ziel-Backend-Server eine Verbindung empfangen kann:
      $ nc -vz backend_ip_address port
      Ncat: Connected to backend_ip_address:port.

      Im obigen Beispiel ist port für Verbindungen geöffnet.

    • $ nc -vn backend_ip_address port
      Ncat: Connection timed out.

      Im obigen Beispiel ist port geschlossen.

  • TCP-Speicherabzug

    Mit dem tcpdump-Utility können Sie den gesamten Traffic zu einem Backend-Server erfassen, um sicherzustellen, welcher Traffic von einem Load Balancer stammt und welcher Daten an den Load Balancer zurückgegeben werden.

    sudo tcpdump -i any -A port port src load_balancer_ip_address
    11:25:54.799014 IP 192.0.2.224.39224 > 192.0.2.224.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /health HTTP/1.1
  • OpenSSL

    Wenn SSL-Probleme zwischen der Load-Balancer-Instanz und den Backend-Servern behoben werden, wird die Verwendung des Utilitys openssl empfohlen. Dieses Utility öffnet eine SSL-Verbindung zu einem bestimmten Hostnamen und Port und druckt das SSL-Zertifikat und weitere Parameter.

    Weitere Optionen zur Fehlerbehebung:

    • -showcerts

      Mit dieser Option werden alle Zertifikate in der Zertifikatskette gedruckt, die vom Backend-Server verwendet wird. Verwenden Sie diese Option, um Probleme wie ein fehlendes Certificate-Authority-Zwischenzertifikat zu identifizieren.

    • -cipher cipher_name

      Diese Option erzwingt, dass der Client und der Server eine bestimmte Cipher Suite verwenden und hilft herauszufinden, ob der Backend-Server bestimmte Cipher zulässt.

  • Netstat

    Verwenden Sie den Befehl netstat -natp, um sicherzustellen, dass die auf dem Backend-Server ausgeführte Anwendung hochgefahren und gestartet ist. Bei TCP- oder HTTP-Traffic müssen sich Backend-Anwendung, IP-Adresse und Port im listen-Modus befinden. Wenn sich der Anwendungsport auf dem Backend-Server im listen-Modus nicht befindet, ist der TCP-Port der Anwendung nicht hochgefahren

    Um dieses Problem zu beheben, stellen Sie sicher, dass die Anwendung hochgefahren und gestartet ist, indem Sie die Anwendung oder den Backend-Server neu starten.