Atualmente, tenho um servidor redis ativo em execução em uma instância de nuvem e quero migrar esse servidor redis para uma nova instância de nuvem e usá-la como meu novo servidor redis. Se fosse o MySQL, eu exportaria o banco de dados do servidor antigo e importaria para o novo servidor. Como devo fazer isso com redis?
PS: Não estou pensando em configurar a replicação. Quero migrar completamente o servidor redis para uma nova instância.
Respostas:
Salve uma captura instantânea do banco de dados em um dump.rdb executando
BGSAVE
ouSAVE
na linha de comando. Isso criará um arquivo chamado dump.rdb na mesma pasta do seu servidor redis. Veja uma lista de todos os comandos do servidor .Copie este dump.rdb para o outro servidor redis para o qual você deseja migrar. Quando o redis inicia, ele procura esse arquivo para inicializar o banco de dados.
fonte
appendonly = yes
), defina-o comono
antes de iniciar o servidor Redis - caso contrário, ele não carregará o novo conjunto de dados. Depois que o conjunto de dados for carregado na memória, ligue-o novamente na memória (config set appendonly yes
) e no arquivo de configuração./etc/redis/redis.conf
, e você pode procurar por ele para descobrir onde seus.rdb
arquivos são:cat /etc/redis/redis.conf | grep "rdb"
. No meu caso, é/var/lib/redis
redis-cli config get dir
daria a você o diretório em que.rdb
está armazenado.Primeiro, crie um despejo no servidor A.
Isso garante que
dump.rdb
está completamente atualizado e nos mostra onde está armazenado (/var/lib/redis/dump.rdb
neste caso).dump.rdb
também é gravado periodicamente no disco automaticamente.Em seguida, copie-o para o servidor B:
Pare o servidor Redis em B, copie dump.rdb (garantindo que as permissões sejam as mesmas de antes) e inicie.
A versão do Redis em B deve ser maior ou igual à de A, ou você pode encontrar problemas de compatibilidade .
fonte
CONFIG GET dir
, que retornou"/usr/local/var/db/redis"
Se você tiver a conectividade entre servidores, é melhor configurar a replicação (que é trivial, ao contrário do SQL) com a nova instância como um nó escravo - então você pode mudar o novo nó para dominar com um único comando e fazer o movimento com zero tempo de inatividade.
fonte
Também é possível migrar dados usando o comando SLAVEOF:
Verifique se você recebeu as chaves com
KEYS *
. Você também pode testar a nova instância de qualquer outra maneira e, quando terminar, ative a replicação de:fonte
Atualmente você também pode usar o MIGRATE, disponível desde o 2.6.
Eu tive que usar isso, pois só queria mover os dados em um banco de dados e não em todos eles. As duas instâncias do Redis vivem em duas máquinas diferentes.
Se você não conseguir se conectar diretamente ao Redis-2 a partir do Redis-1, use a ligação de porta ssh:
Um pequeno script para repetir todas as chaves usando KEYS e MIGRATE cada chave. Este é o Perl, mas espero que você entenda a ideia:
Veja http://redis.io/commands/migrate para mais informações.
fonte
Para verificar onde o dump.rdb deve ser colocado ao importar dados redis,
iniciar cliente
e
então
Aqui / Users / Admin é o local do dump.rdb que é lido no servidor e, portanto, esse é o arquivo que deve ser substituído.
fonte
você também pode usar rdd
ele pode despejar e restaurar um servidor redis em execução e permitir filtrar / corresponder / renomear chaves de despejos
fonte
Os principais elementos de uma migração de tempo de inatividade zero são:
CONFIG SET slave-read-only no
)Em resumo:
Além disso, os redis possuem opções que permitem desativar um redis de origem para aceitar gravações logo após desanexar um destino:
min-slaves-to-write
min-slaves-max-lag
Este tópico coberto por
Muito boa explicação da equipe RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
E até a ferramenta interativa para migração: https://github.com/RedisLabs/redis-migrate
fonte
Também quero fazer o mesmo: migrar um banco de dados de uma instância redis independente para uma outra instância redis (redis sentinel).
Como os dados não são críticos (dados da sessão), tentarei https://github.com/yaauie/redis-copy .
fonte
A maneira simples que encontrei para exportar / fazer backup de dados Redis (criar arquivo de despejo) é iniciar um servidor via linha de comando com o sinalizador slaveof e criar réplica ao vivo da seguinte forma (assumindo que o Redis de origem seja 1.2.3.4 na porta 6379):
fonte
Acabei de publicar um utilitário de interface de linha de comando no npm e no github que permite copiar chaves que correspondem a um determinado padrão (par *) de um banco de dados Redis para outro.
Você pode encontrar o utilitário aqui:
https://www.npmjs.com/package/redis-utils-cli
fonte
redis-dump finalmente funcionou para mim. Sua documentação fornece um exemplo de como despejar um banco de dados Redis e inserir os dados em outro.
fonte