Heim  >  Artikel  >  Datenbank  >  So gruppieren Sie Redis

So gruppieren Sie Redis

(*-*)浩
(*-*)浩Original
2019-06-12 17:06:533888Durchsuche

Redis Sharding Cluster

Redis Sharding ist eine clientseitige Sharding-Sharding-Technologie.

So gruppieren Sie Redis

Redis Sharding kann als eine Multi-Redis-Instanz-Cluster-Methode bezeichnet werden, die vor der Veröffentlichung von Redis Cluster in der Branche häufig verwendet wurde. Die Hauptidee besteht darin, einen Hash-Algorithmus zu verwenden, um den Schlüssel von Redis-Daten zu hashen. Durch die Hash-Funktion wird ein bestimmter Schlüssel einem bestimmten Redis-Knoten zugeordnet. (Empfohlenes Lernen: Redis-Video-Tutorial)

Auf diese Weise weiß der Client, auf welchem ​​Redis-Knoten Daten verarbeitet werden sollen Clientseite Abgeschlossen.

Der Java-Redis-Client Jedis unterstützt bereits die Redis-Sharding-Funktion, nämlich ShardedJedis und ShardedJedisPool in Kombination mit dem Cache-Pool. Die Redis Sharding-Implementierung von Jedis weist die folgenden Merkmale auf:

1. Verwenden Sie einen konsistenten Hashing-Algorithmus (konsistentes Hashing)

Hashen Sie den Schlüssel und den Knotennamen gleichzeitig und Dann Mapping-Matching, der verwendete Algorithmus ist MURMUR_HASH. Der Hauptgrund für konsistentes Hashing besteht darin, dass beim Hinzufügen oder Entfernen von Knoten kein erneutes Hashing durch erneutes Abgleichen erfolgt. Konsistentes Hashing wirkt sich nur auf die Schlüsselzuweisung benachbarter Knoten aus und die Auswirkung ist gering. Weitere Informationen zu konsistenten Hashing-Algorithmen finden Sie unter: http://blog.csdn.net/cywosp/article/details/23397179/

2. Virtueller Knoten

ShardedJedis virtualisiert jeden Redis-Knoten in 160 virtuelle Knoten für das Hashing basierend auf seinem Namen. Durch die Verwendung virtueller Knoten für die Zuordnung und den Abgleich können beim Hinzufügen oder Reduzieren von Redis-Knoten Schlüssel gleichmäßiger zwischen Redis-Knoten verschoben werden, anstatt dass nur benachbarte Knoten betroffen sind. Wie in der Abbildung gezeigt, wird Redis-Knoten 1 in NODE1-1 und NODE1-2 virtualisiert, die sich im Hash-Ring befinden. Auf diese Weise werden beim Hashen von Objekt1 und Objekt2 die nächstgelegenen Knoten NODE1-1 und NODE1-2 ausgewählt, und NODE1-1 und NODE1-2 sind virtuelle Knoten des NODE-Knotens, dh sie werden tatsächlich auf dem NODE gespeichert Knoten.

Das Hinzufügen virtueller Knoten kann für ein Gleichgewicht sorgen, d. h. jede Redis-Maschine speichert ähnliche Daten, anstatt dass eine Maschine mehr Daten speichert und andere weniger.

3. ShardedJedis unterstützt den KeyTagPattern-Modus

Extrahieren Sie einen Teil des KeyTags für das Sharding, sodass durch sinnvolle Benennung des Schlüssels eine Gruppe verwandter Schlüssel in das eingefügt werden kann gleichen Redis-Knoten, um knotenübergreifenden Zugriff zu vermeiden. Das heißt, der Client gibt die Schlüsselwerte derselben Regeln an und speichert sie auf demselben Redis-Knoten.

Beim Hinzufügen oder Entfernen von Knoten?

Redis Sharding übernimmt die Client-Sharding-Methode, und das serverseitige Redis ist immer noch ein relativ unabhängiger Redis-Instanzknoten. Gleichzeitig müssen wir keine zusätzlichen Zwischenverarbeitungskomponenten hinzufügen. Dies ist eine sehr leichte und flexible Redis-Clusterlösung mit mehreren Instanzen.

Natürlich muss dieser leichte und flexible Ansatz andere Funktionen des Clusters beeinträchtigen. Wenn Sie beispielsweise bei der Skalierung Redis-Knoten hinzufügen möchten, werden unterschiedliche Schlüssel an verschiedene Redis-Knoten verteilt, selbst wenn konsistentes Hashing verwendet wird.

