Guia de resolução de problemas do Cassandra

Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe um equivalente na documentação do Apigee Edge para este tópico.

Este tópico aborda os passos que pode seguir para resolver problemas com o armazenamento de dados do Cassandra. O Cassandra é um repositório de dados persistente que é executado no componente cassandra da arquitetura de tempo de execução híbrida. Consulte também a vista geral da configuração do serviço de tempo de execução.

Os pods do Cassandra estão bloqueados no estado de lançamento

Sintoma

Depois de tentar fazer uma atualização aos pods do Cassandra, o armazenamento de dados está a comunicar que está bloqueado no estado de lançamento.

Mensagem de erro

Quando usa kubectl para ver os estados do pod, vê que um ou mais pods do Cassandra estão bloqueados no estado de lançamento:

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Ack 57s (x7 over 24h) apigee-datastore release started

Causas possíveis

Um auricular preso no estado de libertação pode dever-se ao seguinte:

Causa Descrição
Alterações à capacidade de armazenamento Foram executados passos para alterar a capacidade de armazenamento no ficheiro override.yaml.
Outras alterações de configuração Foram feitas atualizações às propriedades do Cassandra no ficheiro override.yaml. No entanto, as alterações não foram aplicadas.

Alterações à capacidade de armazenamento

Diagnóstico

  1. Use kubectl para ver o estado atual do pod apigee datastore:
    kubectl get apigeeds -n apigee
    NAME STATE AGE
    default releasing 122d
  2. Verifique se foram feitas alterações ao ficheiro override.yaml:
    1. Usando o seu sistema de controlo de versões, compare a versão anterior do ficheiro override.yaml com a versão atual:
      diff OVERRIDES_BEFORE.yaml OVERRIDES_AFTER.yaml
    2. A saída de uma diferença no override.yaml pode mostrar o possível problema com o tamanho da capacidade de armazenamento. Por exemplo:
      # Overrides.yaml  before:
      cassandra:
         storage:
            capacity: 500Gi
      
      # Overrides.yaml after:
      cassandra:
         storage:
            capacity: 100Gi

      Se tiver sido realizada uma operação para alterar a capacidade de armazenamento em que foram ignorados passos e foi aplicado diretamente um novo override.yaml, isto pode fazer com que o repositório de dados fique no estado de libertação.

  3. Verifique o statefulset para se certificar de que existe um para apigee-cassandra-default:
    kubectl describe sts -n apigee

    O resultado tem um aspeto semelhante a este:

    Name:               apigee-cassandra-default
    Namespace:          apigee
    CreationTimestamp:  Tue, 18 Jul 2023 00:40:57 +0000
    Selector:           app=apigee-cassandra,name=default
    Labels:             apigee.cloud.google.com.revision=v1-2cc098050836c6b4
                        apigee.cloud.google.com.version=v1
                        apigee.cloud.google.com/platform=apigee
                        app=apigee-cassandra
                        name=default
    Annotations:        <none>
    Replicas:           3 desired | 3 total
    Update Strategy:    RollingUpdate
      Partition:        0
    Pods Status:        3 Running / 0 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
      Labels:       apigee.cloud.google.com/apigee_servicename=production
                    apigee.cloud.google.com/billing_type=subscription
                    apigee.cloud.google.com/platform=apigee
                    app=apigee-cassandra
                    name=default
                    revision=v1
                    runtime_type=hybrid
      Annotations:  apigee.cloud.google.com/pod-template-spec-hash: 2cc098050836c6b4
                    prometheus.io/path: /metrics
                    prometheus.io/port: 7070
                    prometheus.io/scheme: https
                    prometheus.io/scrape: true
      Containers:
       apigee-cassandra:
        Image:       gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra:1.10.1
        Ports:       7000/TCP, 7001/TCP, 7199/TCP, 9042/TCP, 8778/TCP
        Host Ports:  7000/TCP, 7001/TCP, 7199/TCP, 9042/TCP, 8778/TCP
        Requests:
          cpu:      500m
          memory:   1Gi
        Readiness:  exec [/bin/bash -c /opt/apigee/ready-probe.sh] delay=0s timeout=5s period=10s #success=1 #failure=2
        Environment:
          POD_NAME:                  (v1:metadata.name)
          POD_IP:                    (v1:status.podIP)
          MAX_HEAP_SIZE:            512M
          HEAP_NEWSIZE:             100M
          CASSANDRA_SEEDS:          apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local
          CASSANDRA_CLUSTER_NAME:   apigeecluster
          CASSANDRA_DC:             dc-1
          CASSANDRA_RACK:           ra-1
          CASSANDRA_OPEN_JMX:       true
          CPS_ADMIN_USER:           <set to the key 'admin.user' in secret 'apigee-datastore-default-creds'>        Optional: false
          CPS_ADMIN_PASSWORD:       <set to the key 'admin.password' in secret 'apigee-datastore-default-creds'>    Optional: false
          APIGEE_JMX_USER:          <set to the key 'jmx.user' in secret 'apigee-datastore-default-creds'>          Optional: false
          APIGEE_JMX_PASSWORD:      <set to the key 'jmx.password' in secret 'apigee-datastore-default-creds'>      Optional: false
          CASS_PASSWORD:            <set to the key 'default.password' in secret 'apigee-datastore-default-creds'>  Optional: false
          APIGEE_JOLOKIA_USER:      <set to the key 'jolokia.user' in secret 'apigee-datastore-default-creds'>      Optional: false
          APIGEE_JOLOKIA_PASSWORD:  <set to the key 'jolokia.password' in secret 'apigee-datastore-default-creds'>  Optional: false
        Mounts:
          /opt/apigee/apigee-cassandra/conf from appsfs (rw)
          /opt/apigee/customer from cwc-volume (ro)
          /opt/apigee/data from cassandra-data (rw)
          /opt/apigee/ssl from tls-volume (ro)
          /var/secrets/google from apigee-cassandra-backup (rw)
          /var/secrets/keys from apigee-cassandra-backup-key-file (rw)
      Volumes:
       cwc-volume:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  config-cassandra-default
        Optional:    false
       tls-volume:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  apigee-cassandra-default-tls
        Optional:    false
       appsfs:
        Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
        Medium:
        SizeLimit:  <unset>
       apigee-cassandra-backup:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  apigee-cassandra-backup-svc-account
        Optional:    true
       apigee-cassandra-backup-key-file:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  apigee-cassandra-backup-key-file
        Optional:    true
    Volume Claims:
      Name:          cassandra-data
      StorageClass:
      Labels:        <none>
      Annotations:   <none>
      Capacity:      10Gi
      Access Modes:  [ReadWriteOnce]
    Events:
      Type    Reason            Age   From                    Message
      ----    ------            ----  ----                    -------
      Normal  SuccessfulCreate  47m   statefulset-controller  create Pod apigee-cassandra-default-2 in StatefulSet apigee-cassandra-default successful
  4. Verifique se existem erros no controlador do Apigee:
    kubectl logs -f apigee-controller-manager-59cf595c77-wtwnr -n apigee-system -c manager | grep apigeedatastore
    

    Resultados:

    "error creating
    apigee-cassandra object: failed to update resource
    apigee/apigee-cassandra-default: StatefulSet.apps \"apigee-cassandra-default\"
    is invalid: spec: Forbidden: updates to statefulset spec for fields other than
    'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy'
    and 'minReadySeconds' are forbiddenerror creating apigee-cassandra object:
    failed to update resource apigee/apigee-cassandra-default: StatefulSet.apps
    \"apigee-cassandra-default\" is invalid: spec: Forbidden: updates to statefulset
    spec for fields other than 'replicas', 'template', 'updateStrategy',
    'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden"

