Errore di accesso a Datastore

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

Il deployment delle revisioni del proxy API tramite la UI o la chiamata API Edge Management non riesce e viene visualizzato l'errore "Error while accessing datastore".

Messaggi di errore

Error in deployment for environment qa.

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

Possibili cause

Le cause tipiche di questo problema sono:

  1. Causa Dettagli Per
    Problema di connettività di rete tra il processore di messaggi e Cassandra Errore di comunicazione tra il processore di messaggi e Cassandra a causa di problemi di connettività di rete o regole firewall. Utenti del cloud privato perimetrale
    Errori di deployment dovuti ai riavvii di Cassandra I nodi Cassandra non sono disponibili perché sono stati riavviati nell'ambito della manutenzione di routine. Utenti del cloud privato perimetrale
    Picco di latenza delle richieste di lettura su Cassandra Se i nodi Cassandra stanno eseguendo un numero elevato di letture simultanee, potrebbero rispondere lentamente a causa di un picco di latenza delle richieste di lettura. Utenti del cloud privato perimetrale
    Bundle proxy API superiore a 15 MB Cassandra è stata configurata in modo da non consentire bundle proxy API di dimensioni superiori a 15 MB. Utenti del cloud privato perimetrale

    Problema di connettività di rete tra il processore di messaggi e Cassandra

    Diagnostica

    Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

    1. Annulla il deployment del proxy API e ripetine il deployment. Se si è verificato un problema temporaneo di connettività tra il processore di messaggi e Cassandra, l'errore potrebbe scomparire.

      AVVISO: non annullare il deployment se gli errori vengono rilevati nell'ambiente di produzione.

    2. Se il problema persiste, esegui la chiamata AP di gestione riportata di seguito per verificare lo stato del deployment e controllare se sono presenti errori nei componenti:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Esempio di output dello stato del deployment che mostra Errore durante l'accesso al datastore su uno dei processori di messaggi

      {
      "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. Riavvia i processori di messaggi che mostrano l'errore di deployment. Se si è verificato un problema di rete temporaneo, l'errore dovrebbe scomparire:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Ripeti il passaggio 2 per verificare se il deployment viene eseguito correttamente sul processore di messaggi che è stato riavviato. Se non vengono trovati errori, significa che il problema è stato risolto.
    5. Verifica se il processore di messaggi è in grado di connettersi a ciascun nodo Cassandra sulle porte 9042 e 9160:
      1. Se Telnet è disponibile, utilizza Telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Se Telnet non è disponibile, utilizza netcat per verificare la connettività come segue:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Se ricevi la risposta "Connessione rifiutata" o "Sessione di connessione scaduta", coinvolgi il team delle operazioni di rete.
    6. Se il problema persiste, controlla se ciascuno dei nodi Cassandra è in ascolto sulla porta 9042 e sulla porta 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Se i nodi Cassandra non sono in ascolto sulla porta 9042 o 9160, riavvia i nodi Cassandra specifici:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. Se il problema persiste, rivolgiti al team delle operazioni di rete.

Risoluzione

Collabora con il team operativo di rete e risolvi il problema di connettività di rete tra il processore di messaggi e Cassandra.

Errori di deployment dovuti ai riavvii di Cassandra

In genere, i nodi Cassandra vengono riavviati periodicamente nell'ambito della manutenzione di routine. Se durante le operazioni di manutenzione di Cassandra viene eseguito il deployment dei proxy API, questi non riescono a causa dell'inaccessibilità al datastore Cassandra.

Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

Diagnostica

  1. Verifica se i nodi Cassandra sono stati riavviati durante il deployment.A questo scopo, controlla il log di Cassandra o i log dei tempi di avvio più recenti del nodo Cassandra:

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

Risoluzione

  1. Assicurati che Cassandra sia attivo e in esecuzione.
  2. Verifica se i processori di messaggi sono in grado di connettersi al datastore Cassandra sulle porte 9042 e 9160.

Picco della latenza delle richieste di lettura su Cassandra

Un numero elevato di letture su Cassandra dipende dai singoli casi d'uso e dai modelli di traffico sui proxy che contengono criteri che richiedono l'accesso in lettura a Cassandra.

Ad esempio, se per i criteri OAuth viene richiamata una chiamata GET al tipo di autorizzazione refresh_token per i criteri OAuth e il token di aggiornamento è associato a molti token di accesso, questo potrebbe comportare un numero elevato di letture da Cassandra. Ciò può causare un aumento della latenza delle richieste di lettura su Cassandra.

Diagnosi

Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

  1. Se hai installato la dashboard di monitoraggio beta, controlla la dashboard di Cassandra ed esamina il grafico "Richieste di lettura" per conoscere il periodo in cui si è verificato il problema. Esamina anche il grafico "Lettura Latenze di richiesta".
  2. Uno strumento alternativo per controllare le richieste di lettura e le latenze di lettura è il comando nodetool cfstats. Consulta la documentazione di Cassandra per maggiori dettagli sull'utilizzo di questo comando.

Risoluzione

Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

  1. Prova a eseguire di nuovo il deployment una volta che le prestazioni di Cassandra sono tornate alla normalità. Assicurati che l'intero anello di Cassandra sia normale.
  2. (Facoltativo) Esegui un riavvio in sequenza dei processori di messaggi per assicurarti che la connettività sia stabilita.
  3. Per una soluzione a lungo termine, esamina i pattern di traffico delle API che potrebbero contribuire a un aumento delle letture nel datastore di Cassandra. Contatta l'assistenza Apigee Edge per ricevere supporto per la risoluzione del problema.
  4. Se i nodi Cassandra esistenti non sono appropriati per gestire il traffico in entrata, aumenta la capacità hardware o il numero di nodi del datastore Cassandra in modo appropriato.

Bundle proxy API superiore a 15 MB

Le dimensioni dei bundle proxy API sono limitate a 15 MB su Cassandra. Se le dimensioni del bundle proxy API sono superiori a 15 MB, vedrai il messaggio "Errore durante l'accesso al datastore" quando tenti di eseguire il deployment del proxy API.

Diagnostica

Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

  1. Controlla i log del processore di messaggi (/opt/apigee/var/log/edge-message-processor/logs/system.log) e controlla se si sono verificati errori durante il deployment del proxy API specifico.
  2. Se visualizzi un errore simile a quello mostrato nella figura seguente, l'errore di deployment è dovuto al fatto che la dimensione del bundle proxy API è superiore a 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>
    

Risoluzione

Il bundle proxy API sarà di grandi dimensioni se sono presenti troppi file di risorse. Per risolvere il problema, utilizza le seguenti soluzioni:

Soluzione 1: sposta i file di risorse a livello di ambiente o organizzazione

  1. Sposta qualsiasi file di risorse, ad esempio file e moduli di script NodeJS, file JavaScript o file JAR, a livello di ambiente o organizzazione. Per maggiori informazioni sui file delle risorse, consulta la documentazione di Edge.
  2. Esegui il deployment del proxy API e controlla se l'errore scompare.

Se il problema persiste o se per qualche motivo non riesci a spostare i file delle risorse a livello di ambiente o di organizzazione, applica la soluzione n. 2.

Soluzione 2: aumenta le dimensioni del bundle proxy API su Cassandra

Nota: solo gli utenti del cloud privato Edge possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

Segui questi passaggi per aumentare le dimensioni delle dimensioni di trasporto dei frame usati della proprietà Cassandra, che controlla la dimensione massima del bundle proxy API consentita in Edge:

  1. Crea il seguente file, se non esiste:
    /opt/apigee/customer/application/cassandra.properties
    
  2. Aggiungi la riga seguente al file, sostituendo <size> con le impostazioni delle dimensioni necessarie per il pacchetto grande:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. Riavvia Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. Ripeti i passaggi da 1 a 3 su tutti i nodi Cassandra nel cluster.

Se il problema persiste, contatta l'assistenza Apigee Edge.