Fehler beim Zugriff auf Datastore

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

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

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
    Problem mit der Netzwerkverbindung zwischen Message Processor und Cassandra. Kommunikationsfehler zwischen dem Message Processor und Cassandra aufgrund eines Netzwerks Verbindungsprobleme oder Firewallregeln. Edge Private Cloud-Nutzer
    Cassandra-Bereitstellungsfehler bei der Bereitstellung Neustarts Cassandra-Knoten war nicht verfügbar, da er im Rahmen der Routine neu gestartet wurde Wartung. Edge Private Cloud-Nutzer
    Anstieg der Leseanfragelatenz auf Cassandra Wenn der oder die Cassandra-Knoten eine große Anzahl gleichzeitiger Lesevorgänge ausführen, reagiert möglicherweise aufgrund einer Spitze der Leseanfragelatenz langsam. Edge Private Cloud-Nutzer
    API-Proxy-Bundle größer als 15 MB Cassandra wurde so konfiguriert, dass keine API-Proxy-Bundles zulässig sind, die größer als 15 MB in Größe. Edge Private Cloud-Nutzer

    Problem mit der Netzwerkverbindung zwischen Nachricht Prozessor und Cassandra

    Diagnose

    Hinweis: Nur Edge Private Cloud-Nutzer können die folgenden Schritte ausführen. Wenn 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. Bei einem vorübergehenden Verbindungsproblem zwischen Message Processor und Cassandra, dann verschwindet der Fehler möglicherweise nicht mehr.

      WARNUNG:Heben Sie die Bereitstellung nicht auf, wenn die Fehler in der Produktionsphase auftreten. zu verbessern.

    2. Wenn das Problem weiterhin besteht, führen Sie den folgenden Verwaltungs-AP-Aufruf aus, um die Bereitstellungsstatus prüfen und prüfen, ob Komponenten fehlerhaft sind:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Beispielausgabe des Bereitstellungsstatus mit Fehler beim Zugriff auf den Datenspeicher 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, die den Bereitstellungsfehler anzeigen. Wenn es eine vorübergehende Netzwerkproblem behoben wurde, sollte der Fehler nicht mehr auftreten:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Wiederholen Sie Schritt 2, um zu sehen, ob die Bereitstellung auf dem Message Processor erfolgreich war, neu gestartet. Wenn keine Fehler gefunden wurden, bedeutet dies, dass das Problem behoben wurde.
    5. Prüfen Sie, ob der Message Processor zu jedem Cassandra-Knoten an Port 9042 eine Verbindung herstellen kann und 9160: <ph type="x-smartling-placeholder">
        </ph>
      1. Wenn Telnet verfügbar ist, verwenden Sie Telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Falls Telnet nicht verfügbar ist, prüfen Sie die Verbindung mit Netcat wie folgt:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Wenn Sie die Antwort „Connection Refused“ erhalten oder "Zeitüberschreitung der Verbindung" und Ihr Netzwerk-Operations-Team.
    6. Wenn das Problem weiterhin besteht, prüfen Sie, ob jeder der Cassandra-Knoten den Port 9042 und Port 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Wenn die Cassandra-Knoten Port 9042 oder 9160 nicht überwachen, starten Sie den bestimmte Cassandra-Knoten:
      /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 Network Operations-Team zusammen und beheben Sie das Netzwerkverbindungsproblem zwischen Message Processor und Cassandra.

Bereitstellungsfehler aufgrund von Cassandra-Neustarts

Cassandra-Knoten werden im Rahmen der routinemäßigen Wartung in der Regel regelmäßig neu gestartet. Wenn API während der Cassandra-Wartungsarbeiten bereitgestellt werden, schlagen die Bereitstellungen aufgrund Unzugänglichkeit des Cassandra-Datenspeichers.

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

Diagnose

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

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

