Fehler beim Zugriff auf Datastore

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zuApigee X wechseln.
info

Symptom

Die Bereitstellung von API-Proxy-Revisionen über die Edge-Benutzeroberfläche oder den Edge Management API-Aufruf schlägt mit dem Fehler "Error while accessing datastore" fehl.

Fehlermeldungen

Error in deployment for environment qa.

The revision is deployed, but traffic cannot flow. Error while accessing datastore;Please retry later

Mögliche Ursachen

Die typischen Ursachen für dieses Problem sind:

  1. Ursache Details Für
    Problem mit der Netzwerkverbindung zwischen Message Processor und Cassandra Kommunikationsfehler zwischen dem Message Processor und Cassandra aufgrund von Problemen mit der Netzwerk verbindung oder Firewallregeln. Edge Private Cloud-Nutzer
    Bereitstellungsfehler aufgrund von Cassandra Neustarts Cassandra-Knoten waren nicht verfügbar, da sie im Rahmen der routinemäßigen Wartung neu gestartet wurden. Edge Private Cloud-Nutzer
    Spike bei der Latenz von Leseanfragen in Cassandra Wenn die Cassandra-Knoten eine große Anzahl gleichzeitiger Lesevorgänge ausführen, reagieren sie möglicherweise langsam, da die Latenz von Leseanfragen ansteigt. Edge Private Cloud-Nutzer
    API-Proxy-Bundle größer als 15 MB Cassandra ist so konfiguriert, dass API-Proxy-Bundles mit einer Größe von mehr als 15 MB nicht zulässig sind. Edge Private Cloud-Nutzer

    Problem mit der Netzwerkverbindung zwischen Message Processor und Cassandra

    Diagnose

    Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an Apigee Edge-Support.

    1. Heben Sie die Bereitstellung des API-Proxys auf und stellen Sie ihn neu bereit. Wenn es ein vorübergehendes Problem mit der Verbindung zwischen dem Message Processor und Cassandra gab, ist der Fehler möglicherweise behoben.

      WARNUNG: Heben Sie die Bereitstellung nicht auf, wenn die Fehler in der Produktionsumgebung auftreten.

    2. Wenn das Problem weiterhin besteht, führen Sie den folgenden Management API-Aufruf aus, um den Bereitstellungsstatus zu prüfen und zu sehen, ob Fehler in einer der Komponenten auftreten:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments

      Beispiel für eine Bereitstellungsstatusausgabe mit dem Fehler „Error while accessing datastore“ auf einem der Message Processors

      {
      "environment" : [ {
      "aPIProxy" : [ {
      "name" : "simple-python",
      "revision" : [ {
      "configuration" : {
      "basePath" : "/",
      "steps" : [ ]
      },
      "name" : "1",
      "server" : [ {
      "status" : "deployed",
      "type" : [ "message-processor" ],
      "uUID" : "2acdd9b2-17de-4fbb-8827-8a2d4f3d7ada"
      }, {
      "error" : "Error while accessing datastore;Please retry later",
      "errorCode" : "datastore.ErrorWhileAccessingDataStore",
      "status" : "error",
      "type" : [ "message-processor" ],
      "uUID" : "42772085-ca67-49bf-a9f1-c04f2dc1fce3"
      } 
      "state" : "error"
      } 
    3. Starten Sie die Message Processors neu, bei denen der Bereitstellungsfehler auftritt. Wenn es ein vorübergehendes Netzwerkproblem gab, sollte der Fehler behoben sein:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    4. Wiederholen Sie Schritt 2, um zu sehen, ob die Bereitstellung auf dem neu gestarteten Message Processor erfolgreich ist. Wenn keine Fehler gefunden werden, ist das Problem behoben.
    5. Prüfen Sie, ob der Message Processor eine Verbindung zu jedem Cassandra-Knoten auf Port 9042 und 9160:
        herstellen kann:
      1. Wenn Telnet verfügbar ist, verwenden Sie Telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
      2. Wenn Telnet nicht verfügbar ist, prüfen Sie die Verbindung mit Netcat so:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
      3. Wenn Sie die Antwort „Connection Refused“ oder „Connection timed out“ erhalten, wenden Sie sich an Ihr Netzwerkbetriebsteam.
    6. Wenn das Problem weiterhin besteht, prüfen Sie, ob jeder der Cassandra-Knoten auf dem Port 9042 und Port 9160 wartet:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
    7. Wenn die Cassandra-Knoten nicht auf Port 9042 oder 9160 warten, starten Sie die entsprechenden Cassandra-Knoten neu:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    8. Wenn das Problem weiterhin besteht, wenden Sie sich an Ihr Netzwerkbetriebsteam.

Auflösung

Arbeiten Sie mit Ihrem Netzwerkbetriebsteam zusammen, um das Problem mit der Netzwerkverbindung zwischen Message Processor und Cassandra zu beheben.

Bereitstellungsfehler aufgrund von Cassandra-Neustarts

Cassandra-Knoten werden in der Regel im Rahmen der routinemäßigen Wartung regelmäßig neu gestartet. Wenn API Proxys während der Cassandra-Wartung bereitgestellt werden, schlagen die Bereitstellungen fehl, da der Zugriff auf den Cassandra-Datenspeicher nicht möglich ist.

Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an den Apigee Edge-Support.

Diagnose

  1. Prüfen Sie, ob die Cassandra-Knoten während der Bereitstellung neu gestartet wurden.Dazu können Sie das Cassandra-Log oder die Logs der letzten Startzeit des Cassandra-Knotens prüfen:

    grep "shutdown" /opt/apigee/var/log/apigee-cassandra/system.log

Auflösung

  1. Prüfen Sie, ob Cassandra ausgeführt wird.
  2. Prüfen Sie, ob Message Processors eine Verbindung zum Cassandra-Datenspeicher auf Port 9042 und 9160 herstellen können.

Spike bei der Latenz von Leseanfragen in Cassandra

Eine hohe Anzahl von Lesevorgängen in Cassandra hängt von den einzelnen Anwendungsfällen und Traffic-Mustern der Proxys ab, die Richtlinien enthalten, die Lesezugriff von Cassandra erfordern.

Wenn beispielsweise ein GET-Aufruf für den Autorisierungstyp „refresh_token“ für OAuth-Richtlinien erfolgt und das Aktualisierungstoken mit vielen Zugriffstokens verknüpft ist, kann dies zu einer hohen Anzahl von Lesevorgängen aus Cassandra führen. Dies kann zu einer Erhöhung der Latenz von Leseanfragen in Cassandra führen.

Diagnose

Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an den Apigee Edge-Support.

  1. Wenn Sie das Beta-Monitoring-Dashboard installiert haben, sehen Sie sich das Cassandra-Dashboard an und prüfen Sie das Diagramm „Read Requests“ (Leseanfragen) für den Zeitraum des Problems. Prüfen Sie auch das Diagramm für „Read Request Latencies“ (Latenzen von Leseanfragen).
  2. Ein alternatives Tool zum Prüfen der Leseanfragen und Leselatenzen ist der nodetool cfstats Befehl. Weitere Informationen zur Verwendung dieses Befehls finden Sie in der Cassandra Dokumentation.

Auflösung

Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an den Apigee Edge-Support.

  1. Versuchen Sie die Bereitstellung noch einmal, wenn die Cassandra-Leistung wieder normal ist. Achten Sie darauf, dass der gesamte Cassandra-Ring normal funktioniert.
  2. Optional: Führen Sie einen rollierenden Neustart der Message Processors durch, um sicherzustellen, dass eine Verbindung hergestellt wird.
  3. Als langfristige Lösung sollten Sie die API-Traffic-Muster prüfen, die möglicherweise zu mehr Lesevorgängen im Cassandra-Datenspeicher beitragen. Wenden Sie sich an den Apigee Edge-Support, um Hilfe bei der Fehlerbehebung zu erhalten.
  4. Wenn die vorhandenen Cassandra-Knoten nicht ausreichen, um den eingehenden Traffic zu verarbeiten, dann erhöhen Sie entweder die Hardwarekapazität oder die Anzahl der Cassandra-Datenspeicherknoten entsprechend.

API Proxy-Bundle größer als 15 MB

Die Größe von API-Proxy-Bundles ist in Cassandra auf 15 MB beschränkt. Wenn die Größe des API Proxy-Bundles mehr als 15 MB beträgt, wird beim Versuch, den API-Proxy bereitzustellen, der Fehler „Error while accessing datastore“ angezeigt, wenn Sie dies versuchen.

Diagnose

Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an den Apigee Edge-Support.

  1. Prüfen Sie die Message Processor-Logs (/opt/apigee/var/log/edge-message-processor/logs/system.log) und sehen Sie nach, ob bei der Bereitstellung des jeweiligen API-Proxys Fehler aufgetreten sind.
  2. Wenn ein Fehler ähnlich dem in der folgenden Abbildung auftritt, liegt der Bereitstellungsfehler daran, dass die Größe des API-Proxy-Bundles > 15 MB ist.
    2016-03-23 18:42:18,517 main ERROR DATASTORE.CASSANDRA - AstyanaxCassandraClient.fetchDynamicCompositeColumns() : Error while querying columnfamily : [api_proxy_revisions_r21, adevegowdat@v1-node-js] for rowkey:{}
    com.netflix.astyanax.connectionpool.exceptions.TransportException: TransportException: [host=None(0.0.0.0):0, latency=159(486), attempts=3]org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)!
            at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:197) ~[astyanax-thrift-1.56.43.jar:na]
            at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65) ~[astyanax-thrift-1.56.43.jar:na]
    ...<snipped>
            Caused by: org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)!
            at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:137) ~[libthrift-0.9.1.jar:0.9.1]
            at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) ~[libthrift-0.9.1.jar:0.9.1]
            at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) ~[libthrift-0.9.1.jar:0.9.1]
    ...<snipped>

