234 votes

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

J'ai actuellement un serveur redis en direct fonctionnant sur une instance de cloud computing et je veux migrer ce serveur redis vers une nouvelle instance de cloud computing 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 procéder avec redis ?

P.S. : Je ne cherche pas à mettre en place une réplication. Je veux migrer complètement le serveur redis vers une nouvelle instance.

7 votes

Des années plus tard... Après avoir fait face à plusieurs problèmes liés à Redis, je suggère d'opter pour L'approche de Tom Clarkson de mettre en place une instance esclave, de la laisser se synchroniser avec le maître, puis de promouvoir l'esclave en maître. Cela entraînera un temps d'arrêt beaucoup plus court que la réponse que j'ai acceptée, surtout si vous avez affaire à plusieurs Go de données redis. Si vous pouvez ajouter une sentinelle redis dans ce mélange, vous pouvez faire une migration avec un temps d'arrêt presque nul.

0 votes

Je dispose d'un serveur Redis distant et je souhaite copier ses données sur mon serveur Redis local... L'utilisation de dump.rdb pourrait s'avérer délicate car je devrais déplacer ces données sur le réseau...

332voto

Wilfred Hughes Points 3507

D'abord, créez un dump 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 indique où il est stocké ( /var/lib/redis/dump.rdb dans ce cas). dump.rdb est également écrit périodiquement et automatiquement sur le disque.

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 permissions sont les mêmes que précédemment), 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 risquez de vous heurter à l'erreur suivante problèmes de compatibilité .

42 votes

Bien meilleur que la réponse acceptée, avec tous les détails.

1 votes

Cela m'a fait gagner beaucoup de temps en montrant que l'importation dans redis se fait en déposant le dump dans le dossier redis.

7 votes

Sur un mac, la sauvegarde de redis est stockée dans /usr/local/var/db/redis/

114voto

Anurag Points 66470

Sauvegarder un instantané de la base de données dans un dump.rdb en exécutant soit 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 dump.rdb sur l'autre serveur redis vers lequel vous voulez migrer. Lorsque redis démarre, il recherche ce fichier pour initialiser la base de données.

19 votes

Ce qui me laisse supposer plusieurs choses : Où la commande SAVE place-t-elle son dump ? Où Redis cherche-t-il un fichier "dump.rdb" à charger au démarrage ? Dans ma configuration Redis, le nom de fichier est /var/db/redis/redis_state.rdb ... est-ce le nom de fichier que j'utilise à la place de "dump.rdb" ?

0 votes

La commande SAVE place son dump dans le même fichier. Vous devriez le sauvegarder :-)

23 votes

Sachez également que vous ne pouvez pas effectuer cet échange lorsque votre serveur est en cours d'exécution, car le fait d'appeler SHUTDOWN sur le serveur en cours d'exécution enregistrera le contenu de sa mémoire dans son fichier dump, écrasant ainsi la copie que vous venez d'y placer. Arrêtez d'abord le serveur. Puis écrasez le fichier de vidage. Puis redémarrez le serveur.

37voto

Tom Clarkson Points 12369

Si vous disposez de la connectivité entre les serveurs, il est préférable de mettre en place la réplication (qui est triviale, contrairement à SQL) avec la nouvelle instance en tant que nœud esclave - vous pouvez alors faire passer le nouveau nœud en maître avec une seule commande et effectuer le déménagement sans temps d'arrêt.

1 votes

J'ai la connectivité. Je peux donc utiliser la configuration slaveof dans le nouveau serveur et la définir sur l'adresse IP de l'ancien serveur. Mais comment puis-je savoir quand le transfert de données est terminé entre le maître et l'esclave ? Et après cela, comment puis-je promouvoir l'esclave en maître ?

0 votes

Je pense que la commande INFO vous dira quand il sera prêt. Cependant, cela n'a pas trop d'importance - puisqu'il s'agit d'une réplication plutôt que d'une copie unique, vous pouvez laisser les deux nœuds en place aussi longtemps que vous le souhaitez avant d'éteindre l'ancien nœud. SLAVEOF NONE est la commande pour promouvoir le nouveau nœud en maître.

14 votes

Cela semble être une bonne solution - ce serait bien d'avoir quelques exemples de commandes !

17voto

nick Points 131

Croyez-le ou non, je viens de créer un article pour ça :

http://redis4you.com/articles.php?id=005&name=Seamless+migration+de+un+serveur+Redis+vers+un+autre

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

14voto

Øyvind Skaar Points 1291

Aujourd'hui, vous pouvez également utiliser MIGRATE, disponible depuis la version 2.6.

J'ai dû utiliser cette méthode car je ne voulais déplacer les données que dans une seule base de données et non dans toutes. Les deux instances Redis se trouvent sur deux machines différentes.

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

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

Un petit script pour boucler toutes les clés en utilisant KEYS et MIGRER chaque clé. C'est du Perl, mais j'espère que vous comprenez 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.

0 votes

Quel est le redis distant vers lequel vous voulez migrer a PASSWORD ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X