malli88
Goto Top

Redis Master - Slave Replication

Hallo Admins,

ich habe eine kleine Frage bezüglich der Master Slave Replication zwischen zwei Redis Instanzen.

Aktuell haben wir folgende Infrastruktur:
1 Server mit 1 Redis Instanz und einer Datenbank
1 Server mit 1 Redis Instanz und zwei Datenbanken

So soll es aussehen:
1 Server mit 3 Redis Instanzen und je einer Datenbank

Migration sollte wie folgt laufen:
1. Redis neu 1 wird Slave von Redis alt 1 mit "read only = no"
2. nach syncronisation wird dann die Anwendung auf redis neu 1 konfiguriert
3. redis alt 1 abgeschaltet
4. redis neu 1 wird nun zum master konfiguriert


Soweit so gut...
Wie zum teufel kann man bei der Slave konfiguration eine spezielle Datenbank auswählen im Fall von Server 2 mit den zwei Datenbanken in der einen Redis Instanz
Also Datenbank 1 soll nach Redis Instanz 2 repliziert werden und Datenbank 2 soll nach Redis Instanz 3 repliziert werden.

Bei Master/Slave config kann man ja nur Server & Port angeben. Aber nicht die Datenbank.

Bitte um Hilfe!!!

Vielen Dank

Content-ID: 306419

Url: https://administrator.de/contentid/306419

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Kraemer
Kraemer 07.06.2016 um 16:21:49 Uhr
Goto Top
Moin,

ich kenne Redis nicht - aber andere DB-Server. Und die werden im allgemeinen ganz oder gar nicht repliziert.

Gruß Krämer
Malli88
Malli88 07.06.2016 um 16:42:23 Uhr
Goto Top
Hallo,

und vielen Dank für die schnelle Antwort.
Ich will nicht undankbar oder gar unhöflich sein aber wenn man doch schon selber weiß das man von einem Thema keine Ahnung hat kann man sich auch genauso gut enthalten.

Redis ist eine sehr performante in memory key Value Datenbank. Und so ziemlich jedes Datenbank System welches ich kenne und auch einsetze benutzt Master slave Replikation. Um nur einige davon aufzuzählen wären da Oracle RAC, MySQL und Redis. Es mag vielleicht nicht gerade üblich sein diese als migrationstool zu missbrauchen aber dies ist bei Redis die komfortabelste Möglichkeit eine Zero downtime Migration durchzuführen. Wenn da nicht mein in der Frage beschriebenes Problem wäre.

Aber trotz allem,vielen Dank für die Bemühungen

Mit freundlichen Grüßen,
Stephan Mallmann
Kraemer
Kraemer 07.06.2016 um 17:24:42 Uhr
Goto Top
Bei Master/Slave config kann man ja nur Server & Port angeben. Aber nicht die Datenbank.
Das hast du geschrieben. Und ich bin einfach mal davon ausgegangen, das deine Auskunft stimmt. Und ich habe dir nur bestätigt, das es nicht unüblich ist, das man keine Datenbanken bei der Replikation angeben kann.

Redis ist eine sehr performante in memory key Value Datenbank
Waine interessierts. Und wenn das ein Access-Klon ist. Hauptsache geile Wörter aus dem Wiki kopiert...
Ein Hinweis darauf, das es eine NoSQL-DB ist, oder aber das die Replikation nur asynchron läuft wären dagegen interessante Informationen gewesen.

Und nun habe ich einfach mal ein wenig Doku und die einschlägigen Foren durchstöbert und siehe da:
Du wirst sehr wahrscheinlich für jede Datenbank eine einzelne Instanz laufen lassen müssen. Und schon funktioniert der ganze Spuk.

Ob das nun die einzige Lösung ist weiß ich nicht. Bei einigen Datenbanken, die ich kenne ist das so. Aber meinen Hinweis hättest du zumindest dazu nutzen können, dich mal in die Richtung zu informieren. Oder ist dir das nicht komisch vorgekommen, das du in den ganzen Hilfen und Config-Dateien keine Möglichkeit für die Angabe einer Datenbank vorhanden ist?

Gruß Krämer
Malli88
Malli88 08.06.2016 um 08:45:52 Uhr
Goto Top
Man muss sich ja nicht gleich in seiner Ehre verletzt fühlen.
Dennoch danke für die mehr oder weniger konstruktive Ausführung.

Du wirst sehr wahrscheinlich für jede Datenbank eine einzelne Instanz laufen lassen müssen. Und schon funktioniert der ganze Spuk.
Das ist das Ziel, dass Problem ist der Weg dahin.

Nochmal: Ich muss zwei Datenbanken aus einer Instanz in jeweils eine Instanz aufsplitten. Das Problem ist dabei der keine Daten verloren gehen sollen weshalb ein dumpen und neu einspielen nicht in frage kommt da sich die Datensätze ca. 30 mal p.Sek ändern und somit inkonsistent werden.

Grüße
Stephan Mallmann
atze187
atze187 08.06.2016 um 16:00:08 Uhr
Goto Top
Hi,

wenn ich das richtig lese, möchtest Du eine einzelne DB einmalig von Server A nach Server B schieben und dann nur noch auf Server B betreiben, richtig? Könntest Du dann nicht den ganzen Server migrieren und danach die DB auf Server A entfernen und die anderen auf Server B entfernen? Klingt jetzt nicht übermäßig prima, wäre meines Erachtens aber ohne Downtime machbar (wenn man mal vom Umbiegen der Client-Connections von Server A auf Server B absieht).

Gruß,
André
Malli88
Malli88 08.06.2016 um 16:13:29 Uhr
Goto Top
Hallo André,

vielen Dank! An den Ansatz hatte ich auch schon gedacht aber da ist das problem mit dem hohen traffic auf der Datenbank.
Irgendwann muss ich ja der Anwendung sagen das sie nur noch auf den neuen Server funken soll. Mit der Master Slave Konfiguration hätte ich da keine Probleme aber in dem von dir beschrieben Szenario würden mit die Token verloren gehen die zwischen Migration und Umschalten der Anwendung auf den alten Server laufen. Aber der Ansatz war schon ganz gut face-wink

Nochmal vielen Dank
atze187
atze187 08.06.2016 um 22:31:10 Uhr
Goto Top
Du könntest die Token, die nach während des "Umzugs" rein gekommen sind, per Skript aus der alten DB in die neue DB ziehen.
Malli88
Malli88 08.06.2016 um 22:59:08 Uhr
Goto Top
Wie bekomme ich den einen merge hin von den zwei Datenbanken. Zumal ich dann Werte habe die den gleichen Stellenwert in der Datenbank habe. Der Ansatz hört sich aber gut an. Danke dafür.