Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Síntoma
Los usuarios observan datos incoherentes o ningún dato de entidades como productos de API, aplicaciones, desarrolladores, mapas de valores clave (KVM) y caché de forma intermitente en la interfaz de usuario (IU) híbrida de Apigee y a través de la API Management.
Mensajes de error
No se muestra ningún mensaje de error en este caso.
Posibles motivos
Causa | Descripción |
---|---|
Los pods de Cassandra no están conectados al anillo | Es posible que los pods de Cassandra de todos los centros de datos no estén conectados al anillo de Cassandra común. |
No se ha ejecutado la reparación de nodetool | Es posible que el comando nodetool repair no se haya ejecutado periódicamente. |
Problemas de conectividad de red | Puede que haya problemas de conectividad de red entre los pods de Cassandra de diferentes centros de datos. |
Pasos de diagnóstico habituales
- Obtén información sobre una o varias entidades en las que se produce este problema (por ejemplo, productos de API o aplicaciones) mediante la API Management y comprueba si obtienes resultados diferentes al invocarla varias veces.
En la línea de comandos, usa los siguientes ejemplos para obtener tus credenciales de autenticación
gcloud
, definir variables de entorno y ejecutar comandos de la API:Obtener productos de API:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/apiproducts"
Descargar aplicaciones:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/apps"
Obtener desarrolladores:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/developers"
Obtener mapas de valores de clave (KVMs):
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/keyvaluemaps"
Get Caches:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME ENV=ENVIRONMENT_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/caches"
- Si no ve datos o ve datos diferentes al ejecutar las solicitudes de la API Management anteriores, significa que está experimentando el mismo problema que en la interfaz de usuario.
Causa: los pods de Cassandra no están conectados a los pods de Cassandra de todos los centros de datos
En una implementación híbrida de Apigee multirregional, si no todos los pods de Cassandra están conectados al mismo anillo de Cassandra, es posible que no todos los pods de Cassandra repliquen los datos. Por lo tanto, el plano de gestión no recibirá el mismo conjunto de datos para la misma consulta de forma coherente. Para analizar esta situación, sigue estos pasos:
Diagnóstico
- Lista de pods de Cassandra:
- Ejecuta el siguiente comando para comprobar el estado de todos los pods de Cassandra en cada centro de datos.
En la versión de Apigee Hybrid anterior a la 1.4.0:
# check cassandra cluster status kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool status"
En las versiones de Apigee Hybrid iguales o posteriores a la 1.4.0:
# check cassandra cluster status kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw JMXUSER_PASSWORD status"
- Comprueba el resultado del comando anterior y verifica si todos los pods de Cassandra de todos los centros de datos están conectados al anillo de Cassandra y tienen el estado Activo y normal (UN).
Ejemplo de salida de un anillo de Cassandra correcto:
kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status" apigee-cassandra-default-0 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-1 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-2 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1
Ejemplo de salida de un anillo de Cassandra en mal estado:
kubectl -n apigee get pods \ -l app=apigee-cassandra \ --field-selector=status.phase=Running \ -o custom-columns=name:metadata.name --no-headers \ | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status" apigee-cassandra-default-0 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 DL 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 DL 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 DL 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-1 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1 apigee-cassandra-default-2 Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.2.18 1.32 MiB 256 100.0% 2e6051fe-e3ed-4858-aed0-ac9be5270e97 ra-1 UN 10.0.4.10 1.49 MiB 256 100.0% 2396e17f-94fd-4d7d-b55e-35f491a5c1cc ra-1 UN 10.0.3.14 1.38 MiB 256 100.0% 579cf76e-7d6d-46c8-8319-b7cd74ee87c8 ra-1 Datacenter: dc-2 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.1.12 1.31 MiB 256 100.0% 3e9f24bf-2c10-4cfd-8217-5be6245c2b9c ra-1 UN 10.8.2.19 1.24 MiB 256 100.0% 1d2e803d-aa31-487b-9503-1e18297efc04 ra-1 UN 10.8.4.4 1.28 MiB 256 100.0% d15ffeef-7929-42c2-a3b1-a3feb85a857b ra-1
Ten en cuenta que algunos de los pods de Cassandra del resultado anterior tienen el estado DL (Down and Leaving) (Inactivo y saliendo). Para obtener más información, consulta nodetool status.
- Si observas algún pod de Cassandra con el estado DL (como se muestra en el ejemplo de salida anterior), será la causa de este problema.
- Cuando se hace una solicitud para obtener información sobre cualquier entidad a través de la interfaz de usuario híbrida o de la API Management, si la solicitud llega a alguno de los pods de Cassandra que no funcionan, no obtendrás ningún dato.
# list cassandra pods kubectl -n apigee get pods -l app=apigee-cassandra
Resolución
Sigue los pasos que se indican en la siguiente sección y asegúrate de que los pods de Cassandra del centro de datos problemático estén conectados al centro de datos original, tal como se describe en Despliegue multirregional en GKE y GKE On-Prem | Apigee.
Causa: No se ha ejecutado la reparación de nodetool
Si el comando nodetool repair
no se ha ejecutado periódicamente como tarea de mantenimiento,
es posible que los datos de los pods de Cassandra no sean coherentes. Para analizar esta situación, sigue estos pasos:
Diagnóstico
- Crea un pod de contenedor de cliente de Cassandra
apigee-hybrid-cassandra-client
para depurar.
- Lista todos los pods de Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Conéctate a uno de los pods de Cassandra mediante CQLSH:
cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
- Lista
keyspaces
:SELECT * from system_schema.keyspaces;
Ejemplo:
ddl_user@cqlsh> SELECT keyspace_name from system_schema.keyspaces; keyspace_name ----------------------------- system_auth cache_PROJECT_ID_hybrid system_schema kms_PROJECT_ID_hybrid kvm_PROJECT_ID_hybrid rtc_PROJECT_ID_hybrid system_distributed system perses system_traces quota_PROJECT_ID_hybrid (11 rows)
- Identifica el
keyspaces
del resultado anterior, enumera y consulta todas las entidades de cada centro de datos mediante CQLSH.Si la entidad que no cumple los requisitos es un producto de API:
select * from KMS_KEYSPACE.api_product;
Si la entidad que no es coherente es la aplicación (
app
):select * from KMS_KEYSPACE.app;
Si la entidad que no es coherente es
developer
:select * from KMS_KEYSPACE.developer;
Si la entidad que no es coherente es un mapa de valores clave:
select * from KVM_KEYSPACE.kvm_map_entry;
Si la entidad que no es coherente es
cache
:select * from CACHE_KEYSPACE.cache_map_entry;
- Anota el número de registros de la salida de cada una de las consultas anteriores.
- Repite los pasos anteriores con cada uno de los pods de Cassandra de todos los centros de datos.
- Compara el número de registros obtenidos de todos los pods de Cassandra.
- Identifica los pods de Cassandra que tienen datos incoherentes.
Resolución
- Lista los pods de Cassandra y conéctate al pod de Cassandra específico que tenía datos incoherentes:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra # connect to one cassandra pod kubectl -n=apigee exec -it apigee-cassandra-default-0 bash
- Ejecuta el comando
nodetool repair
en cada pod de Cassandra de cada centro de datos:En la versión de Apigee Hybrid anterior a la 1.4.0:
nodetool repair
En las versiones de Apigee Hybrid iguales o posteriores a la 1.4.0:
nodetool -u JMX_USERNAME -pw JMX-PASSWORD repair
- Vuelve a seguir la sección de diagnóstico y comprueba si los datos se han replicado en todos los pods de Cassandra de forma coherente.
- Repite los pasos anteriores con todos los pods de Cassandra que tengan datos incoherentes.
Causa: problemas de conectividad de red
Si hay problemas de conectividad de red entre los centros de datos, es posible que los datos de Cassandra no se repliquen de forma coherente en todos los pods de Cassandra del anillo de Cassandra. Para analizar esta situación, sigue estos pasos:
Diagnóstico
- Lista todos los pods de Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Ejecuta el siguiente comando
curl
y conecta por telnet al primer pod de Cassandra del segundo centro de datos (dc-2
) desde el primer pod de Cassandra del primer centro de datos (dc-1
) mediante el puerto7001
:kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- Si la conexión Telnet se ha realizado correctamente, se mostrará un resultado similar al siguiente:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * Connected to 10.0.4.10 (10.0.4.10) port 7001 (#0)
- De lo contrario, se mostrará un error similar al siguiente:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * connect to 10.0.4.10 port 7001 failed: Connection refused * Failed to connect to 10.0.4.10 port 7001: Connection refused * Closing connection 0 curl: (7) Failed to connect to 10.0.4.10 port 7001: Connection refused
Si se produce un fallo de conectividad desde el pod de Cassandra de un centro de datos al pod de Cassandra de otro centro de datos, significa que debe haber una restricción de firewall o algún tipo de problema de conectividad de red.
Resolución
- Si esta implementación híbrida de Apigee está en GKE, comprueba si hay reglas de cortafuegos definidas que bloqueen el tráfico de un centro de datos a otro y analiza el problema de conectividad de red consultando la descripción general de las reglas de cortafuegos de VPC.
- Si esta implementación híbrida de Apigee se encuentra en GKE On-Prem, colabora con el equipo de redes correspondiente y analiza el problema de conectividad de red.
Debe recoger información de diagnóstico
Si el problema persiste incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y ponte en contacto con el equipo de Asistencia de Google Cloud:
- El ID del proyecto de Google Cloud
- La organización de Apigee Hybrid
- El archivo
overrides.yaml
, que oculta la información sensible - Estado de los pods de Kubernetes en todos los espacios de nombres:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un
cluster-info dump
de Kubernetes:# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
Referencias
- Despliegue multirregional de Apigee Hybrid en GKE y GKE On-Prem
- Documentación de Kubernetes
- Comando de estado de nodetool de Cassandra