I currently have a live redis server running on a cloud instance and I want to migrate this redis server to a new cloud instance and use that instance as my new redis server. If it were MySQL, I would export the DB from the old server and import it into the new server. How should I do this with redis?
P.S.: I'm not looking to set-up replication. I want to completely migrate the redis server to a new instance.
This question is related to
database
redis
data-migration
database-migration
you can also use rdd
it can dump & restore a running redis server and allow filter/match/rename dumps keys
If you have the connectivity between servers it is better to set up replication (which is trivial, unlike with SQL) with the new instance as a slave node - then you can switch the new node to master with a single command and do the move with zero downtime.
The simple way I found to export / Backup Redis data (create dump file ) is to start up a server via command line with slaveof flag and create live replica as follow (assuming the source Redis is 1.2.3.4 on port 6379):
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
First, create a dump on server 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
This ensures dump.rdb
is completely up-to-date, and shows us where it is stored (/var/lib/redis/dump.rdb
in this case). dump.rdb
is also periodically written to disk automatically.
Next, copy it to server B:
A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb
Stop the Redis server on B, copy dump.rdb (ensuring permissions are the same as before), then start.
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
The version of Redis on B must be greater or equal than that of A, or you may hit compatibility issues.
It is also possible to migrate data using the SLAVEOF command:
SLAVEOF old_instance_name old_instance_port
Check that you have receive the keys with KEYS *
. You could test the new instance by any other way too, and when you are done just turn replication of:
SLAVEOF NO ONE
redis-dump finally worked for me. Its documentation provides an example how to dump a Redis database and insert the data into another one.
To check where the dump.rdb has to be placed when importing redis data,
start client
$redis-cli
and
then
redis 127.0.0.1:6379> CONFIG GET *
1) "dir"
2) "/Users/Admin"
Here /Users/Admin is the location of dump.rdb that is read from server and therefore this is the file that has to be replaced.
Nowadays you can also use MIGRATE, available since 2.6.
I had to use this since I only wanted to move the data in one database and not all of them. The two Redis instances live on two different machines.
If you can't connect directly to Redis-2 from Redis-1, use ssh port binding:
ssh [email protected] -L 1234:127.0.0.1:6379
A small script to loop all the keys using KEYS and MIGRATE each key. This is Perl, but hopefully you get the idea:
foreach ( $redis_from->keys('*') ) {
$redis_from->migrate(
$destination{host}, # localhost in my example
$destination{port}, # 1234
$_, # The key
$destination{db},
$destination{timeout}
);
}
See http://redis.io/commands/migrate for more info.
I also want to do the same thing: migrate a db from a standalone redis instance to a another redis instances(redis sentinel).
Because the data is not critical(session data), i will give https://github.com/yaauie/redis-copy a try.
I just published a command line interface utility to npm and github that allows you to copy keys that match a given pattern (even *) from one Redis database to another.
You can find the utility here:
Key elements of a zero-downtime migration is:
CONFIG SET slave-read-only no
)In short:
Additionally redis have options which allows to disable a source redis to accept writes right after detaching a target:
min-slaves-to-write
min-slaves-max-lag
This topic covered by
Very good explanation from RedisLabs team https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration (use web.archive.org)
And even their interactive tool for migrate: https://github.com/RedisLabs/redis-migrate
Source: Stackoverflow.com