Auflösung

Das API-Proxy-Bundle ist groß, wenn zu viele Ressourcendateien vorhanden sind. Verwenden Sie die folgenden Lösungen, um dieses Problem zu beheben:

Lösung 1: Ressourcendateien auf Umgebungsebene oder Organisationsebene verschieben

  1. Verschieben Sie alle Ressourcendateien wie NodeJS-Skriptdateien und ‑Module, JavaScript-Dateien, JAR-Dateien auf Umgebungsebene oder Organisationsebene. Weitere Informationen zu Ressourcendateien finden Sie in der Edge-Dokumentation.
  2. Stellen Sie den API-Proxy bereit und prüfen Sie, ob der Fehler behoben ist.

Wenn das Problem weiterhin besteht oder Sie die Ressourcendateien aus irgendeinem Grund nicht auf Umgebungsebene oder Organisationsebene verschieben können, wenden Sie Lösung 2 an.

Lösung 2: Größe des API-Proxy-Bundles in Cassandra erhöhen

Hinweis:Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn Sie Edge Public Cloud verwenden, wenden Sie sich an den Apigee Edge-Support.

Führen Sie die folgenden Schritte aus, um die Größe der Cassandra-Eigenschaft thrift frame transport size zu erhöhen, die die maximale Größe des in Edge zulässigen API-Proxy-Bundles steuert:

  1. Erstellen Sie die folgende Datei, falls sie nicht vorhanden ist:
    /opt/apigee/customer/application/cassandra.properties
  2. Fügen Sie der Datei die folgende Zeile hinzu und ersetzen Sie <size> durch die für das große Bundle erforderliche Größenfestlegung:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
  3. Starten Sie Cassandra neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  4. Wiederholen Sie die Schritte 1 bis 3 auf allen Cassandra-Knoten im Cluster.

Wenn das Problem weiterhin besteht, wenden Sie sich an den Apigee Edge-Support.