Está a ver a documentação do Apigee e do Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Sintoma
Quando replicar dados durante uma expansão multirregional, o estado CassandraDataReplication
pode apresentar um estado de erro e a replicação de dados pode falhar.
Mensagem de erro
Quando usa
kubectl
para ver o estado da reconstrução:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
Vê que um ou mais pods do Cassandra mostram um estado de erro e uma mensagem a indicar que a reconstruçã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 resolução de problemas aplicáveis a |
---|---|---|
Região de origem incorreta | Foi especificado um valor incorreto para o elemento source.region no ficheiro YAML de replicação de dados do Cassandra. |
Apigee Hybrid |
Problemas de conetividade de rede | Pode haver problemas de conetividade de rede entre os pods do Cassandra em diferentes centros de dados. | Apigee Hybrid |
Passos de diagnóstico comuns
- Obtenha o estado da replicação de dados:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - Se vir um erro com uma mensagem semelhante à especificada em Mensagem de erro, significa que está a observar este problema.
Causa: região de origem incorreta
Se especificar uma região de origem (datacenter
) no ficheiro YAML de replicação de dados que seja diferente da origem real datacenter
, a replicação de dados falha. Execute os passos em Diagnóstico para analisar este cenário e
execute os passos em Resolução para o corrigir.
Diagnóstico
- Liste todos os pods do Cassandra na região de origem:
kubectl -n apigee get pods -l app=apigee-cassandra
- Obtenha o valor
datacenter
real de qualquer um dos pods do Cassandra devolvidos no passo 1:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Obtenha o valor usado para
source.region
no ficheiro de recursos personalizados (YAML) de replicação de dados do Cassandra que criou em Implementação em várias regiões. Se estiver a usar o nome de ficheiro de exemplo encontrado na documentação de implementação em várias regiões, o ficheiro deve ter o nomedatareplication.yaml
.cat datareplication.yaml
Exemplos de resultados:
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 confirme se o valordatacenter
corresponde ou não ao valorsource.region
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
Exemplos de resultados:
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
- Tenha em atenção que o valor
source.region
(us-west1
) do ficheirodatareplication.yaml
não corresponde ao valordatacenter
real (dc-1
) da saída do estadonodetool
. Siga os passos na secção Resolução para corrigir a configuração.
Resolução
Para corrigir a replicação de dados, tem de eliminar a tarefa de replicação de dados e criá-la com o nome datacenter
correto. Siga estes passos:
- Elimine o processo de replicação de dados atual. Se usar o nome de ficheiro de exemplo encontrado na documentação de
Implementação em várias regiões, o ficheiro deve ter o nome
datareplication.yaml
.kubectl delete -f datareplication.yaml
- Atualize o nome da região no ficheiro 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 estado de reconstrução através do seguinte comando e confirme que já não vê o estado de erro comunicado anteriormente:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
- Se o problema persistir, avance para a secção Causa: problemas de conetividade de rede.
Causa: problemas de conetividade de rede
O erro de replicação de dados também pode ser o resultado de problemas de conetividade entre os nós do Cassandra.
Diagnóstico
Siga estes passos para analisar este cenário:
- Apresente todos os pods do Cassandra:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- Execute os seguintes comandos para usar o Telnet no primeiro pod do Cassandra no
segundo centro de dados (
dc-2
) a partir do primeiro pod do Cassandra no primeiro centro de dados (dc-1
) através da porta7001
:k debug -it apigee-cassandra-default-0 -n apigee --image=nginx -- sh curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- Se o telnet for bem-sucedido, é apresentado 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, é apresentado 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 conetividade do pod do Cassandra num centro de dados para o pod do Cassandra noutro centro de dados indica que tem de haver uma restrição de firewall ou algum tipo de problema de conetividade de rede.
Resolução
- Se esta implementação híbrida do Apigee estiver no GKE, verifique se existem regras de firewall definidas que bloqueiam o tráfego de um centro de dados para outro e analise o problema de conectividade de rede consultando a vista geral das regras de firewall da VPC.
- Se esta implementação híbrida do Apigee estiver no GKE-on-prem, trabalhe com a equipa de rede relevante e analise o problema de conetividade de rede.
Se o problema persistir, aceda a Informações de diagnóstico necessárias.
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.
- A organização do Apigee Hybrid.
- Os ficheiros
overrides.yaml
de ambas as regiões de origem e novas, ocultando todas as informações confidenciais. - O
CassandraDataReplication
ficheiro YAML. - Saída do Cassandra
nodetool status
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Saída do Cassandra
nodetool describecluster
:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster