Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
Sintoma
Ao replicar dados durante uma expansão multirregional, o status
CassandraDataReplication
pode mostrar um estado de erro e a replicação de dados pode falhar.
Mensagem de erro
Ao usar
kubectl
para visualizar o status da recriação:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
Você verá que um ou mais pods do Cassandra mostram um estado de erro, e uma mensagem informando que a recriação falhou. Por exemplo:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "message": "failed to rebuild from us-west1: java.lang.IllegalStateException : Unable to find sufficient sources for streaming range (-8567285182390470134,-8567154549835592965] in keyspace system_distributed", "state": "error", "updated": 1641581899 }, … } }
Causas possíveis
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
Região de origem incorreta | Um valor incorreto foi especificado para source.region no arquivo YAML de replicação de dados do Cassandra. |
Apigee híbrido |
Problemas de conectividade de rede | Pode haver problemas de conectividade de rede entre os pods do Cassandra em diferentes data centers. | Apigee híbrido |
Etapas comuns do diagnóstico
- Busque o status da replicação de dados:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - Se for exibido um erro com uma mensagem semelhante à especificada em Mensagem de erro, isso indica que você está observando esse problema.
Causa: região de origem incorreta
Se você especificar uma região de origem (datacenter
) no arquivo YAML de replicação de dados
diferente da datacenter
de origem real, a replicação de dados
falhará. Siga as etapas em Diagnóstico para analisar esse cenário
e realizar as etapas em Resolução para corrigi-lo.
Diagnóstico
- Liste todos os pods do Cassandra na região de origem:
kubectl -n apigee get pods -l app=apigee-cassandra
- Encontre o valor
datacenter
real de qualquer um dos pods do Cassandra retornados na etapa 1:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Receba o valor usado para
source.region
no arquivo de recursos personalizados (YAML) de replicação de dados do Cassandra criado em Implantação multirregional. Se você estiver usando o nome de arquivo de exemplo encontrado na documentação de implantação multirregional, o arquivo precisará ser nomeado comodatareplication.yaml
.cat datareplication.yaml
Resultados de exemplo:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "us-west1"
Verifique o resultado da saída
nodetool status
e confira se o valor dedatacenter
corresponde ou não ao valorsource.region
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
Resultados de exemplo:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.104.13.2 491.84 KiB 256 100.0% 7254711c-fe0a-4b34-b50f-861109f97936 ra-1 UN 10.104.11.3 527.36 KiB 256 100.0% 5ec389f0-fd67-4de6-9f21-172d5899ff78 ra-1 UN 10.104.12.7 838.46 KiB 256 100.0% 7a88be82-1f81-4117-86e3-2cda434c0878 ra-1
- O
source.region
(us-west1
) do arquivodatareplication.yaml
não corresponde ao valor realdatacenter
(dc-1
) da saída de statusnodetool
. Siga as etapas em Resolução para corrigir a configuração.
Resolução
Para corrigir a replicação de dados, você precisará excluir o job de replicação e criá-lo
com o nome datacenter
correto. Siga as etapas abaixo:
- Exclua o processo de replicação de dados atual. Se você estiver usando o nome de arquivo de exemplo encontrado na
documentação de implantação multirregional, o arquivo precisará ser nomeado como
datareplication.yaml
.kubectl delete -f datareplication.yaml
- Atualize o nome da região no arquivo YAML para o valor
datacenter
correto, por exemplo,dc-1
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "dc-1"
- Aplique a replicação de dados atualizada:
kubectl apply -f datareplication.yaml
- Verifique o status da recriação usando o comando a seguir e confira se o estado de erro
relatado anteriormente não aparece mais:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
- Se o problema persistir, acesse Causa: problemas de conectividade de rede.
Causa: problemas de conectividade de rede
O erro de replicação de dados também pode ser resultado de problemas de conectividade entre os nós do Cassandra.
Diagnóstico
Execute as etapas a seguir para analisar esse cenário:
- Liste todos os pods do Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Execute o comando
curl
a seguir e telnet para o primeiro pod do Cassandra no segundo data center (dc-2
) do primeiro pod do Cassandra no primeiro data center (dc-1
), usando a porta7001
:kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- Se o telnet tiver sido bem-sucedido, será exibido um resultado semelhante ao seguinte:
* 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)
- Caso contrário, será exibido um erro semelhante ao seguinte:
* 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
A falha de conectividade do pod do Cassandra em um data center para o pod do Cassandra em outro data center indica que deve haver uma restrição de firewall ou algum tipo de problema de conectividade de rede.
Resolução
- Se essa implantação da Apigee híbrida estiver no GKE, verifique se alguma regra de firewall está definida para bloquear o tráfego de um data center para outro e analise o problema de conectividade de rede consultando VPC Visão geral das regras de firewall.
- Se essa implantação da Apigee híbrida estiver no GKE On-Prem, trabalhe com a equipe de rede relevante e analise o problema de conectividade de rede.
Se o problema persistir, acesse Precisa de informações de diagnóstico.
É 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 Google Cloud Costumer Care:
- O ID do projeto do Google Cloud.
- A organização da Apigee híbrida
- Os arquivos
overrides.yaml
da origem e das novas regiões, mascarando qualquer informação confidencial. - O arquivo YAML
CassandraDataReplication
. - Saída
nodetool status
do Cassandra:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Saída
nodetool describecluster
do Cassandra:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster