Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Verwenden von Redis Replication auf verschiedenen Computern (Multi-Master)

Sie fragen nach einer Active-Active-, auch bekannt als Multi-Master-Lösung, aber Ihre Frage deutet darauf hin, dass Sie sie möglicherweise nicht benötigen.

Wenn Sie möchten, dass nur eine der Datenbanken für Schreibvorgänge verfügbar ist, dh alle Schreibvorgänge gehen immer, können Sie dies mit der Standard-Master-Slave-Replikation von Redis erreichen. Weisen Sie Ihre Anwendung an, den Master für Schreibvorgänge zu verwenden, und lassen Sie Ihren Slave (möglicherweise) auch einige der Lesevorgänge ausführen. Wenn der Master ausfällt, machen Sie den Slave im zweiten DC zum neuen Master und leiten Sie Ihre Anwendung/Clients zur Verwendung um. Überwachung und Förderung können mit Sentinel von Redis erreicht werden.

Es gibt ein paar Dinge, die Sie berücksichtigen müssen, wenn Sie diese Art von Setup implementieren. Beachten Sie zunächst, dass die Redis-Replikation asynchron ist. Abhängig von der Auslastung Ihres Masters, dem Schreibvolumen und der Netzwerkverbindungsqualität der Replikation könnten Sie im Falle eines Failovers einige der letzten Updates verlieren. Zweitens und zum gleichen Thema könnte eine Inter-DC-Netzwerkverbindung anfällig für begrenzte Bandbreite und erhöhte Latenz sein – Sie sollten Redis so konfigurieren, dass dies gehandhabt wird, und möglicherweise Komprimierung für diesen Datenverkehr verwenden (z. B. über einen SSH-Tunnel). Schließlich sollten Sie zur genauen Erkennung von Fehlern mindestens 3 Sentinels an verschiedenen Orten haben. Aber trotz dieser Herausforderungen ist das alles machbar.

Allerdings ist ein Multi-Master-Setup, in dem Schreibvorgänge willkürlich gegen jede Datenbank ausgeführt werden können, nicht derzeit von Redis unterstützt. Wenn Sie dies tatsächlich benötigen, sollten Sie eine andere Lösung in Betracht ziehen.

Hinweis:Abhängig von Ihren genauen Anforderungen können Sie zwei Datenbanken mit einem Master verwenden, wenn Sie garantieren können, dass Schreibvorgänge in verschiedene DCs sich gegenseitig ausschließen (d. h. jeder DC erhält Schreibvorgänge nur in eine bestimmte Teilmenge von Schlüsseln, die nicht vom anderen DC geteilt werden). in jedem DC und der Sklave im anderen.