Snapshots do RDB

Nesta página, apresentamos uma visão geral dos snapshots do RDB do Memorystore para Redis. Nesta página, presumimos que você conheça os snapshots do RDB do Redis de código aberto e o recurso importação/exportação do Memorystore.

Para saber como ativar, desativar e monitorar snapshots do RDB, consulte Gerenciar snapshots do RDB.

O Memorystore para Redis é usado principalmente como um cache na memória. Ao usar o Memorystore como cache, o aplicativo pode tolerar a perda de dados em cache ou pode preencher de novo o cache de um armazenamento permanente com facilidade. No entanto, há alguns casos de uso em que a inatividade de uma instância do Memorystore ou a perda completa de dados da instância pode causar longos períodos de inatividade do aplicativo.

Recomendamos usar o nível Standard como o principal mecanismo para alta disponibilidade. Além disso, ativar os snapshots do RDB em instâncias do nível Standard oferece proteção extra contra falhas que podem causar limpezas de cache. O nível Padrão oferece uma instância altamente disponível com várias réplicas e permite a recuperação rápida usando failover automático em caso de falha da primária.

Em alguns cenários, talvez você também queira garantir que os dados sejam recuperados de backups de snapshots em caso de falha catastrófica das instâncias do nível Standard. Nesses cenários, os backups automatizados e a capacidade de restaurar dados de snapshots do RDB podem oferecer proteção adicional contra a perda de dados. Com snapshots do RDB ativados, se necessário, uma recuperação é feita a partir do snapshot mais recente do RDB.

Os snapshots do RDB são adequados para casos de uso que toleram um pouco de inatividade de dados após a recuperação. Use também snapshots do RDB para automatizar o backup e a recuperação de instâncias de nível Básico.

Visão geral dos snapshots do RDB

O recurso de snapshots do RDB tem o seguinte comportamento:

  • Armazena snapshots completos pontuais em intervalos especificados pelo usuário no armazenamento permanente.

  • Você escolhe a frequência e a programação de snapshots da rotina. O intervalo mínimo de snapshots é 1h, e o máximo é 24h.

  • As instâncias do nível básico recuperam dados do snapshot mais recente sempre que uma instância é reiniciada devido a uma falha, passa por uma operação de escalonamento ou passa por um upgrade para a versão do OSS Redis da sua instância.

  • Por padrão, as instâncias do nível Standard recuperam dados da réplica, não de um snapshot. No entanto, as instâncias do nível Standard recuperarão os dados de um snapshot se não houver uma réplica disponível e as instâncias primária e de réplica sofrerem uma reinicialização.

  • Não adiciona custos extras ao faturamento da sua instância.

Outros comportamentos

  • Os snapshots são usados para recuperação de instâncias e não estão disponíveis para restauração manual. A qualquer momento, apenas o último snapshot bem-sucedido está disponível para recuperação. Além dos snapshots do RDB, é possível usar a exportação e importação para fazer backup e restaurar manualmente os dados.

  • Em uma instância do nível Standard, o snapshot é capturado na réplica para minimizar o uso de memória e CPU na primária. Os snapshots nunca são capturados do nó principal.

Restrições

  • Disponível para níveis de capacidade M4. Não compatível com instâncias M5 (101 GB ou mais).

  • Disponível em instâncias do Memorystore para Redis usando o Redis versão 5.0 ou mais recente.

Como programar snapshots do RDB

Ao ativar snapshots do RDB durante a criação da instância, é preciso especificar um intervalo de snapshots. Também é possível especificar um horário de início. Juntos, eles definem a programação diária dos snapshots. Os intervalos que você pode definir são 1h, 6h, 12h e 24h. Por exemplo, se você definir o horário de início como 4h e o intervalo como 1 hora, os snapshots começarão às 4h do dia em que forem ativados e continuarão a cada hora depois disso.

Se um horário de início não for especificado, o primeiro snapshot será criado o mais rápido possível, e o intervalo será respeitado. Por exemplo, com um horário de início não especificado e um intervalo de uma hora, o snapshot pode começar às 6h13 e continuar às 7h13, 8h13 etc.

