So konfigurieren Sie einen Redis-Cluster unter CentOS 7

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 mit früheren Releases und anderen Linux-Distributionen, wir empfehlen jedoch die Verwendung von CentOS 7.

Zu Testzwecken werden kleine Instanzen verwendet, da keine reale Arbeitslast verarbeitet werden muss. In Produktionsumgebungen sind jedoch möglicherweise größere Server erforderlich.

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 EPEL-Repository auf unserer Maschine aktivieren. Wenn Sie nicht mit EPEL vertraut sind, handelt es sich um das vom Fedora-Projekt entwickelte Repo-Paket "Extra Packages for Enterprise Linux" mit der Absicht, hochwertige Pakete von Drittanbietern für Unternehmensbenutzer von RHEL-basierten Distributionen bereitzustellen.

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Wenn "+ wget " nicht erkannt wird, versuchen Sie, " yum install wget +" vor dem obigen Befehl auszuführen.

Führen Sie nun Folgendes aus:

sudo rpm -ivh epel-release-7-5.noarch.rpm

Und jetzt tippe ein:

sudo yum -y update

Beachten Sie, dass dies eine Weile dauern kann. Jetzt können Sie Redis auf Ihrem Computer installieren, indem Sie Folgendes ausführen:

sudo yum install redis -y

Nach Abschluss des Installationsvorgangs wird der Redis-Dienst durch Eingabe des folgenden Befehls gestartet:

sudo systemctl start redis.service

Der Status kann mit dem folgenden Befehl überprüft werden:

sudo systemctl status redis.service

Welche Ausgaben ähneln:

Output

Lassen Sie uns abschließend unser Redis-Setup testen, indem Sie Folgendes ausführen:

redis-cli ping

Dies sollte ein "+ PONG +" als Antwort ausgeben. In diesem Fall wird Redis jetzt auf Ihrem Server ausgeführt, und wir können mit der Konfiguration beginnen. Ein zusätzlicher Test für unser Setup kann folgendermaßen durchgeführt werden:

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 geringfügige Unterschiede zwischen der Konfiguration des Masterservers und des Slaves.

Beginnen wir zuerst mit unserem * Meister *.

Öffne + / etc / redis.conf + mit deinem bevorzugten Texteditor:

sudo vi /etc/redis.conf

Bearbeiten Sie die folgenden Zeilen.

Legen Sie einen sinnvollen Wert für den Keepalive-Timer für TCP fest:

/etc/redis.conf

tcp-keepalive

Machen Sie den Server für jeden im Web zugänglich, indem Sie diese Zeile auskommentieren:

/etc/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.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.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.conf

appendonly
appendfilename ""

Speichern Sie Ihre Änderungen.

Starten Sie den Redis-Dienst neu, um die Konfigurationsänderungen neu zu laden:

sudo systemctl restart redis.service

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.conf + mit deinem bevorzugten Texteditor:

sudo vi /etc/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.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.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.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.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 systemctl restart redis.service

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 * Masterserver * 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 Masterserver 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-setup-and-configure- umfassen. ein-openvpn-server-auf-centos-7 [OpenVPN]. 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.

Related