Resolução

Pode repor o estado do Cassandra através dos seguintes passos para o voltar a colocar em execução:

  1. Desative a opção apigee-controller:
    kubectl -n apigee-system edit deployments and set --enable-controllers=true to --enable-controllers=false
    
  2. Devolva o arquivo de dados a um estado de execução com o comando PATCH:
    curl -XPATCH \-H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'
    
  3. Volte a aplicar o ficheiro override.yaml original através do Helm:
    helm upgrade datastore apigee-datastore/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f OVERRIDES_FILE \
    --dry-run=server

    Certifique-se de que inclui todas as definições apresentadas, incluindo --atomic para que a ação seja revertida em caso de falha.

    Instale o gráfico:

    helm upgrade datastore apigee-datastore/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f OVERRIDES_FILE
  4. Ative a opção apigee-controller:
    kubectl -n apigee-system edit deployments and set --enable-controllers=false to --enable-controllers=true
    
  5. Aguarde até que o repositório de dados volte a funcionar e valide-o através do seguinte:
    kubectl get apigeeds --namespace apigee
    
  6. Valide se as implementações e os pods do Apigee estão no estado de execução e se apigeeds já não está no estado de lançamento:
    kubectl get ad -n apigee
    
    kubectl get pods -n apigee
    
    kubectl get apigeeds -n apigee
    
    NAME      STATE     AGE
    default   running   24d

