Einführung
Redis ist ein Open-Source-Schlüsselwertdatenspeicher, der ein In-Memory-Speichermodell mit optionalen Festplattenschreibvorgängen für die Persistenz verwendet. Es bietet unter anderem Funktionen für Transaktionen, Pub / Sub und automatisches Failover. Es wird empfohlen, Redis mit Linux für Produktionsumgebungen zu verwenden. Die Entwickler erwähnen jedoch auch OS X als Plattform, auf der sie entwickeln und testen. Redis hat Kunden, die in den meisten Sprachen geschrieben sind, wobei die empfohlenen auf their website zu finden sind.
In Produktionsumgebungen wird das Replizieren Ihrer Daten auf mindestens zwei Knoten als bewährte Methode angesehen. Die Redundanz ermöglicht die Wiederherstellung bei einem Ausfall der Umgebung, was besonders wichtig ist, wenn die Benutzerbasis Ihrer Anwendung wächst.
Am Ende dieses Handbuchs werden wir zwei Redis Droplets auf DigitalOcean wie folgt einrichten:
-
ein Droplet für den Redis Master Server
-
ein Droplet für den Redis Slave Server
Wir werden auch zeigen, wie Sie zum Slave-Server wechseln und ihn als temporären Master einrichten.
Sie können auch mehrere Slave-Server einrichten.
Dieser Artikel konzentriert sich auf das Einrichten eines Master-Slave-Redis-Clusters. Weitere Informationen zu Redis im Allgemeinen und seiner grundlegenden Verwendung als Datenbank finden Sie unter this usage tutorial.
Voraussetzungen
Dies funktioniert möglicherweise auf früheren Releases und anderen Linux-Distributionen, wir empfehlen jedoch Ubuntu 14.04.
Zu Testzwecken werden kleine Instanzen verwendet, da keine reale Arbeitslast verarbeitet werden muss. In Produktionsumgebungen sind jedoch möglicherweise größere Server erforderlich.
-
Ubuntu 14.04 LTS
-
Zwei Tröpfchen von beliebiger Größe; ein * Master * und ein oder mehrere * Slave (s) *
-
Zugriff auf Ihre Computer über SSH mit einem Benutzer ohne Rootberechtigung (siehe Initial Server Setup with Ubuntu 14.04)
Schritt 1 - Installieren Sie Redis
Beginnend mit dem Droplet, das unseren * Master-Server * hostet, besteht unser erster Schritt darin, Redis zu installieren. Zuerst müssen wir das Redis-Repository von Chris Lea hinzufügen (beim Hinzufügen von Repositorys von Drittanbietern ist wie immer äußerste Vorsicht geboten; wir verwenden dieses Repository, da der Maintainer eine seriöse Figur ist):
sudo add-apt-repository ppa:chris-lea/redis-server
Drücken Sie + ENTER +
, um das Repository zu akzeptieren.
Führen Sie den folgenden Befehl aus, um unsere Pakete zu aktualisieren:
sudo apt-get update
Installieren Sie den Redis-Server:
sudo apt-get install redis-server
Überprüfen Sie, ob Redis läuft:
redis-benchmark -q -n 1000 -c 10 -P 5
Der obige Befehl besagt, dass "+ redis-benchmark " im stillen Modus mit 1000 Gesamtanforderungen, 10 parallelen Verbindungen und Pipeline 5-Anforderungen ausgeführt werden soll. Um weitere Informationen zum Ausführen von Benchmarks für Redis zu erhalten, geben Sie " redis-benchmark --help +" in Ihr Terminal ein, um nützliche Informationen mit Beispielen auszudrucken.
Lass den Benchmark laufen. Nach Abschluss sollte eine Ausgabe ähnlich der folgenden angezeigt werden:
Output
Wiederholen Sie nun diesen Abschnitt für den Redis * Slave Server *. Wenn Sie mehr Droplets konfigurieren, können Sie so viele Slave-Server wie nötig einrichten.
Zu diesem Zeitpunkt ist Redis auf unseren beiden Knoten installiert und läuft. Wenn die Ausgabe eines Knotens nicht der oben gezeigten entspricht, wiederholen Sie den Installationsvorgang sorgfältig und überprüfen Sie, ob alle Voraussetzungen erfüllt sind
Schritt 2 - Konfigurieren Sie Redis Master
Nachdem Redis auf unserem Two-Droplet-Cluster ausgeführt wird, müssen die Konfigurationsdateien bearbeitet werden. Wie wir sehen werden, gibt es kleine Unterschiede zwischen der Konfiguration des Masterservers und des Slaves.
Beginnen wir zuerst mit unserem * Meister *.
Öffne + / etc / redis / redis.conf +
mit deinem bevorzugten Texteditor:
sudo nano /etc/redis/redis.conf
Bearbeiten Sie die folgenden Zeilen.
Legen Sie einen sinnvollen Wert für den Keepalive-Timer für TCP fest:
/etc/redis/redis.conf
tcp-keepalive
Machen Sie den Server für jeden im Web zugänglich, indem Sie diese Zeile auskommentieren:
/etc/redis/redis.conf
bind 127.0.0.1
Angesichts der Natur von Redis und seiner sehr hohen Geschwindigkeit kann ein Angreifer das Passwort ohne viele Probleme erzwingen. Aus diesem Grund empfehlen wir, das Kommentarzeichen in der Zeile "+ requirepass +" zu entfernen und ein komplexes Passwort (oder vorzugsweise eine komplexe Passphrase) hinzuzufügen:
/etc/redis/redis.conf
requirepass
Abhängig von Ihrem Nutzungsszenario können Sie die folgende Zeile ändern oder nicht. In diesem Lernprogramm wird davon ausgegangen, dass kein Schlüssel gelöscht werden darf. Kommentieren Sie diese Zeile aus und stellen Sie sie wie folgt ein:
/etc/redis/redis.conf
maxmemory-policy
Abschließend möchten wir die folgenden Änderungen vornehmen, die zum Sichern von Daten erforderlich sind. Kommentar entfernen und / oder diese Zeilen wie folgt setzen:
/etc/redis/redis.conf
appendonly
appendfilename
Speichern Sie Ihre Änderungen.
Starten Sie den Redis-Dienst neu, um die Konfigurationsänderungen neu zu laden:
sudo service redis-server restart
Wenn Sie einen Schritt weiter gehen möchten, können Sie der Masterdatenbank eindeutigen Inhalt hinzufügen, indem Sie den Abschnitten * Redis Operations * unter https://www.digitalocean.com/community/tutorials/how-to-install-and- folgen. use-redis [dieses Tutorial], damit wir später sehen können, wie es auf den Slave-Server repliziert wird.
Nachdem wir den Master-Server bereit haben, fahren wir mit unserer Slave-Maschine fort.
Schritt 3 - Redis Slave konfigurieren
Wir müssen einige Änderungen vornehmen, damit unser * Slave-Server * eine Verbindung zu unserer Master-Instanz herstellen kann:
Öffne + / etc / redis / redis.conf +
mit deinem bevorzugten Texteditor:
sudo nano /etc/redis/redis.conf
Bearbeiten Sie die folgenden Zeilen. Einige Einstellungen ähneln denen des Masters.
Machen Sie den Server für jeden im Web zugänglich, indem Sie diese Zeile auskommentieren:
/etc/redis/redis.conf
bind 127.0.0.1
Der Slave-Server benötigt ebenfalls ein Passwort, damit wir ihm Befehle geben können (wie z. B. "+ INFO +"). Kommentieren Sie diese Zeile aus und legen Sie ein Server-Passwort fest:
/etc/redis/redis.conf
requirepass
Kommentieren Sie diese Zeile aus und geben Sie die IP-Adresse an, unter der der * Master-Server * erreichbar ist, gefolgt von dem auf diesem Computer festgelegten Port. Standardmäßig lautet der Port 6379:
/etc/redis/redis.conf
slaveof
Kommentieren Sie die Zeile "+ masterauth +" aus und geben Sie das Passwort / die Passphrase ein, die Sie zuvor auf dem * Master-Server * eingerichtet haben:
/etc/redis/redis.conf
masterauth
Speichern Sie nun diese Änderungen und beenden Sie die Datei. Starten Sie als nächstes den Dienst neu, wie wir es auf unserem Master-Server getan haben:
sudo service redis-server restart
Dadurch wird Redis neu initialisiert und unsere geänderten Dateien geladen.
Mit Redis verbinden:
redis-cli -h 127.0.0.1 -p
Autorisieren Sie mit dem Passwort * des Slave-Servers *:
AUTH
Zu diesem Zeitpunkt wird ein funktionsfähiger Master-Slave-Redis-Cluster ausgeführt, bei dem beide Computer ordnungsgemäß konfiguriert sind.
Schritt 4 - Überprüfen Sie die Master-Slave-Replikation
Wenn Sie unser Setup testen, können Sie das Verhalten unserer Redis Droplets besser verstehen, sobald Sie mit dem Skript-Failover-Verhalten beginnen möchten. Wir möchten jetzt sicherstellen, dass unsere Konfiguration korrekt funktioniert und unser Master mit den Slave-Redis-Instanzen spricht.
Zuerst verbinden wir uns über unser Terminal auf dem * Master-Server * mit Redis:
Stellen Sie zunächst eine Verbindung zur lokalen Instanz her, die standardmäßig auf Port 6379 ausgeführt wird. Falls Sie den Port geändert haben, ändern Sie den Befehl entsprechend.
redis-cli -h 127.0.0.1 -p
Authentifizieren Sie sich jetzt bei Redis mit dem Passwort, das Sie bei der Konfiguration des Masters festgelegt haben:
AUTH
Und Sie sollten ein "+ OK +" als Antwort erhalten. Jetzt musst du nur noch laufen:
INFO
Sie sehen alles, was Sie über den Master-Redis-Server wissen müssen. Wir interessieren uns besonders für den Abschnitt "+ # Replication +", der wie folgt aussehen sollte:
Output. . .
# Replication
role:master
connected_slaves:1
slave0:ip=,port=,state=online,offset=407,lag=1
master_repl_offset:407
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:406
. . .
Beachten Sie die Zeile "+ connected_slaves: 1 +", die angibt, dass unsere andere Instanz mit dem Master-Droplet spricht. Sie können auch sehen, dass wir die Slave-IP-Adresse zusammen mit Port, Status und anderen Informationen erhalten.
Schauen wir uns nun den Abschnitt "+ # Replication " auf unserer Slave-Maschine an. Der Vorgang ist der gleiche wie für unseren Master-Server. Melden Sie sich bei der Redis-Instanz an, geben Sie den Befehl " INFO +" ein und zeigen Sie die Ausgabe an:
Output. . .
# Replication
role:slave
master_host:
master_port:
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1401
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
Wir können sehen, dass diese Maschine die Rolle eines Slaves hat, mit dem Master-Redis-Server kommuniziert und keine eigenen Slaves hat.
Schritt 5 - Wechseln Sie zum Slave
Wenn wir diese Architektur aufbauen, möchten wir auch, dass Ausfälle so behandelt werden, dass die Datenintegrität und die Ausfallzeiten unserer Anwendung so gering wie möglich bleiben. Jeder Sklave kann zum Master befördert werden. Lassen Sie uns zunächst das manuelle Umschalten testen.
Auf einer * Slave-Maschine * sollten wir uns mit der Redis-Instanz verbinden:
redis-cli -h 127.0.0.1 -p
Authentifizieren Sie sich jetzt bei Redis mit dem Passwort, das Sie bei der Konfiguration des Slaves festgelegt haben
AUTH
Slave-Verhalten deaktivieren:
SLAVEOF NO ONE
Die Antwort sollte "+ OK +" sein. Geben Sie nun Folgendes ein:
INFO
Suchen Sie nach dem Abschnitt "+ # Replication +", um die folgende Ausgabe zu finden:
Output. . .
# Replication
role:master
connected_slaves:0
master_repl_offset:1737
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
Wie erwartet hat sich der Slave in einen Master verwandelt und ist nun bereit, Verbindungen von anderen Computern (falls vorhanden) anzunehmen. Wir können es als temporäres Backup verwenden, während wir unseren Haupt-Master-Server debuggen.
Dies kann einfach per Skript ausgeführt werden, wobei die folgenden Schritte ausgeführt werden müssen, sobald ein Fehler erkannt wird:
-
Senden Sie von der Anwendung aus alle Anforderungen für Redis an einen Slave-Computer
-
Führen Sie auf diesem Slave den Befehl
+ SLAVEOF NO ONE +
aus. Ab Redis Version 1.0.0 weist dieser Befehl den Slave an, die Datenreplikation zu beenden und als Masterserver zu fungieren -
Bei allen verbleibenden Slaves (falls vorhanden) werden sie durch Ausführen von "+ SLAVEOF +" angewiesen, die Replikation vom alten Master zu beenden, die jetzt veralteten Daten vollständig zu verwerfen und die Replikation vom neuen Master zu starten. Stellen Sie sicher, dass Sie "" und "" durch die korrekten Werte Ihres neu beförderten Masters ersetzen
-
Nachdem Sie das Problem analysiert haben, können Sie zurückkehren, um Ihren ursprünglichen Server als Master zu verwenden, wenn dies für Ihr spezielles Setup erforderlich ist
Schritt 6 - Stellen Sie die Verbindung zum Master wieder her
Stellen Sie erneut eine Verbindung zum ursprünglichen Master-Server her. Melden Sie sich auf dem * Slave-Server * bei Redis an und führen Sie Folgendes aus:
SLAVEOF
Wenn Sie den Befehl "+ INFO +" erneut ausführen, sollten Sie feststellen, dass wir zum ursprünglichen Setup zurückgekehrt sind.
Fazit
Wir haben eine Umgebung eingerichtet, die aus zwei Servern besteht, von denen einer als Redis-Master und der andere als Slave fungiert. Auf diese Weise können wir, falls der Master-Server jemals offline geht oder unsere Daten verliert, zur Wiederherstellung auf einen unserer Slaves wechseln, bis das Problem behoben ist.
Die nächsten Schritte können das Erstellen eines Skripts für das automatische Failover oder die Gewährleistung einer sicheren Kommunikation zwischen all Ihren Droplets mithilfe von VPN-Lösungen wie https://www.digitalocean.com/community/tutorials/how-to-set-up-an- umfassen. openvpn-server-on-ubuntu-14-04 [OpenVPN] oder https://www.digitalocean.com/community/tutorials/installationsanleitung-tinc-and-set-up-a-basic-vpn-on -ubuntu-14-04 [Tinc]. Außerdem sind Testverfahren und Skripte für die Validierung Ihrer Konfigurationen von entscheidender Bedeutung.
Darüber hinaus sollten Sie Vorsichtsmaßnahmen treffen, wenn Sie diese Art der Einrichtung in Produktionsumgebungen bereitstellen. Die Seite Redis Documentation sollte gelesen werden, und Sie müssen genau wissen, welches Sicherheitsmodell für Ihre Anwendung geeignet ist. Wir verwenden Redis oft als Sitzungsspeicher und die darin enthaltenen Informationen können für einen Angreifer wertvoll sein. Es ist üblich, diese Computer nur über ein privates Netzwerk zugänglich zu machen und sie hinter mehreren Sicherheitsebenen zu platzieren.
Dies ist ein einfacher Ausgangspunkt für die Erstellung Ihres Datenspeichers. Auf keinen Fall eine ausführliche Anleitung zum Einrichten von Redis für die Verwendung der Master-Slave-Architektur. Wenn Sie der Meinung sind, dass dieser Leitfaden etwas abdecken sollte, hinterlassen Sie bitte unten stehende Kommentare. Weitere Informationen und Hilfe zu diesem Thema finden Sie unter DigitalOcean Q & A.