J'ai actuellement un serveur Redis en direct sur une instance cloud et je souhaite migrer ce serveur Redis vers une nouvelle instance cloud et utiliser cette instance comme 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?
PS: Je ne cherche pas à configurer la réplication. Je souhaite migrer complètement le serveur redis vers une nouvelle instance.
Réponses:
Enregistrez un instantané de la base de données dans un fichier dump.rdb en exécutant
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 toutes les commandes du serveur .Copiez ce fichier dump.rdb sur l'autre serveur Redis vers lequel vous souhaitez migrer. Lorsque redis démarre, il recherche ce fichier à partir duquel initialiser la base de données.
la source
appendonly = yes
), définissez-la surno
avant de démarrer le serveur Redis, sinon il ne chargera pas le nouvel ensemble de données. Une fois le jeu de données chargé en mémoire, réactivez-le, à la fois dans la mémoire (config set appendonly yes
) et dans le fichier de configuration./etc/redis/redis.conf
, et vous pouvez y effectuer des recherches pour trouver où vos.rdb
fichiers sont:cat /etc/redis/redis.conf | grep "rdb"
. Dans mon cas c'est/var/lib/redis
redis-cli config get dir
vous donnerait le répertoire dans lequel.rdb
est stocké.Commencez par créer un vidage sur le serveur A.
Cela garantit qu'il
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 périodiquement écrit automatiquement sur le disque.Ensuite, copiez-le sur le serveur B:
Arrêtez le serveur Redis sur B, copiez dump.rdb (en vous assurant que les autorisations sont les mêmes qu'auparavant), puis démarrez.
La version de Redis sur B doit être supérieure ou égale à celle de A, ou vous pouvez rencontrer des problèmes de compatibilité .
la source
CONFIG GET dir
, qui est retournée"/usr/local/var/db/redis"
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 passer le nouveau nœud en maître avec une seule commande et faire le déplacement avec aucun temps d'arrêt.
la source
Il est également possible de migrer des données à l'aide de la commande SLAVEOF:
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é, activez simplement la réplication de:la source
De nos jours, vous pouvez également utiliser MIGRATE, disponible depuis 2.6.
J'ai dû l'utiliser car je ne voulais déplacer les données que dans une seule base de données et pas toutes. Les deux instances Redis vivent sur deux machines différentes.
Si vous ne pouvez pas vous connecter directement à Redis-2 depuis Redis-1, utilisez la liaison de port ssh:
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:
Voir http://redis.io/commands/migrate pour plus d'informations.
la source
Pour vérifier où le dump.rdb doit être placé lors de l'importation de données redis,
démarrer le client
et
puis
Ici / Users / Admin est l'emplacement de dump.rdb qui est lu à partir du serveur et c'est donc le fichier qui doit être remplacé.
la source
vous pouvez également utiliser rdd
il peut vider et restaurer un serveur Redis en cours d'exécution et autoriser les clés de vidage de filtre / correspondance / renommer
la source
Les éléments clés d'une migration sans temps d'arrêt sont:
CONFIG SET slave-read-only no
)En bref:
De plus, les redis ont des options qui permettent de désactiver un redis source pour accepter les écritures juste après le détachement d'une cible:
min-slaves-to-write
min-slaves-max-lag
Ce sujet couvert par
Très bonne explication 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
la source
Je veux aussi 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 essayer https://github.com/yaauie/redis-copy .
la source
Le moyen simple que j'ai trouvé pour exporter / sauvegarder les données Redis (créer un fichier de vidage) est de démarrer un serveur via la ligne de commande avec le drapeau slaveof et de créer une réplique en direct comme suit (en supposant que la source Redis est 1.2.3.4 sur le port 6379):
la source
Je viens de publier un utilitaire d'interface de ligne de commande sur npm et github qui vous permet de copier des clés qui correspondent à 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
la source
redis-dump a finalement fonctionné pour moi. Sa documentation fournit un exemple comment vider une base de données Redis et insérer les données dans une autre.
la source