Outras alterações de configuração

As atualizações feitas às propriedades cassandra no elemento override.yaml não foram aplicadas. Pode ser uma alteração da palavra-passe ou uma alteração aos recursos no override.yaml. Ou aplicar erroneamente o override.yaml errado a um cluster.

Diagnóstico

Consulte os passos em Diagnóstico.

Resolução

Consulte os passos em Resolução.

Tem de recolher informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, recolha as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente da Google Cloud:

  • Overrides.yaml para cada cluster na instalação.
  • Uma descarga de cluster-info do Kubernetes da instalação do Apigee Hybrid:

    Gerar cluster-info dump do Kubernetes:

    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump
    

    Comprima com o zip do Kubernetes cluster-info dump:

    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
    

Os pods do Cassandra estão bloqueados no estado pendente

Sintoma

Ao iniciar, os pods do Cassandra permanecem no estado Pendente.

Mensagem de erro

Quando usa kubectl para ver os estados dos pods, vê que um ou mais pods do Cassandra estão bloqueados no estado Pending. O estado Pending indica que o Kubernetes não consegue agendar o pod num nó: não é possível criar o pod. Por exemplo:

kubectl get pods -n NAMESPACE

NAME                                     READY   STATUS      RESTARTS   AGE
adah-resources-install-4762w             0/4     Completed   0          10m
apigee-cassandra-default-0               0/1     Pending     0          10m
...

Causas possíveis

Um pod bloqueado no estado Pendente pode ter várias causas. Por exemplo:

Causa Descrição
Recursos insuficientes Não existe CPU ou memória suficiente disponível para criar o pod.
O volume não foi criado O pod está a aguardar a criação do volume persistente.
Controlador CSI do Amazon EBS em falta Para instalações do EKS, o controlador CSI do Amazon EBS necessário não está instalado.

Diagnóstico

Use kubectl para descrever o grupo de anúncios para determinar a origem do erro. Por exemplo:

kubectl -n NAMESPACE describe pods POD_NAME

Por exemplo:

kubectl describe pods apigee-cassandra-default-0 -n apigee

O resultado pode mostrar um destes possíveis problemas:

  • Se o problema for a falta de recursos, é apresentada uma mensagem de aviso que indica CPU ou memória insuficientes.
  • Se a mensagem de erro indicar que o pod tem PersistentVolumeClaims (PVC) imediatos não associados, significa que o pod não consegue criar o respetivo volume persistente.

Resolução

Recursos insuficientes

Modifique o node pool do Cassandra para que tenha recursos de CPU e memória suficientes. Consulte o artigo Redimensionar um conjunto de nós para ver detalhes.

Volume persistente não criado

Se determinar um problema de volume persistente, descreva o PersistentVolumeClaim (PVC) para determinar por que motivo não está a ser criado:

  1. Liste os PVCs no cluster:
    kubectl -n NAMESPACE get pvc
    
    NAME                                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-b247faae-0a2b-11ea-867b-42010a80006e   10Gi       RWO            standard       15m
    ...
  2. Descreva o PVC do pod com falhas. Por exemplo, o seguinte comando descreve o PVC associado ao pod apigee-cassandra-default-0:
    kubectl apigee describe pvc cassandra-data-apigee-cassandra-default-0
    
    Events:
      Type     Reason              Age                From                         Message
      ----     ------              ----               ----                         -------
      Warning  ProvisioningFailed  3m (x143 over 5h)  persistentvolume-controller  storageclass.storage.k8s.io "apigee-sc" not found

    Tenha em atenção que, neste exemplo, a StorageClass denominada apigee-sc não existe. Para resolver este problema, crie a StorageClass em falta no cluster, conforme explicado em Alterar a StorageClass predefinida.

Veja também Depurar pods.

Controlador CSI do Amazon EBS em falta

Se a instância híbrida estiver a ser executada num cluster do EKS, certifique-se de que o cluster do EKS está a usar o controlador da interface de armazenamento de contentores (CSI) do Amazon EBS. Consulte as Perguntas frequentes sobre a migração do CSI do Amazon EBS para ver detalhes.

