Esta secção aborda como configurar a cópia de segurança e a recuperação de dados para o anel da base de dados Apache Cassandra instalado no plano de tempo de execução híbrido do Apigee. Veja também o artigo sobre o armazenamento de dados do Cassandra.
O que precisa de saber sobre as cópias de segurança do Cassandra
O Cassandra é uma base de dados replicada configurada para ter, pelo menos, três cópias dos seus dados em cada região ou centro de dados. O Cassandra usa a replicação de streaming e as reparações de leitura para manter as réplicas de dados em cada região ou centro de dados em qualquer ponto específico.
No modo híbrido, as cópias de segurança do Cassandra não estão ativadas por predefinição. No entanto, é uma boa prática ativar as cópias de segurança do Cassandra caso os seus dados sejam eliminados acidentalmente.
O que é incluído na cópia de segurança?
A configuração de cópia de segurança descrita neste tópico cria uma cópia de segurança das seguintes entidades:
- Esquema do Cassandra, incluindo o esquema do utilizador (definições do espaço de chaves do Apigee)
- Informações do token de partição do Cassandra por nó
- Um instantâneo dos dados do Cassandra
Onde são armazenados os dados da cópia de segurança?
Os dados de cópia de segurança são armazenados num contentor do Google Cloud Storage que tem de criar. A criação e a configuração de contentores são abordadas neste tópico.
Agendar cópias de segurança do Cassandra
As cópias de segurança são agendadas como cron
tarefas no plano de tempo de execução. Para agendar cópias de segurança do Cassandra:
- Execute o seguinte comando
create-service-account
para criar uma conta de serviço (CS) do Google Cloud com a funçãoroles/storage.objectAdmin
padrão. Esta função de SA permite-lhe escrever dados de cópias de segurança no Cloud Storage. Execute o seguinte comando no diretório raiz da instalação híbrida: Por exemplo:./tools/create-service-account apigee-cassandra OUTPUT_DIR
Para mais informações sobre as contas de serviço do Google Cloud, consulte o artigo Criar e gerir contas de serviço../tools/create-service-account apigee-cassandra ./service-accounts
- O comando
create-service-account
guarda um ficheiro JSON que contém a chave privada da conta de serviço. O ficheiro é guardado no mesmo diretório onde o comando é executado. Vai precisar do caminho para este ficheiro nos passos seguintes. - Crie um contentor do Cloud Storage. Especifique uma política de retenção de dados razoável para o contentor. A Apigee recomenda uma política de retenção de dados de 15 dias.
- Abra o ficheiro
overrides.yaml
. - Adicione as seguintes propriedades
cassandra.backup
para ativar a cópia de segurança. Não remova nenhuma das propriedades já configuradas.Parâmetros
cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Exemplo
... cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data backup: enabled: true serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" schedule: "45 23 * * 6" ...
Onde:
- Aplique as alterações de configuração ao novo cluster. Por exemplo:
./apigeectl apply -f overrides.yaml
Propriedade | Descrição |
---|---|
backup:enabled |
A cópia de segurança está desativada por predefinição. Tem de definir esta propriedade como true . |
backup:serviceAccountPath |
SA_JSON_FILE_PATH O caminho no seu sistema de ficheiros para o ficheiro JSON da conta de serviço que foi transferido quando executou |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH O caminho do contentor do Cloud Storage neste formato: |
backup:schedule |
BACKUP_SCHEDULE_CODE A hora em que a cópia de segurança começa, especificada na sintaxe crontab padrão. Predefinição: |
Restaurar cópias de segurança
O restauro transfere os dados da localização da cópia de segurança e restaura-os num novo cluster do Cassandra com o mesmo número de nós. Não são retirados dados do cluster do Cassandra antigo.
As instruções de restauro abaixo destinam-se a implementações de região única que usam o Google Cloud Storage para cópias de segurança. Para implementações multirregionais, consulte o artigo Implementação multirregional no GKE e GKE On-Prem.
Para restaurar cópias de segurança do Cassandra:
- Crie um novo espaço de nomes no cluster do Kubernetes existente que vai ser usado para restaurar a implementação do tempo de execução híbrido. Não use o nome do espaço de nomes original para o novo espaço de nomes. Não use o espaço de nomes antigo para o restauro.
- No diretório de instalação híbrida raiz, crie um novo ficheiro
overrides-restore.yaml
. - Copie a configuração completa do Cassandra do ficheiro
overrides.yaml
original para o novo ficheirooverrides-restore.yaml
. Veja o seguinte comando para um exemplo.cp ./overrides.yaml ./overrides-restore.yaml
- Adicione um elemento de espaço de nomes ao novo ficheiro
overrides-restore.yaml
. Não use o mesmo espaço de nomes que foi usado para o cluster original.Parâmetros
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... restore: enabled: true snapshotTimestamp: TIMESTAMP serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH image: pullPolicy: Always ...
Exemplo
... namespace: cassandra-restore cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data restore: enabled: true snapshotTimestamp: "20210203213003" serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" image: pullPolicy: Always ...
Onde:
Propriedade Descrição namespace
YOUR_RESTORE_NAMESPACE
O nome do novo espaço de nomes que criou no passo 1 para o novo cluster do Cassandra. Não use o mesmo espaço de nomes que usou para o cluster original.
restore:enabled
O restauro está desativado por predefinição. Tem de definir esta propriedade como true
.restore:snapshotTimestamp
TIMESTAMP
A data/hora do instantâneo da cópia de segurança a restaurar. Para verificar que datas/horas podem ser usadas, aceda ao
dbStorageBucket
e consulte os ficheiros presentes no contentor. Cada nome de ficheiro contém um valor de carimbo de data/hora, como o seguinte:backup_20210203213003_apigee-cassandra-default-0.tgz
Onde 20210203213003 é o valor
snapshotTimestamp
que usaria se quisesse restaurar as cópias de segurança criadas nesse momento.restore:serviceAccountPath
SA_JSON_FILE_PATH
O caminho no seu sistema de ficheiros para a conta de serviço que criou para a cópia de segurança.
restore:dbStorageBucket
CLOUD_STORAGE_BUCKET_PATH
O caminho do contentor do Cloud Storage onde os seus dados de cópia de segurança estão armazenados no seguinte formato:
gs://BUCKET_NAME
O campo
gs://
é obrigatório. - Altere a etiqueta
app
em todos os nós do Cassandra no espaço de nomes antigo executando o seguinte comando:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- Crie uma nova implementação de tempo de execução híbrido. Esta ação cria um novo cluster do Cassandra e começa a restaurar os dados da cópia de segurança no cluster:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
Assim que o restauro estiver concluído, o tráfego tem de ser comutado para usar o cluster do Cassandra no novo espaço de nomes. Execute os seguintes comandos para mudar o tráfego:
kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
- Assim que a mudança de tráfego estiver concluída, pode reconfigurar as cópias de segurança no cluster restaurado
removendo a configuração
restore
e adicionando a configuraçãobackup
ao ficheirooverrides-restore.yaml
. Substitua YOUR_RESTORE_NAMESPACE pelo novo nome do espaço de nomes criado no passo 1.namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Em seguida, aplique a configuração
backup
com o seguinte comando:./apigeectl apply -f ../overrides-restore.yaml
Ver os registos de restauro
Pode verificar os registos da tarefa de restauro e usar grep
para verificar se existem error
para
garantir que o registo de restauro não tem erros.
Valide se o restauro foi concluído
Use o seguinte comando para verificar se a operação de restauro foi concluída:
kubectl get pods
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 1h apigee-cassandra-default-1 1/1 Running 0 1h apigee-cassandra-default-2 1/1 Running 0 59m apigee-cassandra-restore-b4lgf 0/1 Completed 0 51m
Veja os registos de restauro
Use o seguinte comando para ver os registos de restauro:
kubectl logs -f apigee-cassandra-restore-b4lgf
O resultado é semelhante ao seguinte:
Restore Logs: Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] to download file gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1/backup_20190405011309_schema.tgz INFO: download successfully extracted the backup files from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished downloading schema.cql to create schema from 10.32.0.28 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 INFO: the schema has been restored starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 84 95 106 waiting on waiting nodes $pid to finish 84 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO 12:02:28 Configuration location: file:/etc/cassandra/cassandra.yaml …... INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed Summary statistics: Connections per host : 3 Total files transferred : 2 Total bytes transferred : 0.378KiB Total duration : 5048 ms Average transfer rate : 0.074KiB/s Peak transfer rate : 0.075KiB/s progress: [/10.32.1.155]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed progress: [/10.32.1.155]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed waiting on waiting nodes $pid to finish 106 Restore finished
Valide a tarefa de cópia de segurança
Também pode validar a tarefa de cópia de segurança depois de agendar a tarefa cron de cópia de segurança. Depois de o cronjob ter sido agendado, deve ver algo semelhante ao seguinte:
kubectl get pods
O resultado é semelhante ao seguinte:
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-backup-1554515580-pff6s 0/1 Running 0 54s
Verifique os registos da cópia de segurança
A tarefa de cópia de segurança:
- Cria um ficheiro
schema.cql
. - Carrega-o para o seu contentor de armazenamento.
- Faz eco do nó para fazer uma cópia de segurança dos dados e carregá-los ao mesmo tempo.
- Aguarda até que todos os dados sejam carregados.
kubectl logs -f apigee-cassandra-backup-1554515580-pff6s
O resultado é semelhante ao seguinte:
myusername-macbookpro:cassandra-backup-utility myusername$ kubectl logs -f apigee-cassandra-backup-1554577680-f9sc4 starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 35 46 57 waiting on process 35 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/manifest.json …… /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/schema.cql /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-CompressionInfo.db …… /tmp/tokens.txt / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed waiting on process 46 Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed Requested clearing snapshot(s) for [all keyspaces] waiting on process 57 INFO: Backup 20190406190808 completed waiting result to get schema from 10.32.0.28 INFO: /tmp/schema.cql has been generated Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] tar: removing leading '/' from member names tmp/schema.cql Copying from <TDIN>... / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished uploading schema.cql