Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
Síntoma
Los usuarios observan datos incoherentes o no se incluyen datos para entidades como productos de API, apps, desarrolladores, mapas de clave-valor (KVM) y almacenamiento en caché de forma intermitente en la interfaz de usuario híbrida (IU) de Apigee y a través de la API de administración.
Mensajes de error
No se conocen mensajes de error en esta situación.
Causas posibles
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 común de Cassandra. |
No se ejecutó la reparación de nodetool. | Es posible que el comando nodetool repair no se ejecute de forma periódica. |
Problemas con la conectividad de red | Es posible que haya problemas de conectividad de red entre Pods de Cassandra en centros de datos diferentes. |
Pasos comunes de diagnóstico
- Recupera la información sobre una o más entidades para las que ves este problema, como productos de API, apps, entre otros, mediante la API de administración y verifica si puedes ver o no resultados diferentes cuando se los invoca varias veces.
En la línea de comandos, usa los siguientes ejemplos para obtener tus credenciales de autenticación
gcloud
, configurar variables de entorno y ejecutar comandos de API:Obtén 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"
Obtén apps:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/apps"
Obtén desarrolladores:
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/developers"
Obtén mapas de clave-valor (KVM):
TOKEN=$(gcloud auth print-access-token) ORG=ORGANIZATION_NAME curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG/keyvaluemaps"
Obtén almacenamiento en caché:
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 ves datos o ves datos diferentes cuando se ejecutan las solicitudes a la API de administración anteriores, esto indica que observas el mismo problema que el que se observa en la IU.
Causa: Pods de Cassandra no conectados a los Pods de Cassandra de todos los centros de datos.
Si todos los Pods de Cassandra no están conectados en una implementación híbrida de Apigee multirregión al mismo anillo de Cassandra, es posible que todos los Pods de Cassandra no repliquen los datos. Como resultado, el plano de administración no recibirá el mismo conjunto de datos para la misma consulta de forma coherente. Sigue estos pasos para analizar esta situación:
Diagnóstico
- Enumera los Pods de Cassandra:
- Ejecuta el siguiente comando para verificar el estado de todos los Pods de Cassandra en cada centro de datos.
En la versión híbrida de Apigee menor que 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 versiones híbridas de Apigee mayor o igual que 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 en todos los centros de datos están conectados al anillo de Cassandra y en el estado Up and Normal (UN).
Resultado de ejemplo de un anillo de Cassandra en buen 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 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
Resultado de ejemplo 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 están en estado DL (Down and Leaving). Para obtener más información, consulta el estado de nodetool.
- Si observas cualquier Pod de Cassandra en el estado DL (como se ve en el resultado de ejemplo anterior), esa sería la causa de este problema.
- Cuando se realiza una solicitud para recuperar información sobre cualquier entidad por medio de la IU híbrida o la API de administración, si la solicitud llega a alguno de los Pods de Cassandra que no está disponible, no obtendrás datos.
# list cassandra pods kubectl -n apigee get pods -l app=apigee-cassandra
Solución
Realiza los pasos que se proporcionan en la siguiente sección y asegúrate de que los Pods de Cassandra en el centro de datos problemático estén conectados al centro de datos original, como se describe en Implementación multirregional en GKE y GKE On-Prem | Apigee.
Causa: La reparación de la nodetool no se ejecutó
Si el comando nodetool repair
no se ejecutó de forma periódica como una tarea de mantenimiento, existe la posibilidad de que existan datos incoherentes en todos los Pods de Cassandra. Sigue estos pasos para analizar esta situación:
Diagnóstico
- Crea un Pod de contenedor de cliente de Cassandra
apigee-hybrid-cassandra-client
para la depuración.
- Obtén una lista de 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
- Obtén una lista de
keyspaces
:SELECT * from system_schema.keyspaces;
Resultado de 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 los
keyspaces
del resultado anterior, enumera y consulta todas las entidades en cada centro de datos mediante CQLSH.Si la entidad que es incoherente es el producto de la API:
select * from KMS_KEYSPACE.api_product;
Si la entidad que es incoherente es la aplicación (
app
):select * from KMS_KEYSPACE.app;
Si la entidad que es incoherente es
developer
, sucede lo siguiente:select * from KMS_KEYSPACE.developer;
Si la entidad que es incoherente es la asignación de clave-valor:
select * from KVM_KEYSPACE.kvm_map_entry;
Si la entidad que es incoherente es
cache
, sucede lo siguiente:select * from CACHE_KEYSPACE.cache_map_entry;
- Toma nota de los recuentos de registros a partir del resultado de cada una de las consultas anteriores.
- Repite los pasos anteriores para cada uno de los Pods de Cassandra en todos los centros de datos.
- Compara los recuentos de registros obtenidos de todos los Pods de Cassandra.
- Identifica los Pods de Cassandra que tienen datos incoherentes.
Solución
- Enumera los Pods de Cassandra y conéctate a un Pod de Cassandra específico que tenga 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 en cada centro de datos:En la versión híbrida de Apigee menor que 1.4.0:
nodetool repair
En versiones híbridas de Apigee mayor o igual que 1.4.0:
nodetool -u JMX_USERNAME -pw JMX-PASSWORD repair
- Vuelve a realizar la sección de diagnóstico y verifica si los datos se replicaron o no de manera coherente en todos los Pods de Cassandra.
- Repite los pasos anteriores para todos los Pods de Cassandra que tuvieron datos incoherentes.
Causa: Problemas de conectividad de red
Si hay problemas de conectividad de red entre centros de datos, es posible que los datos de Cassandra no se repliquen de manera coherente en todos los Pods de Cassandra en su anillo. Sigue estos pasos para analizar esta situación
Diagnóstico
- Obtén una lista de todos los Pods de Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Ejecuta el siguiente comando
curl
y Telnet en el primer Pod de Cassandra en el segundo centro de datos (dc-2
) del primer Pod de Cassandra en el 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 Telnet ejecuta de forma correcta, se muestra 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 muestra 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
La falla de conectividad del Pod de Cassandra en un centro de datos al Pod de Cassandra en otro centro de datos indica que debe haber una restricción de firewall o una especie de problema de conectividad de red.
Solución
- Si esta implementación híbrida de Apigee está en GKE, verifica si se establecieron reglas de firewall que bloquean el tráfico de un centro de datos a otro y analiza el problema de conectividad de red. Para ello consulta Descripción general de las reglas de firewall de VPC.
- Si esta implementación híbrida de Apigee está en GKE On-Prem, trabaja con el equipo de red relevante y analiza el problema de conectividad de red.
Se debe recopilar información de diagnóstico
Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Atención al cliente de Google Cloud.
- El ID del proyecto de Google Cloud
- La organización híbrida de Apigee
- El archivo
overrides.yaml
, que enmascara la información sensible - Estado del Pod 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
- Implementación multirregional de Apigee Hybrid en GKE y GKE On-Prem
- Documentación de Kubernetes
- Comando de estado de nodetool de Cassandra