Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Síntoma
Los pods de Cassandra no se inician en una de las regiones de una configuración híbrida de Apigee multirregión. Cuando se aplica el archivo overrides.yaml
, los pods de Cassandra no se inician correctamente.
Mensajes de error
- Verás el siguiente mensaje de error en los registros del pod de Cassandra:
Exception (java.lang.RuntimeException) encountered during startup: A node with address 10.52.18.40 already exists, cancelling join. use cassandra.replace_addrees if you want to replace this node.
Puede que veas la siguiente advertencia en el estado del pod de Cassandra:
Posibles motivos
Este problema suele producirse en los siguientes casos:
- El clúster de tiempo de ejecución de Apigee se elimina en una de las regiones.
- Se intenta reinstalar el clúster de tiempo de ejecución de Apigee en la región con la configuración del host de semillas de Cassandra en el archivo
overrides.yaml
, tal como se describe en Despliegue multirregional en GKE y GKE On-Prem. - Si eliminas el clúster de tiempo de ejecución de Apigee, no se eliminarán las referencias del clúster de Cassandra. Por lo tanto, se conservarán las referencias obsoletas de los pods de Cassandra del clúster eliminado. Por este motivo, cuando intentes reinstalar el clúster de tiempo de ejecución de Apigee en la región secundaria, los pods de Cassandra indicarán que ya existen determinadas direcciones IP. Esto se debe a que las direcciones IP se pueden asignar desde la misma subred que se usó anteriormente.
Causa | Descripción |
---|---|
Referencias obsoletas a pods de la región secundaria eliminados en el clúster de Cassandra | Si eliminas el clúster de tiempo de ejecución de Apigee en la región secundaria, no se eliminarán las referencias a las direcciones IP de los pods de Cassandra en la región secundaria. |
Causa: referencias obsoletas a pods de la región secundaria eliminados en el clúster de Cassandra
Diagnóstico
- El mensaje de error de los registros del pod de Cassandra
A node with address 10.52.18.40 already exists
indica que hay una referencia obsoleta a uno de los pods de Cassandra de la región secundaria con la dirección IP10.52.18.40
. Para validar esto, ejecuta el comandonodetool status
en la región principal.Salida de ejemplo:
En el ejemplo anterior se muestra que la dirección IP
10.52.18.40
asociada a los pods de Cassandra de la región secundaria sigue apareciendo en el resultado. - Si el resultado contiene las referencias obsoletas a los pods de Cassandra en la región secundaria, significa que la región secundaria se ha eliminado, pero las direcciones IP de los pods de Cassandra en la región secundaria no se han quitado.
Resolución
Sigue estos pasos para eliminar las referencias obsoletas de los pods de Cassandra del clúster eliminado:
- Inicia sesión en el contenedor y conéctate a la interfaz de línea de comandos de Cassandra siguiendo los pasos que se indican en Crear el contenedor de cliente.
- Después de iniciar sesión en el contenedor y conectarte a la interfaz de Cassandra
cqlsh
, ejecuta la siguiente consulta de SQL para mostrar las definiciones dekeyspace
actuales:select * from system_schema.keyspaces;
Ejemplo de salida que muestra los espacios de claves actuales:
En el siguiente resultado,
Primary-DC1
hace referencia a la región principal ySecondary-DC2
a la secundaria.bash-4.4# cqlsh 10.50.112.194 -u admin_user -p ADMIN.PASSWORD --ssl Connected to apigeecluster at 10.50.112.194:9042. [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. admin_user@cqlsh> Select * from system_schema.keyspaces; keyspace_name | durable_writes | replication -------------------------------------+----------------+-------------------------------------------------------------------------------------------------- system_auth | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kvm_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kms_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} system_distributed | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} cache_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} rtc_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} quota_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_traces | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} (11 rows)
Como puede ver, los
keyspaces
hacen referencia tanto aPrimary-DC1
como aSecondary-DC2
, aunque el clúster de tiempo de ejecución de Apigee se haya eliminado en la región secundaria.Las referencias obsoletas a
Secondary-DC2
se deben eliminar de cada una de las definiciones dekeyspace
. - Antes de eliminar las referencias obsoletas en las definiciones de
keyspace
, usa el siguiente comando para eliminar toda la instalación de Apigee hybrid excepto ASM (Istio) ycert-manager
deSecondary-DC2
. Para obtener más información, consulta el artículo sobre cómo desinstalar el tiempo de ejecución híbrido.helm uninstall -n APIGEE_NAMESPACE ENV_GROUP_RELEASE_NAME ENV_RELEASE_NAME $ORG_NAME ingress-manager telemetry redis datastore
Además, desinstala
apigee-operator
:helm uninstall -n APIGEE_NAMESPACE operator
- Elimina las referencias obsoletas a
Secondary-DC2
de cada uno de loskeyspaces
modificando la definición dekeyspace
.ALTER KEYSPACE system_auth WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kvm_ORG_NAME_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kms_ORG_NAME_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_distributed WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE perses WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE cache_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE rtc_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE quota_ORG_NAME_apigee_hybrid_ENV_NAME_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_traces WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
- Comprueba que se han eliminado todas las referencias obsoletas a la región
Secondary-DC2
de todos loskeyspaces
. Para ello, ejecuta el siguiente comando:select * from system_schema.keyspaces;
- Inicia sesión en un pod de Cassandra de
Primary-DC1
y elimina las referencias a los UUIDs de todos los pods de Cassandra deSecondary-DC2
. Los UUIDs se pueden obtener del comandonodetool status
, tal como se ha descrito anteriormente en Diagnóstico.kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash nodetool -u admin_user -pw ADMIN.PASSWORD removenode UUID_OF_CASSANDRA_POD_IN_SECONDARY_DC2
- Comprueba que no haya pods de Cassandra de
Secondary-DC2
ejecutando el comandonodetool status
de nuevo. - Instala el clúster de tiempo de ejecución de Apigee en la región secundaria (
Secondary-DC2
) siguiendo los pasos que se indican en Despliegues multirregionales en GKE y GKE On-Prem.
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
- Nombre de la organización de Apigee Hybrid
- Los archivos
overrides.yaml
de las regiones principal y secundaria, en los que se oculta la información sensible - Estado de los pods de Kubernetes en todos los espacios de nombres de las regiones principal y secundaria:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Un volcado de
cluster-info
de Kubernetes de las regiones principal y secundaria:# 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/*
- El resultado de los comandos
nodetool
que se indican a continuación de la región principal.export u=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.user}' | base64 -d` export pw=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.password}' | base64 -d` kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw info 2>&1 | tee /tmp/k_nodetool_info_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw describecluster 2>&1 | tee /tmp/k_nodetool_describecluster_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw failuredetector 2>&1 | tee /tmp/k_nodetool_failuredetector_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw status 2>&1 | tee /tmp/k_nodetool_status_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gossipinfo 2>&1 | tee /tmp/k_nodetool_gossipinfo_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw netstats 2>&1 | tee /tmp/k_nodetool_netstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw proxyhistograms 2>&1 | tee /tmp/k_nodetool_proxyhistograms_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw tpstats 2>&1 | tee /tmp/k_nodetool_tpstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gcstats 2>&1 | tee /tmp/k_nodetool_gcstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw version 2>&1 | tee /tmp/k_nodetool_version_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw ring 2>&1 | tee /tmp/k_nodetool_ring_$(date +%Y.%m.%d_%H.%M.%S).txt
Referencias
- Apigee Hybrid Despliegue multirregional en GKE y GKE On-Prem
- Documentación de Kubernetes
-
Comando
nodetool status
de Cassandra