it-swarm.com.de

Wie verschiebe ich eine Redis-Datenbank von einem Server auf einen anderen?

Ich habe derzeit einen Live-Redis-Server, der auf einer Cloud-Instanz ausgeführt wird, und möchte diesen Redis-Server auf eine neue Cloud-Instanz migrieren und diese Instanz als neuen Redis-Server verwenden. Wenn es MySQL wäre, würde ich die Datenbank vom alten Server exportieren und auf den neuen Server importieren. Wie soll ich das mit redis machen?

P .: Ich möchte die Replikation nicht einrichten. Ich möchte den Redis-Server vollständig auf eine neue Instanz migrieren.

170
ErJab

Speichern Sie einen Snapshot der Datenbank in einer dump.rdb, indem Sie entweder BGSAVE oder SAVE über die Befehlszeile ausführen. Dadurch wird eine Datei mit dem Namen dump.rdb im selben Ordner wie Ihr Redis-Server erstellt. Eine Liste aller Server anzeigen Befehle .

Kopieren Sie diese dump.rdb auf den anderen Redis-Server, auf den Sie migrieren möchten. Beim Start von redis wird nach dieser Datei gesucht, aus der die Datenbank initialisiert werden soll.

104
Anurag

Erstellen Sie zunächst einen Speicherauszug auf 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

Dies stellt sicher dump.rdb ist auf dem neuesten Stand und zeigt uns, wo es gespeichert ist (/var/lib/redis/dump.rdb in diesem Fall). dump.rdb wird auch regelmäßig automatisch auf die Festplatte geschrieben.

Kopieren Sie es anschließend auf Server B:

A$ scp /var/lib/redis/dump.rdb [email protected]:/tmp/dump.rdb

Stoppen Sie den Redis-Server auf B, kopieren Sie dump.rdb (stellen Sie sicher, dass die Berechtigungen dieselben sind wie zuvor) und starten Sie dann.

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

Die Version von Redis on B muss größer oder gleich der von A sein, sonst können Sie Kompatibilitätsprobleme drücken.

223
Wilfred Hughes

Wenn Sie die Konnektivität zwischen Servern haben, ist es besser, die Replikation (die im Gegensatz zu SQL trivial ist) mit der neuen Instanz als Slave-Knoten einzurichten. Dann können Sie den neuen Knoten mit einem einzigen Befehl auf Master umstellen und mit verschieben Keine Ausfallzeiten.

33
Tom Clarkson

ob Sie es glauben oder nicht, ich habe gerade einen Artikel dafür gemacht:

http://redis4you.com/articles.php?id=005&name=Seamless+migration+von+einem+Redis+server+zu+anderen

Aber woher weiß ich, wann die Datenübertragung zwischen Master und Slave abgeschlossen ist? Sie können den Befehl INFO verwenden.

17
nick

Heutzutage können Sie auch MIGRATE verwenden, das seit 2.6 verfügbar ist.

Ich musste dies verwenden, da ich nur die Daten in eine Datenbank verschieben wollte und nicht alle. Die beiden Redis-Instanzen befinden sich auf zwei verschiedenen Computern.

Wenn Sie von Redis-1 aus keine direkte Verbindung zu Redis-2 herstellen können, verwenden Sie die ssh-Portbindung:

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

Ein kleines Skript zum Durchlaufen aller Schlüssel mit KEYS und MIGRATE für jeden Schlüssel. Dies ist Perl, aber Sie haben hoffentlich die Idee:

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

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

Weitere Informationen finden Sie unter http://redis.io/commands/migrate .

14
Øyvind Skaar

Es ist auch möglich, Daten mit dem Befehl SLAVEOF zu migrieren:

SLAVEOF old_instance_name old_instance_port

Überprüfen Sie mit KEYS *, Ob Sie die Schlüssel erhalten haben. Sie können die neue Instanz auch auf andere Weise testen. Wenn Sie fertig sind, schalten Sie einfach die Replikation von:

SLAVEOF NO ONE
13
estani

Um zu überprüfen, wo die dump.rdb beim Importieren von Redis-Daten platziert werden muss,

client starten

$redis-cli

und

dann

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

Hier ist/Users/Admin der Speicherort von dump.rdb, der vom Server gelesen wird, und daher ist dies die Datei, die ersetzt werden muss.

4
Vinay Vemula

sie können auch rdd verwenden

es kann einen laufenden Redis-Server sichern und wiederherstellen und Filter/Match/Rename-Dumps-Schlüssel zulassen

2
r043v

Ich möchte auch dasselbe tun: eine Datenbank von einer eigenständigen Redis-Instanz auf eine andere Redis-Instanz (Redis Sentinel) migrieren.

Da die Daten nicht kritisch sind (Sitzungsdaten), gebe ich https://github.com/yaauie/redis-copy einen Versuch.

1
tangxinfa

Die einfache Möglichkeit, Redis-Daten zu exportieren/zu sichern (Dump-Datei erstellen), besteht darin, einen Server über die Befehlszeile mit dem Slaveof-Flag zu starten und ein Live-Replikat wie folgt zu erstellen (vorausgesetzt, die Quelle von Redis ist 1.2.3.4 auf Port 6379):

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

Ich habe gerade ein Befehlszeilen-Dienstprogramm für npm und github veröffentlicht, mit dem Sie Schlüssel, die einem bestimmten Muster (gerade *) entsprechen, von einer Redis-Datenbank in eine andere kopieren können.

Das Dienstprogramm finden Sie hier:

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

0
Gabriel McAdams

Wichtige Elemente einer Migration ohne Ausfallzeiten sind:

  • replikation ( http://redis.io/commands/SLAVEOF )
  • möglichkeit, während des Umschaltens der Anwendung in einen Slave zu schreiben (CONFIG SET slave-read-only no)

Zusamenfassend:

  1. einrichten eines Ziel-Redis (leer) als Slave eines Quell-Redis (mit Ihren Daten)
  2. warten Sie, bis die Replikation abgeschlossen ist
  3. erlaubnis zum Schreiben an ein Ziel redis (welches momentan Slave ist)
  4. schalte deine apps auf ein ziel um redis
  5. warten Sie, bis der Datenstrom von Master zu Slave beendet ist
  6. drehe ein Ziel erneut von Master zu Slave

Darüber hinaus verfügt redis über Optionen, mit denen eine Quelle deaktiviert werden kann, um Schreibvorgänge direkt nach dem Trennen eines Ziels zu akzeptieren:

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

Dieses Thema behandelt von

Sehr gute Erklärung vom RedisLabs-Team https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration

Und sogar ihr interaktives Tool für die Migration: https://github.com/RedisLabs/redis-migrate

0
x'ES