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:
-
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.
- 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.
- 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" }
- 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
- 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.
- Prüfen Sie, ob der Message Processor eine Verbindung zu jedem Cassandra-Knoten auf Port 9042
und 9160:
- herstellen kann:
- Wenn Telnet verfügbar ist, verwenden Sie Telnet:
telnet <Cassandra_IP> 9042 telnet <Cassandra_IP> 9160
- Wenn Telnet nicht verfügbar ist, prüfen Sie die Verbindung mit Netcat so:
nc -vz <Cassandra_IP> 9042 nc -vz <Cassandra_IP> 9160
- Wenn Sie die Antwort „Connection Refused“ oder „Connection timed out“ erhalten, wenden Sie sich an Ihr Netzwerkbetriebsteam.
- Wenn Telnet verfügbar ist, verwenden Sie Telnet:
- 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
- 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
- Wenn das Problem weiterhin besteht, wenden Sie sich an Ihr Netzwerkbetriebsteam.
- 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.
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
- 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
- Prüfen Sie, ob Cassandra ausgeführt wird.
- 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.

- 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).
- Ein alternatives Tool zum Prüfen der Leseanfragen und Leselatenzen ist der
nodetool cfstatsBefehl. 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.
- Versuchen Sie die Bereitstellung noch einmal, wenn die Cassandra-Leistung wieder normal ist. Achten Sie darauf, dass der gesamte Cassandra-Ring normal funktioniert.
- Optional: Führen Sie einen rollierenden Neustart der Message Processors durch, um sicherzustellen, dass eine Verbindung hergestellt wird.
- 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.
- 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.
- 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. - 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
- 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.
- 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:
- Erstellen Sie die folgende Datei, falls sie nicht vorhanden ist:
/opt/apigee/customer/application/cassandra.properties
- 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>
- Starten Sie Cassandra neu:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 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.