Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
Sintoma
Os pods do Cassandra não são iniciados numa das regiões numa configuração híbrida do Apigee de várias regiões. Quando aplica o ficheiro overrides.yaml
, os pods do Cassandra não são iniciados com êxito.
Mensagens de erro
- Vai observar a seguinte mensagem de erro nos registos do pod do 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.
Pode observar o seguinte aviso no estado do pod do Cassandra:
Causas possíveis
Normalmente, este problema é observado no seguinte cenário:
- O cluster de tempo de execução do Apigee é eliminado numa das regiões.
- É feita uma tentativa de reinstalar o cluster de tempo de execução do Apigee na região com a configuração do anfitrião de semente do Cassandra no ficheiro
overrides.yaml
, conforme descrito na implementação em várias regiões no GKE e no GKE on-prem. - A eliminação do cluster de tempo de execução do Apigee não remove as referências no cluster do Cassandra. Assim, as referências desatualizadas dos pods do Cassandra no cluster eliminado são mantidas. Por este motivo, quando tenta reinstalar o cluster de tempo de execução do Apigee na região secundária, os pods do Cassandra queixam-se de que determinados endereços IP já existem. Isto deve-se ao facto de os endereços IP poderem ser atribuídos a partir da mesma sub-rede que foi usada anteriormente.
Causa | Descrição |
---|---|
Referências desatualizadas a pods de regiões secundárias eliminadas no cluster do Cassandra | A eliminação do cluster de tempo de execução do Apigee na região secundária não remove as referências aos endereços IP dos pods do Cassandra na região secundária. |
Causa: referências desatualizadas a pods de regiões secundárias eliminados no cluster do Cassandra
Diagnóstico
- A mensagem de erro nos registos do pod do Cassandra
A node with address 10.52.18.40 already exists
indica que existe uma referência desatualizada a um dos pods do Cassandra da região secundária com o endereço IP10.52.18.40
. Valide esta ação executando o comandonodetool status
na região principal.Exemplo de saída:
O exemplo acima mostra que o endereço IP
10.52.18.40
associado aos pods do Cassandra da região secundária ainda está listado na saída. - Se o resultado contiver referências desatualizadas a pods do Cassandra na região secundária, significa que a região secundária foi eliminada, mas os endereços IP dos pods do Cassandra na região secundária não foram removidos.
Resolução
Siga os passos seguintes para remover as referências desatualizadas dos pods do Cassandra do cluster eliminado:
- Inicie sessão no contentor e ligue-se à interface de linha de comandos do Cassandra seguindo os passos em Crie o contentor de cliente.
- Depois de iniciar sessão no contentor e estabelecer ligação à interface do Cassandra
cqlsh
, execute a seguinte consulta SQL para listar as definições dekeyspace
atuais:select * from system_schema.keyspaces;
Exemplo de saída que mostra os espaços de chaves atuais:
Na saída seguinte,
Primary-DC1
refere-se à região principal eSecondary-DC2
refere-se à região secundária.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 pode ver, os
keyspaces
referem-se aPrimary-DC1
eSecondary-DC2
, apesar de o cluster de tempo de execução do Apigee ter sido eliminado na região secundária.As referências desatualizadas a
Secondary-DC2
têm de ser eliminadas de cada uma das definições dekeyspace
. - Antes de eliminar as referências desatualizadas nas definições de
keyspace
, use o seguinte comando para eliminar toda a instalação do Apigee hybrid, exceto o ASM (Istio) ecert-manager
, doSecondary-DC2
. Para mais informações, consulte o artigo Desinstale o tempo de execução híbrido.helm uninstall -n APIGEE_NAMESPACE ENV_GROUP_RELEASE_NAME ENV_RELEASE_NAME $ORG_NAME ingress-manager telemetry redis datastore
Além disso, desinstale a app
apigee-operator
:helm uninstall -n APIGEE_NAMESPACE operator
- Remova as referências desatualizadas a
Secondary-DC2
de cada um doskeyspaces
alterando a definição 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'};
- Verifique se as referências desatualizadas à região
Secondary-DC2
foram removidas de todos oskeyspaces
executando o seguinte comando:select * from system_schema.keyspaces;
- Inicie sessão num pod do Cassandra de
Primary-DC1
e remova as referências aos UUIDs de todos os pods do Cassandra deSecondary-DC2
. Pode obter os UUIDs a partir do comandonodetool status
, conforme descrito anteriormente na secção 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
- Verifique se não existem pods do Cassandra de
Secondary-DC2
executando novamente o comandonodetool status
. - Instale o cluster de tempo de execução do Apigee na região secundária (
Secondary-DC2
) seguindo os passos em Implementação em várias regiões no GKE e GKE On-Prem.
Tem de recolher informações de diagnóstico
Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente da Google Cloud:
- O ID do projeto do Google Cloud
- O nome da organização do Apigee Hybrid
- Os ficheiros
overrides.yaml
das regiões principal e secundária, ocultando todas as informações confidenciais - Estado do pod do Kubernetes em todos os espaços de nomes das regiões principal e secundária:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Um despejo
cluster-info
do Kubernetes das regiões principal e secundária:# 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/*
- A saída dos comandos
nodetool
abaixo da região 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
Referências
- Apigee Hybrid Implementação em várias regiões no GKE e GKE On-Prem
- Documentação do Kubernetes
-
comando
nodetool status
do Cassandra