Os pods do Cassandra estão bloqueados no estado CrashLoopBackoff

Sintoma

No arranque, os pods do Cassandra permanecem no estado CrashLoopBackoff.

Mensagem de erro

Quando usa kubectl para ver os estados dos pods, vê que um ou mais pods do Cassandra estão no estado CrashLoopBackoff. Este estado indica que o Kubernetes não consegue criar o pod. Por exemplo:

kubectl get pods -n NAMESPACE

NAME                                     READY   STATUS            RESTARTS   AGE
adah-resources-install-4762w             0/4     Completed         0          10m
apigee-cassandra-default-0               0/1     CrashLoopBackoff  0          10m
...

Causas possíveis

Um pod preso no estado CrashLoopBackoff pode ter várias causas. Por exemplo:

Causa Descrição
O centro de dados difere do centro de dados anterior Este erro indica que o pod do Cassandra tem um volume persistente com dados de um cluster anterior e que os novos pods não conseguem juntar-se ao cluster antigo. Normalmente, isto acontece quando os volumes persistentes desatualizados persistem do cluster do Cassandra anterior no mesmo nó do Kubernetes. Este problema pode ocorrer se eliminar e recriar o Cassandra no cluster.
Atualização do Kubernetes Uma atualização do Kubernetes pode afetar o cluster do Cassandra. Isto pode acontecer quando os nós de trabalho do Anthos que alojam os pods do Cassandra são atualizados para uma nova versão do SO.

Diagnóstico

Verifique o registo de erros do Cassandra para determinar a causa do problema.

  1. Liste os pods para obter o ID do pod do Cassandra com falhas:
    kubectl get pods -n NAMESPACE
  2. Verifique o registo do pod com falhas:
    kubectl logs POD_ID -n NAMESPACE

Resolução

Procure os seguintes indícios no registo do pod:

O centro de dados difere do centro de dados anterior

Se vir esta mensagem de registo:

Cannot start node if snitch's data center (us-east1) differs from previous data center
  • Verifique se existem PVCs desatualizados ou antigos no cluster e elimine-os.
  • Se esta for uma instalação recente, elimine todos os PVCs e tente novamente a configuração. Por exemplo:
    kubectl -n NAMESPACE get pvc
    kubectl -n NAMESPACE delete pvc cassandra-data-apigee-cassandra-default-0

A atualização do Anthos altera as definições de segurança

Verifique se existe esta mensagem de erro nos registos do Cassandra:

/opt/apigee/run.sh: line 68: ulimit: max locked memory:
  cannot modify limit: Operation not permitted

Crie um contentor de cliente para depuração

Esta secção explica como criar um contentor de cliente a partir do qual pode aceder a utilitários de depuração do Cassandra, como cqlsh: o shell CQL. Estas utilidades permitem-lhe consultar tabelas do Cassandra e podem ser úteis para fins de depuração.

Crie o contentor de cliente

Para criar o contentor de cliente, siga estes passos:

  1. O contentor tem de usar o certificado TLS do pod apigee-cassandra-user-setup. Isto é armazenado como um segredo do Kubernetes. Obtenha o nome do segredo que armazena este certificado:
    kubectl get secrets -n apigee --field-selector type=kubernetes.io/tls | grep apigee-cassandra-user-setup | awk '{print $1}'

    Este comando devolve o nome do segredo. Por exemplo: apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls. Vai usá-lo abaixo no campo secretName do ficheiro YAML.

  2. Abra um novo ficheiro e cole a seguinte especificação do pod no mesmo:
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
      name: CASSANDRA_CLIENT_NAME   # For example: my-cassandra-client
      namespace: apigee
    spec:
      containers:
      - name: CASSANDRA_CLIENT_NAME
        image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:YOUR_APIGEE_HYBRID_VERSION" # For example, 1.10.5.
        imagePullPolicy: Always
        command:
        - sleep
        - "3600"
        env:
        - name: CASSANDRA_SEEDS
          value: apigee-cassandra-default.apigee.svc.cluster.local
        - name: APIGEE_DML_USER
          valueFrom:
            secretKeyRef:
              key: dml.user
              name: apigee-datastore-default-creds
        - name: APIGEE_DML_PASSWORD
          valueFrom:
            secretKeyRef:
              key: dml.password
              name: apigee-datastore-default-creds
        volumeMounts:
        - mountPath: /opt/apigee/ssl
          name: tls-volume
          readOnly: true
      volumes:
      - name: tls-volume
        secret:
          defaultMode: 420
          secretName: YOUR_SECRET_NAME    # For example: apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls
      restartPolicy: Never
  3. Guarde o ficheiro com a extensão .yaml. Por exemplo: my-spec.yaml.
  4. Aplique a especificação ao cluster:
    kubectl apply -f YOUR_SPEC_FILE.yaml -n apigee
  5. Inicie sessão no contentor:
    kubectl exec -n apigee CASSANDRA_CLIENT_NAME -it -- bash
  6. Estabeleça ligação à interface do Cassandra cqlsh com o seguinte comando. Introduza o comando exatamente como mostrado:
    cqlsh ${CASSANDRA_SEEDS} -u ${APIGEE_DML_USER} -p ${APIGEE_DML_PASSWORD} --ssl

