Ich habe derzeit einen Live-Redis-Server auf einer Cloud-Instanz und möchte diesen Redis-Server auf eine neue Cloud-Instanz migrieren und diese Instanz als meinen 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?
PS: Ich möchte die Replikation nicht einrichten. Ich möchte den Redis-Server vollständig auf eine neue Instanz migrieren.
Antworten:
Speichern Sie einen Snapshot der Datenbank in einer dump.rdb, indem Sie entweder ausführen
BGSAVE
oderSAVE
über die Befehlszeile . Dadurch wird eine Datei mit dem Namen dump.rdb im selben Ordner wie Ihr Redis-Server erstellt. Eine Liste aller Serverbefehle anzeigen .Kopieren Sie diese dump.rdb auf den anderen Redis-Server, auf den Sie migrieren möchten. Wenn redis gestartet wird, sucht es nach dieser Datei, von der aus die Datenbank initialisiert werden kann.
quelle
appendonly = yes
) verwenden, setzen Sie sie auf,no
bevor Sie den Redis-Server starten. Andernfalls wird der neue Datensatz nicht geladen. Sobald der Datensatz in den Speicher geladen wurde, schalten Sie ihn sowohl im Speicher (config set appendonly yes
) als auch in der Konfigurationsdatei wieder ein./etc/redis/redis.conf
, und Sie können sie durchsuchen, um herauszufinden, wo sich Ihre.rdb
Dateien befinden :cat /etc/redis/redis.conf | grep "rdb"
. In meinem Fall ist es/var/lib/redis
redis-cli config get dir
würde Ihnen das Verzeichnis geben, in dem.rdb
gespeichert ist.Erstellen Sie zunächst einen Speicherauszug auf Server A.
Dies stellt sicher, dass
dump.rdb
es vollständig auf dem neuesten Stand ist 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:
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.
Die Version von Redis auf B muss größer oder gleich der von A sein, da sonst Kompatibilitätsprobleme auftreten können .
quelle
CONFIG GET dir
"/usr/local/var/db/redis"
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 den Umzug mit ausführen Keine Ausfallzeit.
quelle
Ob Sie es glauben oder nicht, ich habe gerade einen Artikel dafür gemacht:
http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another
quelle
Warning: Redis::connect(): connect() failed: Connection refused in /www/sites/redis4you.com/include/config.php on line 16 Server error, try again later
Es ist auch möglich, Daten mit dem Befehl SLAVEOF zu migrieren:
Überprüfen Sie, ob Sie die Schlüssel mit erhalten haben
KEYS *
. Sie können die neue Instanz auch auf andere Weise testen. Wenn Sie fertig sind, aktivieren Sie einfach die Replikation von:quelle
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:
Ein kleines Skript zum Schleifen aller Schlüssel mit KEYS und MIGRATE für jeden Schlüssel. Das ist Perl, aber hoffentlich kommt Ihnen die Idee:
Weitere Informationen finden Sie unter http://redis.io/commands/migrate .
quelle
Um zu überprüfen, wo die Datei dump.rdb beim Importieren von Redis-Daten abgelegt werden muss,
Client starten
und
dann
Hier ist / Users / Admin der Speicherort von dump.rdb, der vom Server gelesen wird, und daher ist dies die Datei, die ersetzt werden muss.
quelle
Sie können auch rdd verwenden
Es kann einen laufenden Redis-Server sichern und wiederherstellen und Dump-Schlüssel zum Filtern / Abgleichen / Umbenennen zulassen
quelle
Ich möchte auch das Gleiche tun: Migrieren Sie eine Datenbank von einer eigenständigen Redis-Instanz zu einer anderen Redis-Instanz (Redis Sentinel).
Da die Daten nicht kritisch sind (Sitzungsdaten), werde ich https://github.com/yaauie/redis-copy ausprobieren.
quelle
Schlüsselelemente einer Migration ohne Ausfallzeiten sind:
CONFIG SET slave-read-only no
)Zusamenfassend:
Zusätzlich haben Redis Optionen, mit denen ein Quell-Redis deaktiviert werden kann, um Schreibvorgänge direkt nach dem Trennen eines Ziels zu akzeptieren:
min-slaves-to-write
min-slaves-max-lag
Dieses Thema wird von behandelt
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
quelle
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 Redis ist 1.2.3.4 auf Port 6379):
quelle
Ich habe gerade ein Befehlszeilenschnittstellen-Dienstprogramm für npm und github veröffentlicht, mit dem Sie Schlüssel, die einem bestimmten Muster (sogar *) entsprechen, von einer Redis-Datenbank in eine andere kopieren können.
Das Dienstprogramm finden Sie hier:
https://www.npmjs.com/package/redis-utils-cli
quelle
redis-dump hat endlich bei mir funktioniert. Die Dokumentation enthält ein Beispiel für das Speichern einer Redis-Datenbank und das Einfügen der Daten in eine andere.
quelle