Se um horário de início for especificado, a programação diária será respeitada consistentemente se os snapshots sempre tiverem êxito e não levarem mais do que o intervalo de backup especificado.

No entanto, acionar o snapshot com base na programação diária é a melhor opção. A programação pode ser diferente da programação inicialmente determinada por vários motivos:

  • Se um snapshot falhar ou demorar mais do que o intervalo especificado para ser concluído, o próximo snapshot começará imediatamente após a conclusão do snapshot atual.

    • Para evitar que o snapshot seja executado continuamente e sobrecarregue a instância, é recomendável definir um intervalo longo o suficiente para permitir que o snapshot seja concluído.
  • Se um snapshot já estiver em andamento em um momento alinhado à programação diária, ele será concluído, e o próximo tempo de snapshot será calculado exclusivamente no intervalo desde o início do último snapshot bem-sucedido.

Ajustar programação atual

Você pode entrar em cenários em que quer pausar temporariamente a criação de snapshots do RDB por um determinado período. Isso pode ser feito para garantir que não haja impactos no desempenho durante eventos críticos ou para desativar temporariamente os snapshots para resolver problemas de desempenho.

Para parar de tirar snapshots temporariamente por um curto período, ajuste o horário de início para uma data futura. Depois que você ajusta o horário de início para uma data futura, o próximo snapshot não começa até essa data. Se você fizer isso, o último snapshot será mantido por pelo menos sete dias e será usado no caso de uma recuperação.

Para saber mais sobre como ajustar a programação de snapshots, consulte Como ajustar a programação de snapshots.

Comportamento de recuperação

As instâncias do Redis do nível básico acionam uma recuperação sempre que a instância é reiniciada. As operações comuns que acionam reinicializações são escalonamento e upgrade da versão da instância. Os snapshots do RDB preservam dados da instância de nível básico durante essas operações que causam reinicializações, manutenção planejada e falhas imprevisíveis do sistema.

As instâncias do Redis do nível Padrão fazem failover para uma réplica como o principal mecanismo de recuperação em vez de carregar de um snapshot. Uma instância do nível Standard é recuperada do snapshot quando a restauração de uma réplica falha.

Consistência de dados na recuperação

Quando ativados, os snapshots do RDB fazem o possível para garantir que os backups ocorram no intervalo especificado, mas isso não pode ser garantido. Os snapshots podem falhar por vários motivos. Consulte as práticas recomendadas para saber como configurar e monitorar instâncias quando os snapshots do RDB estão ativados.

Se o snapshot falhar consecutivamente em vários intervalos, o último backup disponível poderá ficar arbitrariamente desatualizado.

A pior perda de dados de caso para uma recuperação de um snapshot é a soma do intervalo especificado desde o último snapshot bom iniciado e o tempo para salvar o próximo snapshot no armazenamento. No caso de um incidente de recuperação, use a métrica last_success_age para ver o período de perda de dados.

Recomendamos que você defina alertas para detectar falhas em snapshots programados e tomar ações corretivas. Para saber mais sobre a definição de alertas, consulte Como monitorar snapshots.

Tempo de recuperação

A instância ficará indisponível enquanto a instância for recuperada de um snapshot. O tempo de recuperação depende do tamanho do snapshot. Para entender o tempo de recuperação previsto, verifique a métrica RDB recovery remaining time usando o Cloud Monitoring ou o Console do Google Cloud.

Reduzir a recuperação lenta

Às vezes, a recuperação de um snapshot pode levar mais tempo do que o esperado. Talvez seja necessário tomar medidas para reconectar seu aplicativo ao Redis o mais rápido possível.

Nesse caso, é possível criar uma nova instância do Redis e direcionar o tráfego do aplicativo para ela. Em seguida, será possível transferir os dados restaurados para a nova instância assim que a instância original se recuperar.

Falha de snapshot e de recuperação

Falha do snapshot

Qualquer snapshot com falha é informado ao Cloud Monitoring, e as tentativas de snapshot são realizadas imediatamente. As falhas de snapshots consecutivos aumentam a quantidade de dados perdidos no caso de recuperação, porque os dados recuperados se tornam cada vez mais desatualizados. Para informações sobre como detectar e resolver problemas de snapshot, consulte Monitoramento de snapshots.

