Dimensionar o Cassandra

Este tópico aborda como dimensionar o Cassandra horizontal e verticalmente, e como dimensionar o Cassandra.

Escalar o Cassandra horizontalmente

Para aumentar a escala do Cassandra horizontalmente

  1. Certifique-se de que o seu conjunto de nós apigee-data tem capacidade adicional, conforme necessário, antes de dimensionar o Cassandra. Consulte também o artigo Configure pools de nós dedicados.
  2. Defina o valor da propriedade de configuração cassandra.replicaCount no ficheiro de substituições. Para obter informações acerca desta propriedade, consulte a referência da propriedade de configuração. Consulte também o artigo Faça a gestão dos componentes do plano de tempo de execução.
  3. Aplique as alterações. Por exemplo:
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

Dimensionar o Cassandra verticalmente

Esta secção explica como dimensionar verticalmente os pods do Cassandra para acomodar requisitos de CPU e memória mais elevados.

Vista geral

Para uma implementação de produção híbrida do Apigee, recomendamos que crie, pelo menos, dois conjuntos de nós separados: um para serviços com estado (Cassandra) e outro para serviços sem estado (tempo de execução). Por exemplo, consulte os requisitos do cluster de produção do GKE.

Para o conjunto de nós do Cassandra com estado, recomendamos que comece com 8 núcleos de CPU e 30 GB de memória. Após o aprovisionamento do conjunto de nós, não é possível alterar estas definições. Consulte também o artigo Configure o Cassandra para produção.

Se precisar de aumentar a escala dos pods do Cassandra para satisfazer requisitos de CPU e memória mais elevados, siga os passos descritos neste tópico.

Aumentar a escala dos pods do Cassandra

Siga estes passos para aumentar a CPU e a memória do conjunto de nós com estado usado para o Cassandra:

  1. Siga as instruções da sua plataforma Kubernetes para adicionar um novo conjunto de nós ao cluster. As plataformas compatíveis estão listadas nas instruções de instalação.
  2. Verifique se o novo conjunto de nós está pronto:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    Exemplo de comando:

    kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new

    Exemplo de saída:

    NAME                                                STATUS   ROLES    AGE     VERSION
    gke-apigee-data-new-441387c2-2h5n   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-6941   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-nhgc   Ready    <none>   4m29s   v1.14.10-gke.17
    
  3. Atualize o ficheiro de substituições para usar o novo conjunto de nós para o Cassandra e atualize os recursos do pod para a quantidade de CPUs e o tamanho da memória aumentados que quer usar. Por exemplo, para um cluster do GKE, use uma configuração semelhante à seguinte. Se estiver noutra plataforma Kubernetes, tem de ajustar o valor apigeeData.key em conformidade:
    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "NODE_POOL_LABEL_NAME"
        value: "NODE_POOL_LABEL_VALUE"
    
    cassandra:
      resources:
        requests:
          cpu: NODE_POOL_CPU_NUMBER
          memory: NODE_POOL_MEMORY_SIZE
    

    Por exemplo:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
    
  4. Aplique o ficheiro de substituições ao cluster:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

Quando concluir estes passos, os pods do Cassandra começam a ser implementados no novo conjunto de nós.

Reduzir a escala do Cassandra

O Apigee hybrid usa um anel de nós do Cassandra como um StatefulSet. O Cassandra oferece armazenamento persistente para determinadas entidades do Apigee no plano de tempo de execução. Para mais informações sobre o Cassandra, consulte o artigo Acerca do plano de tempo de execução.

O Cassandra é um serviço com utilização intensiva de recursos e não deve ser implementado num pod com outros serviços híbridos. Consoante a carga, é recomendável reduzir o número de nós do Cassandra no anel no seu cluster.

O processo geral para reduzir um anel do Cassandra é o seguinte:

  1. Desative um nó do Cassandra.
  2. Atualize a propriedade cassandra.replicaCount em overrides.yaml.
  3. Aplique a atualização da configuração.
  4. Repita estes passos para cada nó que quer remover.
  5. Elimine a reivindicação de volume persistente ou o volume, consoante a configuração do cluster.

O que precisa de saber

  • Execute esta tarefa num nó de cada vez antes de avançar para o nó seguinte.
  • Se qualquer nó que não seja o nó a ser desativado estiver em mau estado, não continue. O Kubernetes não vai poder reduzir a escala dos pods do cluster.
  • Reduza ou aumente sempre por um fator de três nós.

Pré-requisitos

Antes de reduzir o número de nós do Cassandra no anel, valide se o cluster está em bom estado e se todos os nós estão em funcionamento, conforme mostra o exemplo seguinte:

 kubectl get pods -n yourNamespace -l app=apigee-cassandra
NAME                 READY   STATUS    RESTARTS   AGE
apigee-cassandra-default-0   1/1     Running   0          2h
apigee-cassandra-default-1   1/1     Running   0          2h
apigee-cassandra-default-2   1/1     Running   0          2h
apigee-cassandra-default-3   1/1     Running   0          16m
apigee-cassandra-default-4   1/1     Running   0          14m
apigee-cassandra-default-5   1/1     Running   0          13m
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status
Datacenter: us-east1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.16.2.6    690.17 KiB  256          48.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
UN  10.16.4.6    700.55 KiB  256          51.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
UN  10.16.11.11  144.36 KiB  256          48.3%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
UN  10.16.1.11   767.03 KiB  256          49.8%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
UN  10.16.5.13   193.64 KiB  256          50.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
UN  10.16.8.15   132.42 KiB  256          50.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1

Desative os nós do Cassandra

  1. Desative os nós do Cassandra do cluster através do comando nodetool.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    Por exemplo, este comando desativa apigee-cassandra-5, o nó com o valor numérico mais elevado no nome:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. Aguarde a conclusão da desativação e verifique se o cluster tem agora menos um nó. Por exemplo:
    kubectl -n yourNamespace exec -it nodeName nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.1.11  777.11 KiB  256          58.9%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15  143.23 KiB  256          58.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
  3. Atualize ou adicione a propriedade cassandra.replicaCount no ficheiro overrides.yaml. Por exemplo, se o número atual de nós for 6, altere-o para 5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. Aplique a alteração de configuração ao cluster:
    ./apigeectl apply --datastore
    namespace/apigee unchanged
    secret/ssl-cassandra unchanged
    storageclass.storage.k8s.io/apigee-gcepd unchanged
    service/apigee-cassandra unchanged
    statefulset.apps/apigee-cassandra configured
  5. Verifique se todos os nós restantes do Cassandra estão em execução:
    kubectl get pods -n yourNamespace -l app=apigee-cassandra
    NAME                 READY   STATUS    RESTARTS   AGE
    apigee-cassandra-default-0   1/1     Running   0          3h
    apigee-cassandra-default-1   1/1     Running   0          3h
    apigee-cassandra-default-2   1/1     Running   0          2h
    apigee-cassandra-default-3   1/1     Running   0          25m
    apigee-cassandra-default-4   1/1     Running   0          24m
    
    
  6. Repita os passos 1 a 5 para cada nó que quer desativar.
  7. Quando terminar de desativar os nós, verifique se o valor de cassandra.replicaCount é igual ao número de nós devolvidos pelo comando nodetool status.

    Por exemplo, se reduzir a escala do Cassandra para três nós:

    kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    
    
  8. Depois de reduzir o tamanho do cluster do Cassandra, certifique-se de que elimina o PVC (PersistentVolumeClaim) para garantir que o evento de expansão seguinte não usa o mesmo volume persistente e os dados criados anteriormente.

    Obtenha os nomes dos PVCs:

    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-5   Bound    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h

    Neste exemplo, os seguintes PVCs correspondem aos três nós desativados:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. Elimine os PVCs:
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5
    persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-4
    persistentvolumeclaim "cassandra-data-apigee-cassandra-4" deleted
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3
    persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted
  10. Verifique se o PVC foi eliminado:
    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
  11. Se estiver a usar a instalação do Anthos, elimine o volume persistente do cluster do Kubernetes do Anthos usando a mesma sequência.

    Obtenha os nomes dos volumes persistentes:

    kubectl get pv -n youNamespace
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS   REASON   AGE
    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-4   apigee-gcepd            5h
    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-1   apigee-gcepd            7h
    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-5   apigee-gcepd            5h
    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-2   apigee-gcepd            7h
    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-3   apigee-gcepd            5h
    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-0   apigee-gcepd            7h

    Neste exemplo, os seguintes volumes correspondem aos três nós desativados:

    • 5: pvc-354afa95-81a3-11e9-8862-42010a8e014a
    • 4: pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    • 3: pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  12. Elimine os volumes persistentes:
    kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
    kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    kubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  13. Verifique se os volumes persistentes foram eliminados:
    kubectl get pv -n youNamespace
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS   REASON   AGE
    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-1   apigee-gcepd            7h
    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-2   apigee-gcepd            7h
    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-default-0   apigee-gcepd            7h