Se produjo un error cuando se accedía a Datastore

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Síntoma

La implementación de las revisiones del proxy de la API mediante la IU de Edge o la llamada a la API de Edge Management falla con el error "Error while accessing datastore".

Mensajes de error

Error in deployment for environment qa.

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

Causas posibles

Las causas típicas de este problema son las siguientes:

  1. Causa Detalles Para
    Problema de conectividad de red entre el procesador de mensajes y Cassandra Error de comunicación entre el procesador de mensajes y Cassandra debido a problemas de conectividad de red o reglas de firewall. Usuarios de la nube privada perimetral
    Errores de implementación debido a reinicios de Cassandra Los nodos de Cassandra no estaban disponibles porque se reiniciaron como parte del mantenimiento de rutina. Usuarios de la nube privada perimetral
    Aumento repentino de la latencia de la solicitud de lectura en Cassandra Si los nodos de Cassandra realizan una gran cantidad de lecturas simultáneas, es posible que respondan con lentitud debido al aumento repentino en la latencia de la solicitud de lectura. Usuarios de la nube privada perimetral
    Paquete de proxy de API superior a 15 MB Cassandra se configuró para no permitir paquetes de proxy de API de más de 15 MB. Usuarios de la nube privada perimetral

    Problema de conectividad de red entre el procesador de mensajes y Cassandra

    Diagnóstico

    Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si usas Edge Public Cloud, comunícate con el equipo de Asistencia de Apigee Edge.

    1. Anula la implementación del proxy de API y vuelve a implementarlo. Si hubo un problema de conectividad temporal entre el Message Processor y Cassandra, es posible que el error desaparezca.

      ADVERTENCIA: No anules la implementación si los errores se muestran en el entorno de producción.

    2. Si el problema persiste, ejecuta la siguiente llamada al AP de administración para comprobar el estado de la implementación y comprobar si hay errores en algún componente:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Resultado de ejemplo del estado de la implementación que muestra Error durante el acceso al almacén de datos en uno de los 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. Reinicia los procesadores de mensajes que muestran el error de implementación. Si hubo un problema temporal de red, el error debería desaparecer:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Repite el paso 2 para ver si la implementación se realiza correctamente en el procesador de mensajes que se reinició. Si no se encontraron errores, significa que se resolvió el problema.
    5. Verifica si el procesador de mensajes puede conectarse a cada nodo de Cassandra en los puertos 9042 y 9160:
      1. Si Telnet está disponible, usa esta función:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Si Telnet no está disponible, usa netcat para verificar la conectividad de la siguiente manera:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Si recibes la respuesta “Connection Refused” o “Se agotó el tiempo de espera de la conexión”, comunícate con el equipo de operaciones de red.
    6. Si el problema persiste, verifica si cada uno de los nodos de Cassandra escuchan en los puertos 9042 y 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Si los nodos de Cassandra no escuchan en el puerto 9042 o 9160, reinicia los nodos de Cassandra específicos:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. Si el problema persiste, comunícate con el equipo de operaciones de red.

Resolución

Trabaja con tu equipo de operaciones de red y soluciona el problema de conectividad de red entre Message Processor y Cassandra.

Errores de implementación debido a reinicios de Cassandra

Los nodos de Cassandra suelen reiniciarse periódicamente como parte del mantenimiento de rutina. Si los proxies de API se implementan durante el trabajo de mantenimiento de Cassandra, las implementaciones fallarán debido a la inaccesibilidad al almacén de datos de Cassandra.

Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si estás en la nube pública de Edge, comunícate con el equipo de asistencia de Apigee Edge.

Diagnóstico

  1. Verifica si los nodos de Cassandra se reiniciaron durante la implementación.Para ello, verifica el registro de Cassandra o los registros de tiempo de inicio más recientes del nodo de Cassandra:

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

Resolución

  1. Asegúrate de que Cassandra esté funcionando.
  2. Comprueba si los procesadores de mensajes pueden conectarse al almacén de datos de Cassandra en los puertos 9042 y 9160.

Aumento repentino de la latencia de la solicitud de lectura en Cassandra