Falha de recuperação

Falhas de recuperação são raras, mas podem acontecer. Se ocorrer uma falha de recuperação, a instância será recuperada sem dados.

Práticas recomendadas

Para melhores resultados de backup da instância com snapshots do RDB, siga as práticas recomendadas descritas abaixo:

Gerenciamento de memória

Os snapshots do RDB usam uma bifurcação do processo e um 'copy-on-write' mecanismo para capturar um snapshot da instância. Dependendo do padrão de gravações na instância, a memória usada da instância aumentará à medida que as páginas tocadas pelas gravações forem copiadas. No pior caso, o espaço ocupado na memória pode ser o dobro do tamanho dos dados na instância.

Para garantir que a instância tenha memória suficiente para concluir o snapshot, defina maxmemory-gb como 80% da capacidade da instância para que 20% seja reservado para sobrecarga. Consulte Práticas recomendadas de gerenciamento de memória para saber mais. Essa sobrecarga de memória, além de Snapshots do Monitoring, ajuda a gerenciar sua carga de trabalho para ter snapshots bem-sucedidos.

Snapshots desatualizados

A recuperação da instância de um snapshot desatualizado pode causar problemas de desempenho no aplicativo, já que ela tenta reconciliar uma quantidade significativa de chaves desatualizadas ou outras alterações no banco de dados, como uma alteração de esquema.

Se você achar que seu snapshot está desatualizado ou se sua instância tiver passado por outras alterações importantes que são difíceis de reconciliar com o snapshot, desative e reative os snapshots do RDB. Isso exclui os snapshots atuais, permitindo evitar a recuperação de um snapshot desatualizado.

Para monitorar snapshots desatualizados, defina um alerta no last_status snapshot do RDB e last_success_age métricas do snapshot do RDB.

Recuperação prolongada de um snapshot

Recomendamos que você defina um alerta para a métrica redis.googleapis.com/server/uptime avisar se sua instância ficar indisponível.

Se a instância não estiver disponível e a recuperação de um snapshot estiver demorando muito, crie uma nova instância do Redis e direcione o tráfego para ela. Após a recuperação da instância original do Redis, você poderá transferir os dados restaurados para a nova instância.

Impacto do desempenho dos snapshots do RDB

Dependendo do padrão da carga de trabalho, os snapshots do RDB podem afetar o desempenho da instância e aumentar a latência dos aplicativos.

Dependendo da quantidade de possível perda de dados que seu aplicativo pode tolerar, é possível minimizar o impacto no desempenho dos snapshots do RDB, programando-os para ser executados durante períodos de baixo tráfego de instâncias.

Use o horário e o intervalo de início para programar os snapshots nos horários necessários. Por exemplo, se a carga for muito baixa da 1h às 4h, defina o horário de início como 3h e o intervalo como 24 horas.

Se o sistema tiver uma carga constante e exigir snapshots frequentes, avalie cuidadosamente o impacto no desempenho e avalie os benefícios do uso de snapshots do RDB para a carga de trabalho.

Como monitorar snapshots

É importante monitorar os snapshots e definir alertas para aqueles com falha. Os snapshots com falha podem indicar uma instância sobrecarregada que pode continuar com dificuldade para se recuperar do snapshot.

Para ver uma lista de métricas disponíveis para monitoramento de snapshots, consulte Métricas de snapshots do RDB. Para receber um aviso sobre um snapshot com falha, defina um alerta para a métrica de snapshot do last_status do RDB. Também é possível usar o console do Google Cloud para verificar se há falhas.

Monitoramento do impacto no desempenho

É possível monitorar o impacto no desempenho de um snapshot na instância do Memorystore ao visualizar as métricas disponíveis pelo Cloud Monitoring, como o uso de CPU, uso de memória etc. Se o desempenho reduzido for observado, use a métrica de snapshot do RDB in_progress para determinar se um snapshot estava em andamento quando problemas de desempenho foram detectados.

A seguir