Eliminar o pod do cliente

Use este comando para eliminar o pod do cliente Cassandra:

kubectl delete pods -n apigee cassandra-client

Expansão da região configurada incorretamente: todos os nós do Cassandra num único centro de dados

Esta situação ocorre numa expansão multirregional nas plataformas GKE e GKE On-Prem (Anthos). Tente evitar criar todos os nós do Cassandra no mesmo centro de dados.

Sintoma

Os nós do Cassandra não são criados no centro de dados da segunda região.

Mensagem de erro

failed to rebuild from dc-1: java.lang.RuntimeException : Error while rebuilding node: Stream failed

Resolução

Repare a expansão da região configurada incorretamente com os seguintes passos:

  1. Atualize o Cassandra replicaCount para 1 no ficheiro overrides.yaml para o segundo centro de dados. Por exemplo:
    cassandra:
      . . .
      replicaCount: 1

    Aplique a definição através do Helm:

    helm upgrade datastore apigee-datastore \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f 2ND_DATACENTER_OVERRIDES_FILE \
    --dry-run=server

    Certifique-se de que inclui todas as definições apresentadas, incluindo --atomic para que a ação seja revertida em caso de falha.

    Instale o gráfico:

    helm upgrade datastore apigee-datastore \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f 2ND_DATACENTER_OVERRIDES_FILE
  2. Use kubectl exec para aceder ao pod do Cassandra restante com o seguinte comando:
    kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
  3. Desative o pod do Cassandra restante com o seguinte comando:
    nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD decommission
  4. Elimine os pods do Cassandra do segundo centro de dados através do Helm:

    helm uninstall datastore -n APIGEE_NAMESPACE
  5. Altere o contexto do Kubernetes para o cluster do seu primeiro centro de dados:
    kubectl config use-context FIRST_DATACENTER_CLUSTER
  6. Verifique se não existem nós do Cassandra num estado inativo no primeiro centro de dados.
    nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status
  7. Verifique se os nós do Cassandra configurados incorretamente (destinados ao segundo centro de dados) foram removidos do primeiro centro de dados. Certifique-se de que os endereços IP apresentados no resultado do comando nodetool status são apenas os endereços IP dos pods do Cassandra destinados ao seu primeiro centro de dados. Por exemplo, na saída seguinte, o endereço IP 10.100.0.39 deve ser para um pod no seu primeiro centro de dados.
    kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
    nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status
    
      Datacenter: dc-1
      ================
      Status=U/D (Up/Down) | State=N/L/J/M (Normal/Leaving/Joining/Moving)
      --  Address      Load      Tokens  Owns (effective)  Host ID                               Rack
      UN  10.100.0.39  4.21 MiB  256     100.0%            a0b1c2d3-e4f5-6a7b-8c9d-0e1f2a3b4c5d  ra-1
  8. Verifique se o ficheiro overrides.yaml do segundo centro de dados contém a definição do nome do centro de dados na secção cassandra. Por exemplo:
    cassandra:
      datacenter: DATA_CENTER_2
      rack: "RACK_NAME" # "ra-1" is the default value.
      . . .
  9. Atualize a definição cassandra:replicaCount no ficheiro overrides.yaml para o segundo centro de dados para o número pretendido. Por exemplo:
    cassandra:
      datacenter: DATA_CENTER_2
      . . .
      replicaCount: 3
  10. Aplique o ficheiro overrides.yaml para o segundo centro de dados com o argumento datastore. Por exemplo:
    helm upgrade datastore apigee-datastore \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f 2ND_DATACENTER_OVERRIDES_FILE \
    --dry-run=server

    Certifique-se de que inclui todas as definições apresentadas, incluindo --atomic para que a ação seja revertida em caso de falha.

    Instale o gráfico:

    helm upgrade datastore apigee-datastore \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    -f 2ND_DATACENTER_OVERRIDES_FILE
  11. Use kubectl exec para aceder a um dos novos pods do Cassandra no segundo centro de dados e verifique se existem dois centros de dados:
     "nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status"