Una gran cantidad de lecturas en Cassandra depende de casos prácticos individuales y patrones de tráfico en los proxies que contienen políticas que requieren acceso de lectura desde Cassandra.

Por ejemplo, si se llama a una llamada GET a un tipo de otorgamiento de refresh_token para las políticas de OAuth y el token de actualización está asociado con muchos tokens de acceso, esto puede generar grandes cantidades de lecturas de Cassandra. Esto puede provocar un aumento en la latencia de la solicitud de lectura en Cassandra.

Diagnóstico

Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si estás en la nube pública de Edge, comunícate con el equipo de asistencia de Apigee Edge.

  1. Si instalaste el panel de supervisión Beta, observa el panel de Cassandra y revisa el gráfico "Solicitudes de lectura" del período del problema. Revisa también el gráfico “Leer latencias de solicitud”.
  2. El comando nodetool cfstats es una herramienta alternativa para verificar las solicitudes de lectura y las latencias de lectura. Consulta la documentación de Cassandra para obtener más detalles sobre cómo usar este comando.

Resolución

Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si estás en la nube pública de Edge, comunícate con el equipo de asistencia de Apigee Edge.

  1. Vuelve a intentar la implementación una vez que el rendimiento de Cassandra vuelva a la normalidad. Asegúrate de que todo el anillo de Cassandra sea normal.
  2. (Opcional) Realiza un reinicio progresivo en los procesadores de mensajes para asegurarte de que se haya establecido la conectividad.
  3. Para obtener una solución a largo plazo, revisa los patrones de tráfico de la API que podrían contribuir a lecturas superiores en el almacén de datos de Cassandra. Comunícate con el equipo de asistencia de Apigee Edge para obtener ayuda con la solución de este problema.
  4. Si los nodos de Cassandra existentes no son adecuados para controlar el tráfico entrante, aumenta la capacidad del hardware o la cantidad de nodos del almacén de datos de Cassandra de forma adecuada.

Paquete de proxy de API superior a 15 MB

El tamaño de los paquetes de proxy de API está restringido a 15 MB en Cassandra. Si el tamaño del paquete del proxy de la API es superior a 15 MB, verás el mensaje “Error al acceder al almacén de datos” cuando intentes implementar el proxy de API.

Diagnóstico

Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si estás en la nube pública de Edge, comunícate con el equipo de asistencia de Apigee Edge.

  1. Verifica los registros de Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) y comprueba si se produjeron errores durante la implementación del proxy de API específico.
  2. Si ves un error similar al que se muestra en la siguiente figura, el error de implementación se debe a que el tamaño del paquete del proxy de la API es superior 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>
    

Resolución

El paquete del proxy de la API será grande si hay demasiados archivos de recursos. Usa las siguientes soluciones para abordar este problema:

Solución 1: Trasladar los archivos de recursos al nivel de la organización o del entorno

  1. Transfiere cualquiera de los archivos de recursos, como archivos y módulos de Node.js, archivos y módulos, archivos JavaScript o JAR al nivel de organización o de entorno. Para obtener más información sobre los archivos de recursos, consulta la documentación de Edge.
  2. Implementa el proxy de la API y observa si el error desaparece.

Si el problema persiste o no puedes mover los archivos de recursos al nivel de la organización o del entorno por algún motivo, aplica la solución n.o 2.

Solución 2: Aumentar el tamaño del paquete del proxy de la API en Cassandra

Nota: Solo los usuarios de la nube privada perimetral pueden realizar los siguientes pasos. Si estás en la nube pública de Edge, comunícate con el equipo de asistencia de Apigee Edge.

Sigue estos pasos para aumentar el tamaño de la propiedad de Cassandra tamaño de transporte de marcos de segunda mano, que controla el tamaño máximo del paquete de proxy de API permitido en Edge:

  1. Crea el siguiente archivo, si no existe:
    /opt/apigee/customer/application/cassandra.properties
    
  2. Agrega la siguiente línea al archivo y reemplaza <size> con la configuración de tamaño necesaria para el paquete grande:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. Reinicia Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. Repite los pasos 1 a 3 en todos los nodos de Cassandra del clúster.

Si el problema persiste, comunícate con el equipo de asistencia de Apigee Edge.