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

Redis-Cluster/Lastenausgleich

Zunächst einmal können Sie die Standardkonfiguration ändern, wenn Sie wenig in

arbeiten

redis-trib.rb

in der Funktion def check_create_parameters . Sie können eine Master- und eine Slave-Replik festlegen.

Der Zweck dieser Konfiguration ist die Fehlertoleranz. Die Slaves können auch zum Lesen verwendet werden (READONLY). In den drei Mastern sind die Hashslots gleichmäßig verteilt und mit einem Load-Balancing-Algorithmus können Sie auch die eigentlichen Schlüssel neu verteilen. Die Schritte eines möglichen Algorithmus, der die Schlüssel auf die Knoten verteilt, sind (von mir getestet und es funktioniert wie erwartet):

  1. Finde die Masse der Meister
  2. Ermitteln Sie die Gesamtzahl der Schlüssel, die sie besitzen
  3. Speichern Sie für jeden Master-Knoten den Hostnamen, den Port und die Anzahl der Schlüssel
  4. Berechnen Sie die Schlüssel, die jeder Master besitzen muss, damit die Verteilung der Schlüssel ausgeglichen ist (Gesamtschlüssel des Clusters / Anzahl der Master)
  5. Finden Sie heraus, welche Masterknoten Schlüssel nehmen oder geben müssen und wie viele Schlüssel sie geben/nehmen müssen
  6. Charakterisieren Sie Master als Quell- oder Zielknoten, je nachdem, ob sie Schlüssel erhalten oder abgeben
  7. Beginnen Sie mit der Migration vom Quellknoten zu den Zielknoten, zuerst die Hashslots und dann die relevanten Schlüssel, und iterieren Sie, bis alle Master die gleiche Menge an Schlüsseln haben

Dieser Algorithmus trägt dazu bei, die Reaktionszeit zu minimieren. Was ich meine:

Mit drei Mastern kann die Reaktionszeit minimiert werden. Wenn Sie eine Konfiguration mit einem Master haben und dieser Master beispielsweise 30000 #Schlüssel enthält, ist die Antwortzeit, um 1000 Schlüssel auf einmal zu erhalten,> von einer Konfiguration mit 2 Mastern, die jeweils 15000 halten.

Wenn Sie einen Schlüssel in Master1 erstellen und versuchen, diesen Schlüssel von Master2 zu erreichen (zu lesen), erhalten Sie einen MOVED-Fehler. Die Lösung besteht also darin, einen intelligenten Client zu erstellen, der die Hashslots dem entsprechenden Knoten zuordnet. Daher können Sie den Schlüssel von Master2 nur dann löschen, wenn Master2 Ihre Anfrage an den richtigen Master weiterleitet.

Hoffe das hilft.