Solução alternativa para o problema conhecido 388608440

Esta secção explica como verificar se a sua instalação é afetada pelo problema conhecido 388608440 e como resolvê-lo.

Diagnóstico

Para verificar se é afetado por este problema conhecido, execute o seguinte comando:

kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | \
  xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- \
  bash -c 'echo "{}: Found $(nodetool -u cassandra -pw $CASS_PASSWORD listsnapshots | grep -c compaction_history) leftover snapshots"'

Por exemplo:

kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: Found $(nodetool -u cassandra -pw $CASS_PASSWORD listsnapshots | grep -c compaction_history) leftover snapshots"'
pod/apigee-cassandra-default-0: Found 0 leftover snapshots
pod/apigee-cassandra-default-1: Found 0 leftover snapshots
pod/apigee-cassandra-default-2: Found 0 leftover snapshots
    

Se o número de instantâneos restantes for superior a 0 para qualquer um dos seus pods do Cassandra, a sua instalação é afetada por este problema.

Resolução

Para resolver este problema, siga os passos abaixo, selecionando o tipo de cópia de segurança que usa e a versão secundária do Apigee Hybrid:

Cópia de segurança do Cloud Storage

  1. Certifique-se de que usa a configuração correta para a cópia de segurança do Cloud Storage. Alguns problemas comuns incluem, entre outros, o seguinte:

    Se encontrar problemas com a configuração, corrija-os antes de continuar.

  2. Elimine manualmente os instantâneos restantes com o seguinte comando:

    Apigee Hybrid 1.12

    kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'

    Por exemplo:

    kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'

    Apigee Hybrid 1.11

    kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'

    Por exemplo:

    kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
    pod/apigee-cassandra-default-1: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
    pod/apigee-cassandra-default-2: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
    pod/apigee-cassandra-default-0: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
                
  3. Acione uma tarefa de cópia de segurança manual e valide se é concluída com êxito.
  4. Valide se o arquivo de cópia de segurança criado pela tarefa de cópia de segurança manual foi carregado com êxito para o contentor do Cloud Storage cassandra.backup.dbStorageBucket que especificou no ficheiro overrides.yaml.
  5. Valide se o número de instantâneos restantes é 0 para todos os pods do Cassandra através do comando apresentado anteriormente na secção Diagnóstico.

Cópia de segurança do servidor remoto

  1. Certifique-se de que o servidor de cópia de segurança remoto está em bom estado e é acessível a partir dos pods do Cassandra. Consulte a secção de resolução de problemas para ver os passos de verificação da conetividade SSH. Seguem-se alguns problemas comuns, entre outros:
    • A firewall de rede está a bloquear a ligação.
    • A chave SSH não está configurada corretamente.
    • Não é possível estabelecer ligação ao servidor de cópia de segurança remoto.
    • O servidor de cópias de segurança remoto está sem armazenamento gratuito.

    Se encontrar problemas com o servidor de cópia de segurança remota, corrija-os antes de continuar.

  2. Elimine manualmente os instantâneos restantes com o seguinte comando:

    Apigee Hybrid 1.12

    kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'

    Por exemplo:

    kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'

    Apigee Hybrid 1.11

    kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'

    Por exemplo:

    kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
    pod/apigee-cassandra-default-1: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
    pod/apigee-cassandra-default-2: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
    pod/apigee-cassandra-default-0: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
                
  3. Acione uma tarefa de cópia de segurança manual e valide se é concluída com êxito.
  4. Valide se o arquivo de cópia de segurança criado pela tarefa de cópia de segurança manual foi carregado com êxito para o servidor de cópia de segurança remoto.
  5. Valide se o número de instantâneos restantes é 0 para todos os pods do Cassandra através do comando apresentado anteriormente na secção Diagnóstico.

Recursos adicionais

Consulte o artigo Introdução aos manuais de procedimentos do Apigee X e do Apigee Hybrid.