Nesta página, você encontra uma visão geral dos snapshots RDB do Memorystore para Redis. Nesta página, presumimos que você conhece os snapshots RDB do Redis de código aberto e o recurso de 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 um cache, o aplicativo pode tolerar a perda de dados de cache ou pode repovoar o cache com muita facilidade de um armazenamento permanente. No entanto, há alguns casos de uso em que o tempo de inatividade de uma instância do Memorystore ou a perda completa dos dados da instância podem 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 snapshots RDB em instâncias do nível Standard oferece proteção extra contra falhas que podem causar liberações de cache. O nível Standard oferece uma instância altamente disponível com várias réplicas e permite uma recuperação rápida usando o failover automático se a instância principal falhar.
Em alguns cenários, talvez você também queira garantir que os dados possam ser 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 perda de dados. Com os snapshots do RDB ativados, se necessário, uma recuperação é feita com base no snapshot mais recente.
Os snapshots do RDB são adequados para casos de uso que podem tolerar alguma quantidade de dados desatualizados após a recuperação. Também é possível usar snapshots do RDB para automatizar o backup e a recuperação de instâncias do nível Básico.
Visão geral dos snapshots do RDB
O recurso de snapshots do RDB tem o seguinte comportamento:
Armazena snapshots pontuais completos em intervalos especificados pelo usuário no armazenamento permanente.
Você escolhe a frequência e a programação dos snapshots de rotina. O intervalo mínimo é
1he 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 por um upgrade da versão do OSS Redis da 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 Padrão recuperam dados de um snapshot se uma réplica não estiver disponível e tanto a instância principal quanto a réplica forem reiniciadas.
Não adiciona custos extras ao faturamento da instância.
Comportamento adicional
Os snapshots são usados para recuperação de instâncias e não estão disponíveis para restaurações manuais. 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 opção Exportar e importar para fazer backup e restaurar seus dados manualmente.
Em uma instância do nível Standard, o snapshot é feito na réplica para minimizar o uso de memória e CPU no servidor principal. Os snapshots nunca são capturados do nó principal.
Restrições
Disponível em instâncias do Memorystore para Redis que usam a versão 5.0 ou mais recente do Redis.
Se a instância tiver muitas chaves (cerca de 200 milhões ou mais), os snapshots e as recuperações de RDB poderão ser lentos. Nesse volume de chaves, o próprio servidor Redis pode ser o gargalo que diminui a velocidade dos snapshots e das recuperações.
Como programar snapshots do RDB
Ao ativar snapshots do RDB durante a criação da instância, especifique um
intervalo de snapshot. Você também pode especificar um horário de início. Juntos, eles definem a programação diária dos snapshots. Os intervalos que podem ser definidos 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 vão começar à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á tirado assim que 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 de forma consistente se os snapshots sempre forem concluídos e não demorarem mais do que o intervalo de backup especificado.
No entanto, o acionamento do snapshot com base na programação diária é feito da melhor forma possível. A programação pode divergir da programação inicialmente determinada por vários motivos:
Se um snapshot falhar ou levar mais tempo do que o intervalo especificado para ser concluído, o próximo snapshot vai começar imediatamente após a conclusão do snapshot atual.
- Para evitar que o instantâneo seja executado continuamente e sobrecarregue a instância, recomendamos definir um intervalo longo o suficiente para que o instantâneo seja concluído.
Se um snapshot já estiver em andamento em um horário alinhado com a programação diária, ele será concluído, e o próximo horário de snapshot será calculado apenas com base no intervalo desde o início do último snapshot bem-sucedido.
Ajustar a programação atual
Pode haver situações em que você queira 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 e resolver problemas de desempenho.
Para interromper temporariamente a criação de snapshots por um curto período, ajuste a data de início para uma data futura. Depois de ajustar o horário de início para uma data futura, o próximo snapshot não vai começar até essa data. Se você fizer isso, o último snapshot será retido por pelo menos sete dias e usado em caso de recuperação.
Para saber mais sobre como ajustar programações de snapshots, consulte Ajustar a programação de snapshots.
Comportamento de recuperação
As instâncias do Redis no nível básico acionam uma recuperação sempre que são reiniciadas. As operações comuns que acionam reinicializações são o escalonamento e o upgrade da versão da instância. Os snapshots RDB preservam os dados da instância do nível básico durante essas operações que causam reinicializações, manutenção planejada e falhas inesperadas do sistema.
As instâncias do Redis no nível padrão fazem failover para uma réplica como o mecanismo principal de recuperação, em vez de carregar de um snapshot. Uma instância do nível padrão é 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 de RDB estão ativados.
Se o snapshot falhar consecutivamente em vários intervalos, o último backup disponível poderá estar desatualizado.
A perda de dados no pior caso para uma recuperação de um snapshot é a soma do intervalo especificado desde o início do último snapshot válido e o tempo para salvar o próximo snapshot no armazenamento. Em caso de incidente de recuperação, use a métrica last_success_age para conferir o período de perda de dados.
Recomendamos que você defina alertas para detectar falhas de snapshots programados e tome medidas corretivas. Para saber mais sobre como definir alertas, consulte Monitorar snapshots.
Tempo de recuperação
A instância fica indisponível enquanto se recupera de um snapshot.
O tempo de recuperação depende do tamanho do snapshot. Para entender o tempo previsto de recuperação, verifique a métrica RDB recovery remaining time usando o Cloud Monitoring no console do Google Cloud .
Como 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 o 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 de aplicativos para ela. Em seguida, você pode transferir os dados restaurados para a nova instância assim que a instância original for recuperada.
Falha de snapshot e falha de recuperação
Falha no snapshot
Qualquer snapshot com falha é informado ao Cloud Monitoring, e uma nova tentativa é feita imediatamente. Falhas consecutivas de snapshot aumentam a quantidade de dados perdidos em caso de recuperação, porque os dados recuperados ficam cada vez mais desatualizados. Para informações sobre como detectar e resolver problemas de falha de snapshot, consulte Como monitorar snapshots.
Falha na recuperação
As falhas de recuperação são raras, mas podem acontecer. Se ocorrer uma falha na recuperação, a instância será recuperada sem dados.
Práticas recomendadas
Para ter os melhores resultados ao fazer backup da sua instância com snapshots RDB, siga as práticas recomendadas descritas abaixo:
Gerenciamento de memória
Os snapshots do RDB usam um fork de processo e um mecanismo de cópia na gravação para criar um snapshot da instância. Dependendo do padrão de gravações na instância, a memória usada da instância vai aumentar à medida que as páginas afetadas pelas gravações forem copiadas. No pior caso, a ocupação de 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% sejam reservados para sobrecarga. Consulte as Práticas recomendadas de gerenciamento de memória
para saber mais. Essa sobrecarga de memória, além dos snapshots de monitoramento, ajuda você 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 ele tenta conciliar uma quantidade significativa de chaves desatualizadas ou outras mudanças no banco de dados, como uma mudança de esquema.
Se você achar que o snapshot está muito desatualizado ou que a instância passou por outras mudanças importantes que são difíceis de conciliar com o snapshot, desative e reative os snapshots do RDB. Isso exclui os snapshots atuais, permitindo que você evite a recuperação de um snapshot desatualizado.
Para monitorar snapshots desatualizados, defina um alerta nas métricas de snapshot do RDB last_status e last_success_age.
Recuperação prolongada de um snapshot
Recomendamos definir um alerta para a métrica
redis.googleapis.com/server/uptime
para notificar você se a instância ficar indisponível.
Se a instância não estiver disponível e uma recuperação de um snapshot estiver demorando muito, crie uma nova instância do Redis e direcione o tráfego para ela. Quando a instância original do Redis for recuperada, você poderá transferir os dados restaurados para a nova instância.
Impacto no 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 a execução deles durante períodos de baixo tráfego de instâncias.
Use o horário de início e o intervalo para programar os snapshots nos horários necessários. Por exemplo, se a carga for muito baixa das 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 com cuidado o impacto na performance e pondere os benefícios de usar snapshots de RDB para a carga de trabalho.
Como monitorar snapshots
É importante monitorar snapshots e definir alertas para snapshots com falha. Snapshots com falha podem indicar uma instância sobrecarregada que pode continuar com dificuldade de recuperação do snapshot.
Para uma lista de métricas disponíveis para monitorar snapshots, consulte Métricas de snapshot do RDB. Para receber uma notificação de um snapshot com falha, defina um alerta para a métrica last_status de snapshot do RDB. Também é possível usar o console do Google Cloud para verificar se há falhas.
Monitorar o impacto na performance
Para monitorar o impacto de um snapshot no desempenho da sua instância do Memorystore, consulte as métricas disponíveis no Cloud Monitoring, como uso de CPU e memória. Se você notar uma redução no desempenho, use a métrica in_progress do snapshot do RDB para determinar se um snapshot estava em andamento quando os problemas de desempenho foram detectados.
A seguir
- Saiba mais sobre como importar e exportar backups.
- Siga o guia de como exportar dados de uma instância do Redis.