Se produjo un error cuando se accedía a Datastore

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Síntoma

La implementación de revisiones de proxy de API a través de la IU de Edge o la llamada a la API de administración de Edge 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 Message Processor y Cassandra Falla de comunicación entre el Message Processor y Cassandra debido a problemas de conectividad de red o reglas de firewall Usuarios de la nube privada de Edge
    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 de Edge
    Aumento repentino en la latencia de solicitudes 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 solicitudes de lectura. Usuarios de la nube privada de Edge
    Paquete de proxy de API de más de 15 MB Cassandra se configuró para no permitir paquetes de proxy de API de más de 15 MB de tamaño. Usuarios de la nube privada de Edge

    Problema de conectividad de red entre el Message Processor y Cassandra

    Diagnóstico

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

    1. Anula la implementación y vuelve a implementar el proxy de API. 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 ven en el entorno de producción

    2. Si el problema persiste, ejecuta la siguiente llamada a la API de administración para verificar 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

      Ejemplo de resultado del estado de la implementación que muestra el error al acceder al almacén de datos en uno de los 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. Reinicia los Message Processors que muestran el error de implementación. Si hubo un problema de red temporal, 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 Message Processor que se reinició. Si no se encuentran errores, eso indica que el problema se resolvió.
    5. Verifica si el Message Processor puede conectarse a cada nodo de Cassandra en los puertos 9042 y 9160:
      1. Si telnet está disponible, úsalo:
        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 "Connection timed out", comunícate con tu equipo de operaciones de red.
    6. Si el problema persiste, verifica si cada uno de los nodos de Cassandra está escuchando en el puerto 9042 y puerto 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
    7. Si los nodos de Cassandra no están escuchando en los puertos 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 tu equipo de operaciones de red.

Solución

Trabaja con tu equipo de operaciones de red y soluciona el problema de conectividad de red entre el 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 fallan debido a la inaccesibilidad al almacén de datos de Cassandra.

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

Diagnóstico

  1. Verifica si los nodos de Cassandra se reiniciaron durante el tiempo de la implementación.Para ello, se puede hacer revisando 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

Solución

  1. Asegúrate de que Cassandra esté en funcionamiento.
  2. Verifica si los Message Processors pueden conectarse al almacén de datos de Cassandra en los puertos 9042 y 9160.

Aumento repentino en la latencia de solicitudes de lectura en Cassandra

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

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

Diagnóstico

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

  1. Si instalaste el panel de supervisión beta, consulta el panel de Cassandra y revisa el gráfico "Read Requests" para el período del problema. También revisa el gráfico de "Read Request Latencies".
  2. La herramienta alternativa para verificar las solicitudes de lectura y las latencias de lectura es el comando nodetool cfstats. Consulta la documentación de Cassandra para obtener más detalles sobre el uso de este comando.

Solución

Nota: Solo los usuarios de la nube privada de Edge pueden realizar los siguientes pasos. Si usas la nube perimetral pública, 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 Message Processors para asegurarte de que se establezca 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 mayores lecturas en el almacén de datos de Cassandra. Comunícate con el equipo de asistencia de Apigee Edge para obtener ayuda para solucionar este problema.
  4. Si los nodos de Cassandra existentes no son adecuados para controlar el tráfico entrante, entonces aumenta la capacidad de hardware o la cantidad de nodos del almacén de datos de Cassandra de forma adecuada.

Paquete de proxy de API de más de 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 de proxy de API es superior a 15 MB, verás el mensaje "Error while accessing datastore" cuando intentes implementar el proxy de API.

Diagnóstico

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

  1. Revisa los registros del Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) y verifica 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 de proxy de API es > 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>

Solución

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

Solución 1: Mueve los archivos de recursos al nivel de entorno o de organización

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

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

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

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

Sigue estos pasos para aumentar el tamaño de la propiedad thrift frame transport size de Cassandra, 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> por 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 del 1 al 3 en todos los nodos de Cassandra del clúster.

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