Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
Sintoma
Os pods do Cassandra não são iniciados em uma das regiões em uma configuração da Apigee híbrida multirregional. Ao
aplicar o arquivo overrides.yaml
, os pods do Cassandra não são iniciados.
Mensagens de erro
- Você observará a seguinte mensagem de erro nos registros 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.
Observe o seguinte aviso no status do pod do Cassandra:
Causas possíveis
Esse problema geralmente é observado no seguinte cenário:
- O cluster de ambiente de execução da Apigee foi excluído em uma das regiões.
- Uma tentativa de reinstalar o cluster de ambiente de execução da Apigee é feita na região
com a configuração de host de semente do Cassandra no arquivo
overrides.yaml
, conforme descrito em Implantação multirregional no GKE e no GKE no local. - Excluir o cluster de ambiente de execução da Apigee não remove as referências no cluster do Cassandra. Assim, as referências desatualizadas dos pods do Cassandra no cluster excluído serão mantidas. Por isso, quando você tenta reinstalar o cluster de ambiente de execução da Apigee na região secundária, os pods do Cassandra reclamam que determinados endereços IP já existem. Isso ocorre porque os endereços IP podem ser atribuídos a partir da mesma sub-rede usada anteriormente.
Causa | Descrição |
---|---|
Referências desatualizadas a pods de região secundária excluídos no cluster do Cassandra | A exclusão do cluster do ambiente de execução da Apigee na região secundária não remove as referências dos endereços IP dos pods do Cassandra na região secundária. |
Causa: referências desatualizadas a pods de região secundária excluídos no cluster do Cassandra
Diagnóstico
- A mensagem de erro nos registros do pod do Cassandra
A node with address 10.52.18.40 already exists
indica que existe uma referência desatualizada para um dos pods da região secundária do Cassandra com o endereço IP10.52.18.40
. Valide isso executando o comandonodetool status
na região principal.Exemplo de resposta:
O exemplo acima mostra que o endereço IP
10.52.18.40
associado aos pods do Cassandra da região secundária ainda é listado na saída. - Se a saída contiver as referências desatualizadas aos pods do Cassandra na região secundária, isso indicará que a região secundária foi excluída, mas os endereços IP dos pods do Cassandra na região secundária não serão removidos.
Resolução
Siga as etapas abaixo para remover as referências desatualizadas de pods do Cassandra do cluster excluído:
- Faça login no contêiner e conecte-se à interface de linha de comando do Cassandra seguindo as etapas em Criar o contêiner do cliente.
- Depois de fazer login no contêiner e se conectar à interface
cqlsh
do Cassandra, execute a seguinte consulta SQL para listar as definições atuais dekeyspace
:select * from system_schema.keyspaces;
Exemplo de saída mostrando os keyspaces atuais:
Na saída a seguir,
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 você pode ver, as
keyspaces
se referem aPrimary-DC1
eSecondary-DC2
, mesmo que o cluster do ambiente de execução da Apigee tenha sido excluído na região secundária.As referências desatualizadas a
Secondary-DC2
precisam ser excluídas de cada uma das definições dekeyspace
. - Antes de excluir as referências desatualizadas nas definições de
keyspace
, use o seguinte comando para excluir toda a instalação da Apigee híbrida, exceto ASM (Istio) ecert-manager
doSecondary-DC2
. Para mais informações, consulte Desinstalar o ambiente de execução híbrido.apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
- 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_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kms_tsg1_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_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE rtc_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE quota_tsg1_apigee_hybrid_prod_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;
- Faça login em um pod do Cassandra de
Primary-DC1
e remova as referências a UUIDs de todos os pods de Cassandra deSecondary-DC2
. Os UUIDs podem ser obtidos do comandonodetool status
, conforme descrito anteriormente em 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 nenhum pod do Cassandra de
Secondary-DC2
está presente executando o comandonodetool status
novamente. - Instale o cluster de ambiente de execução da Apigee na região secundária
(
Secondary-DC2
) seguindo as etapas em Implantação multirregional no GKE e no GKE On-Prem.
É necessário coletar 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 entre em contato com o Suporte do Google Cloud:
- O ID do projeto do Google Cloud
- O nome da organização da Apigee híbrida
- os arquivos
overrides.yaml
das regiões primária e secundária, mascarando qualquer informação confidencial - Status do pod do Kubernetes em todos os namespaces das regiões primária 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 primária 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 com relação à região primária.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
- Implantação de várias regiões da Apigee híbrida no GKE e no GKE On-Prem
- Documentação do Kubernetes
-
Comando
nodetool status
do Cassandra