Wenn wir erweitern müssen, fügen Sie Maschinen zur Shard-Liste hinzu. Zu diesem Zeitpunkt berechnet der Client die Berechnung auf der Grundlage des Schlüssels und landet ihn auf einem anderen Computer als dem Original. Wenn also ein bestimmter Wert ermittelt werden soll, kann dieser möglicherweise nicht ermittelt werden.

In solchen Situationen besteht der allgemeine Ansatz darin, die Daten direkt aus der Back-End-Datenbank neu zu laden, nachdem sie nicht abgerufen werden können. Manchmal führt jedoch ein Durchbrechen der Cache-Schicht und ein direkter Zugriff auf die Datenbankschicht dazu großer Schaden für den Systemzugriff.

Der Autor von Redis gab einen Weg – Presharding.

ist eine Online-Erweiterungsmethode. Das Prinzip besteht darin, mehrere Redis-Instanzen mit unterschiedlichen Ports auf jeder physischen Maschine auszuführen. Wenn beispielsweise drei physische Maschinen vorhanden sind, werden auf jeder physischen Maschine drei Redis-Instanzen ausgeführt. , dann gibt es tatsächlich 9 Redis-Instanzen in unserer Sharding-Liste. Fügen Sie eine physische Maschine hinzu. Die Schritte sind wie folgt:

Führen Sie Redis-Server auf der neuen physischen Maschine aus 🎜>

2. Der Redis-Server gehört zu einem bestimmten Redis-Server (angenommen, er heißt RedisA) in der Shard-Liste.

3. Nachdem die Master-Slave-Replikation (Replikation) abgeschlossen ist, ändern Sie die IP und den Port von RedisA in der Client-Shard-Liste in die IP und den Port von Redis-Server auf der neuen physischen Maschine.

4. Stoppen Sie RedisA

Dies entspricht der Übertragung eines bestimmten Redis-Servers auf eine neue Maschine. Es ist jedoch immer noch stark von der Replikationsfunktion von Redis selbst abhängig. Wenn die Snapshot-Datendatei der Hauptdatenbank zu groß ist, dauert der Replikationsprozess lange und belastet auch die Hauptdatenbank von Redis eine geschäftsarme Zugangsmethode für diesen Split-Prozess, der während der Hauptverkehrszeiten durchgeführt wird.

Wenn ein Knoten ausfällt

Es ist nicht nur das Hinzufügen oder Löschen von Redis-Knoten, das zu einem Schlüsselwertverlust führt. Das größere Hindernis entsteht durch die plötzliche Ausfallzeit von Redis Knoten.

Um die Leistung von Redis nicht zu beeinträchtigen, versuchen Sie, die AOF- und RDB-Dateispeicherfunktionen nicht zu aktivieren. Daher ist es notwendig, einen aktiven Redis- und Standby-Modus einzurichten Standby-Redis verfügt über ein Backup und die Daten gehen nicht verloren.

Sharding hat sich wie folgt entwickelt:

Auf diese Weise wird unser Architekturmodell zu einem Redis-Knotenabschnitt, der einen primären Redis und einen Standby-Redis enthält. Durch automatisches Failover bilden der aktive und der Standby-Knoten zusammen einen Redis-Knoten . , um die hohe Verfügbarkeit von Knoten sicherzustellen.

Redis Sentinel

bietet Funktionen wie Redis-Überwachung und Failover im Aktiv- und Backup-Modus, um eine hohe Systemverfügbarkeit zu erreichen.

Trennung von Lesen und Schreiben

Bei hohen Zugriffszeiten ist ein einzelner Knoten immer noch einem großen Zugriffsdruck ausgesetzt. Zu diesem Zeitpunkt müssen wir weitermachen zerlege es.

Normalerweise ist das Lesen oft um ein Vielfaches schneller als das Schreiben. Zu diesem Zeitpunkt können wir Lesen und Schreiben trennen, und das Lesen bietet mehr Instanzen. Der Master-Slave-Modus wird verwendet, um die Trennung von Lesen und Schreiben zu realisieren. Der Master ist für das Schreiben verantwortlich und der Slave ist nur für das Lesen verantwortlich. Gleichzeitig kann ein Master mehrere Slaves verbinden. Unter der Redis Sentinel-Überwachung kann auch eine automatische Überwachung von Knotenausfällen sichergestellt werden.

Weitere technische Artikel zum Thema Redis finden Sie in der Spalte Einführung in das Redis-Datenbanknutzungs-Tutorial, um mehr zu erfahren!

Das obige ist der detaillierte Inhalt vonSo gruppieren Sie Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn