So konfigurieren Sie einen Redis-Cluster unter Ubuntu 14.04

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.