Fehler beim Zugriff auf Datastore

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

Die Bereitstellung von API-Proxyversionen über die Edge-Benutzeroberfläche oder den Aufruf der Edge Management API 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

Typische Ursachen für dieses Problem:

  1. Ursache Details Für
    Netzwerkverbindungsproblem zwischen Message Processor und Cassandra Kommunikationsfehler zwischen dem Message Processor und Cassandra aufgrund von Problemen mit der Netzwerkverbindung oder Firewallregeln. Edge Private Cloud-Nutzer
    Bereitstellungsfehler aufgrund von Cassandra-Neustarts Cassandra-Knoten waren nicht verfügbar, da sie im Rahmen der Routinewartung neu gestartet wurden. Edge Private Cloud-Nutzer
    Anstieg der Latenz von Leseanfragen auf Cassandra Wenn der oder die Cassandra-Knoten eine große Anzahl gleichzeitiger Lesevorgänge ausführt, reagiert er möglicherweise aufgrund einer Spitze der Latenz von Leseanfragen langsam. Edge Private Cloud-Nutzer
    API-Proxy-Bundle größer als 15 MB Cassandra wurde so konfiguriert, dass keine API-Proxy-Bundles mit einer Größe von mehr als 15 MB zugelassen werden. Edge Private Cloud-Nutzer

    Netzwerkverbindungsproblem zwischen Nachrichtenprozessor 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 den Apigee Edge-Support.

    1. Heben Sie die Bereitstellung des API-Proxys auf und stellen Sie ihn noch einmal bereit. Wenn ein vorübergehendes Verbindungsproblem zwischen dem Message Processor und Cassandra aufgetreten ist, verschwindet der Fehler möglicherweise.

      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 Verwaltungs-AP-Aufruf aus, um den Bereitstellungsstatus und die Komponenten auf Fehler zu prüfen:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Beispiel für die Ausgabe des Bereitstellungsstatus mit einem Fehler beim Zugriff auf den Datenspeicher auf einem der Message Processor

      {
      "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 Processor(s) neu, die den Bereitstellungsfehler anzeigen. Bei einem vorübergehenden Netzwerkproblem sollte der Fehler nicht mehr auftreten:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Wiederholen Sie Schritt 2, um zu prüfen, ob die Bereitstellung auf dem neu gestarteten Message Processor erfolgreich war. Wenn keine Fehler gefunden werden, bedeutet dies, dass das Problem behoben ist.
    5. Prüfen Sie, ob der Nachrichtenprozessor eine Verbindung zu jedem Cassandra-Knoten an 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 Konnektivität mit netcat:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Wenn Sie die Antwort „Verbindung abgelehnt“ oder „Zeitüberschreitung bei der Verbindung“ erhalten, wenden Sie sich an Ihr Network Operations-Team.
    6. Wenn das Problem weiterhin besteht, prüfen Sie, ob die einzelnen Cassandra-Knoten Port 9042 und Port 9160 überwachen:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Wenn die Cassandra-Knoten nicht Port 9042 oder 9160 überwachen, 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 Network Operations-Team.

Auflösung

Arbeiten Sie mit Ihrem Netzwerkteam zusammen und beheben Sie das Netzwerkverbindungsproblem zwischen Message Processor und Cassandra.

Bereitstellungsfehler aufgrund von Cassandra-Neustarts

Cassandra-Knoten werden normalerweise im Rahmen der Routinewartung regelmäßig neu gestartet. Wenn API-Proxys während der Cassandra-Wartungsarbeiten bereitgestellt werden, schlagen die Bereitstellungen aufgrund der Unzugänglichkeit des Cassandra-Datenspeichers fehl.

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. Überprüfen Sie, ob die Cassandra-Knoten während der Bereitstellung neu gestartet wurden.Dies kann durch Überprüfen des Cassandra-Logs oder der letzten Logs für die Startzeit des Cassandra-Knotens erfolgen:

    grepshutdown/opt/apigee/var/log/apigee-cassandra/system.log

Auflösung

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

Anstieg der Latenz von Leseanfragen in Cassandra

Eine hohe Anzahl von Lesevorgängen auf Cassandra ist von individuellen Anwendungsfällen und Traffic-Mustern auf den Proxys abhängig, die Richtlinien enthalten, die Lesezugriff von Cassandra erfordern.

Wenn beispielsweise ein GET-Aufruf für den Berechtigungstyp „refresh_token“ für OAuth-Richtlinien aufgerufen wird 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 höheren Latenz der Leseanfrage auf 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, schauen Sie sich das Cassandra-Dashboard an und überprüfen Sie das Diagramm "Leseanfragen" für den Zeitraum des Problems. Sehen Sie sich auch das Diagramm „Leseanfragelatenzen“ an.
  2. Ein alternatives Tool zum Prüfen der Leseanfragen und Leselatenzen ist der Befehl nodetool cfstats. 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. Wiederholen Sie die Bereitstellung, sobald die Cassandra-Leistung wieder normal ist. Achten Sie darauf, dass der gesamte Cassandra-Ring normal ist.
  2. (Optional) Führen Sie einen rollierenden Neustart für Message Processors durch, um sicherzustellen, dass eine Verbindung hergestellt wird.
  3. Prüfen Sie als langfristige Lösung die API-Traffic-Muster, die möglicherweise zu mehr Lesevorgängen im Cassandra-Datenspeicher beitragen würden. Wenden Sie sich an den Apigee Edge-Support, um Unterstützung bei der Fehlerbehebung zu erhalten.
  4. Wenn die vorhandenen Cassandra-Knoten für die Verarbeitung des eingehenden Traffics nicht ausreichen, 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 auf Cassandra auf 15 MB beschränkt. Wenn die Größe des API-Proxy-Bundles 15 MB übersteigt, wird beim Versuch, den API-Proxy bereitzustellen, die Meldung „Fehler beim Zugriff auf den Datenspeicher“ angezeigt.

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 prüfen Sie, ob während der Bereitstellung des jeweiligen API-Proxys Fehler aufgetreten sind.
  2. Wenn ein Fehler wie in der Abbildung unten angezeigt wird, ist der Bereitstellungsfehler darauf zurückzuführen, dass das API-Proxy-Bundle größer als 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 die Umgebungs- oder Organisationsebene verschieben

  1. Verschieben Sie beliebige Ressourcendateien wie NodeJS Script-Dateien und -Module, JavaScript-Dateien oder JAR-Dateien auf die Umgebungs- 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 verschwindet.

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

Lösung 2: Größe des API-Proxy-Bundles auf 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 Transportgröße des Cassandra-Attributs zu erhöhen, das 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 Größeneinstellung, die für das große Set erforderlich ist:
    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.