web-dev-qa-db-fra.com

Comment déplacer une base de données redis d'un serveur à un autre?

J'ai actuellement un serveur Redis actif sur une instance de cloud et je souhaite migrer ce serveur Redis vers une nouvelle instance de cloud et utiliser cette instance comme mon nouveau serveur Redis. S'il s'agissait de MySQL, j'exporterais la base de données de l'ancien serveur et l'importerais dans le nouveau serveur. Comment dois-je faire cela avec Redis?

P.S .: Je ne cherche pas à configurer la réplication. Je souhaite migrer complètement le serveur Redis vers une nouvelle instance.

170
ErJab

Enregistrez un instantané de la base de données dans un fichier dump.rdb en exécutant la commande BGSAVE ou SAVE à partir de la ligne de commande. Cela créera un fichier nommé dump.rdb dans le même dossier que votre serveur Redis. Voir une liste de tous les serveurs commandes .

Copiez ce fichier dump.rdb sur l’autre serveur Redis vers lequel vous souhaitez migrer. Lorsque redis démarre, il recherche ce fichier pour initialiser la base de données.

104
Anurag

Commencez par créer un cliché sur le serveur A.

A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK

Cela garantit dump.rdb est complètement à jour et nous montre où il est stocké (/var/lib/redis/dump.rdb dans ce cas). dump.rdb est également écrit périodiquement sur le disque automatiquement.

Ensuite, copiez-le sur le serveur B:

A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb

Arrêtez le serveur Redis sur B, copiez dump.rdb (en vous assurant que les autorisations sont les mêmes qu'avant), puis démarrez.

B$ Sudo service redis-server stop
B$ Sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ Sudo chown redis: /var/lib/redis/dump.rdb
B$ Sudo service redis-server start

La version de Redis sur B doit être supérieure ou égale à celle de A, sinon vous pourrez frapper problèmes de compatibilité .

223
Wilfred Hughes

Si vous avez la connectivité entre les serveurs, il est préférable de configurer la réplication (ce qui est trivial, contrairement à SQL) avec la nouvelle instance en tant que nœud esclave - vous pouvez alors basculer le nouveau nœud en maître avec une seule commande et effectuer le déplacement avec zéro temps d'arrêt.

33
Tom Clarkson

crois ou pas, je viens de faire un article pour cela:

http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another

Mais comment savoir quand le transfert de données entre le maître et l'esclave est terminé? Vous pouvez utiliser la commande INFO.

17
nick

De nos jours, vous pouvez également utiliser MIGRATE, disponible depuis la version 2.6.

Je devais l'utiliser car je ne voulais déplacer les données que dans une seule base de données. Les deux instances Redis résident sur deux machines différentes.

Si vous ne pouvez pas vous connecter directement à Redis-2 à partir de Redis-1, utilisez la liaison de port ssh:

 ssh [email protected] -L 1234:127.0.0.1:6379

Un petit script pour boucler toutes les clés en utilisant KEYS et MIGRATE chaque clé. C'est Perl, mais j'espère que vous avez l'idée:

 foreach ( $redis_from->keys('*') ) {

    $redis_from->migrate(
        $destination{Host},    # localhost in my example
        $destination{port},    # 1234
        $_,                    # The key
        $destination{db},
        $destination{timeout} 
    );
 }

Voir http://redis.io/commands/migrate pour plus d'informations.

14
Øyvind Skaar

Il est également possible de migrer des données à l'aide de la commande SLAVEOF:

SLAVEOF old_instance_name old_instance_port

Vérifiez que vous avez reçu les clés avec KEYS *. Vous pouvez également tester la nouvelle instance de toute autre manière et lorsque vous avez terminé, il vous suffit de réactiver la réplication de:

SLAVEOF NO ONE
13
estani

Pour vérifier où le fichier dump.rdb doit être placé lors de l’importation de données Redis,

démarrer client

$redis-cli

et

ensuite

redis 127.0.0.1:6379> CONFIG GET *
 1) "dir"
 2) "/Users/Admin"

Ici/Utilisateurs/Admin correspond à l'emplacement de dump.rdb qui est lu à partir du serveur. Il s'agit donc du fichier à remplacer.

4
Vinay Vemula

vous pouvez aussi utiliser rdd

il peut dumper et restaurer un serveur redis en cours d'exécution et autoriser les clés de dumps de filtrage/correspondance/renommer

2
r043v

Je souhaite également faire la même chose: migrer une base de données d'une instance redis autonome vers une autre instance redis (redis sentinel).

Parce que les données ne sont pas critiques (données de session), je vais donner https://github.com/yaauie/redis-copy à essayer.

1
tangxinfa

Le moyen simple que j'ai trouvé pour exporter/sauvegarder des données Redis (créer un fichier de vidage) est de démarrer un serveur via une ligne de commande avec le drapeau slaveof et de créer une réplique dynamique comme suit (en supposant que la source Redis est 1.2.3.4 sur le port 6379):

/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
1
Maoz Zadok

Je viens de publier un utilitaire d'interface de ligne de commande pour npm et github qui vous permet de copier des clés correspondant à un modèle donné (même *) d'une base de données Redis à une autre.

Vous pouvez trouver l'utilitaire ici:

https://www.npmjs.com/package/redis-utils-cli

0
Gabriel McAdams

Les éléments clés d’une migration sans interruption de service sont les suivants:

En bref:

  1. configurer une cible redis (vide) en tant qu'esclave d'une source redis (avec vos données)
  2. attendre la fin de la réplication
  3. permission écrit sur une cible redis (qui est actuellement esclave)
  4. basculer vos applications vers une cible redis
  5. attendre la fin du flux de données du maître à l'esclave
  6. transformer une cible redis de maître en esclave

De plus, redis a des options qui permettent de désactiver une source pour accepter les écritures juste après avoir détaché une cible:

  • min-slaves-to-write
  • min-slaves-max-lag

Ce sujet est couvert par

Très bonne explication de la part de l'équipe RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration

Et même leur outil interactif pour migrer: https://github.com/RedisLabs/redis-migrate

0
x'ES