Auflösung

  1. Prüfen Sie, ob Cassandra betriebsbereit ist.
  2. Prüfen Sie, ob Message Processors über Port 9042 und den Cassandra-Datenspeicher eine Verbindung herstellen können. 9160.

Anstieg der Leseanfragelatenz auf Cassandra

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

Beispiel: Wenn ein GET-Aufruf für den Berechtigungstyp „refresh_token“ für OAuth-Richtlinien aufgerufen wird und der Aktualisierungstoken mit vielen Zugriffstokens verknüpft ist, kann dies zu einer hohen Anzahl von liest von Cassandra vor. 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 die in Edge Public Cloud sind, wenden Sie sich an den Apigee Edge-Support.

  1. Wenn Sie das Beta-Monitoring-Dashboard installiert haben, schauen Sie sich das Cassandra-Dashboard an. finden Sie unter „Leseanfragen“ Diagramm für den Zeitraum des Problems. Sehen Sie sich auch das Diagramm Anforderungslatenzen".
  2. Alternativ können Sie mit dem Befehl nodetool cfstats die Leseanfragen und -latenzen prüfen. Siehe Cassandra Dokumentation finden Sie weitere Informationen zur Verwendung dieses Befehls.

Auflösung

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

  1. Wiederholen Sie die Bereitstellung, sobald die Cassandra-Leistung wieder normal funktioniert. Achten Sie darauf, dass der gesamte Der Cassandra-Ring ist normal.
  2. (Optional) Führen Sie einen rollierenden Neustart für Message Processors durch, um sicherzustellen, dass die Verbindung funktioniert. festgelegt ist.
  3. Überprüfen Sie für eine langfristige Lösung die API-Traffic-Muster, die möglicherweise zu höhere Lesevorgänge im Cassandra-Datenspeicher. Wenden Sie sich an den Apigee Edge-Support, um Unterstützung bei der Behebung dieses Problems zu erhalten.
  4. Wenn die vorhandenen Cassandra-Knoten für die Verarbeitung des eingehenden Traffics nicht ausreichen, Erhöhe entweder die Hardwarekapazität oder die Anzahl der Cassandra-Datenspeicherknoten. angemessen.

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 der API Proxy-Bundle größer als 15 MB ist, wird "Fehler beim Zugriff auf den Datenspeicher" angezeigt. wenn du versuchen, den API-Proxy bereitzustellen.

Diagnose

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

  1. Message Processor-Logs prüfen (/opt/apigee/var/log/edge-message-processor/logs/system.log) und prüfen Sie, ob es Alle Fehler, die während der Bereitstellung des spezifischen API-Proxys aufgetreten sind.
  2. Wenn ein Fehler wie in der Abbildung unten angezeigt wird, ist der Bereitstellungsfehler liegt, weil die API-Proxy-Bundle-Größe > 15 MB.
    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 Folgendes: Lösungen zur Lösung dieses Problems:

Lösung 1: Ressourcendateien auf die Umgebungs- oder Organisationsebene verschieben

  1. Sie können alle Ressourcendateien verschieben, z. B. NodeJS-Skriptdateien und -module, JavaScript-Dateien, JAR-Dateien auf Umgebungs- oder Organisationsebene. Weitere Informationen zu Ressourcendateien finden Sie unter Die 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 nicht in die Umgebung oder Organisation verschieben können Ebene aus und wenden Sie dann Lösung Nr. 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 die in Edge Public Cloud sind, wenden Sie sich an den Apigee Edge-Support.

Befolgen Sie diese Schritte, um die Größe der Cassandra-Eigenschaft Secondhandframes zu erhöhen. Transportgröße, die die maximale Größe des API-Proxy-Bundles steuert, das in Rand:

  1. Erstellen Sie die folgende Datei, falls noch nicht vorhanden:
    /opt/apigee/customer/application/cassandra.properties
    
  2. Fügen Sie der Datei die folgende Zeile hinzu und ersetzen Sie dabei <size>. mit der Größeneinstellung, die für das große Bundle:
    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.