2013-03-20 13 views
9

Ich habe einen kleinen Cluster von Servern, die ich synchron halten muss. Mein erster Gedanke dabei war, dass ein Server der "Master" ist und Updates mit der Pub/Sub-Funktion von redis veröffentlicht (da wir redis bereits für Storage verwenden) und die anderen Server im Cluster, die Slaves, nach Updates in suchen lassen eine langwierige Aufgabe. Dies schien eine einfache Methode zu sein, um alles synchron zu halten, aber dann dachte ich an das offensichtliche Problem: Was ist, wenn mein "Meister" ausfällt? Dort habe ich angefangen, nach Techniken zu suchen, um sicherzustellen, dass es immer einen Meister gibt, was mich dazu brachte, über Ideen wie die Wahl des Leiters zu lesen. Schließlich stolperte ich über Apache Zookeeper (durch Python-Bindung, "pettingzoo"), die anscheinend eine Menge der Fehlertoleranz Logik für Sie kümmert. Ich kann vielleicht meinen eigenen Code für die Auswahl des Anführers schreiben, aber ich denke, es wäre nicht annähernd so gut wie etwas, das sich bewährt und getestet hat, wie z. B. Zookeeper.zoekeeper vs redis server sync

Mein Hauptproblem bei der Verwendung von zookeeper ist, dass es nur eine weitere Komponente ist, die ich unnötigerweise zu meinem Setup hinzufügen kann, wenn ich mit etwas einfacherem auskommen könnte. Hat jemand jemals auf diese Weise Redis verwendet? Oder gibt es eine andere einfache Methode, mit der ich die Art von Funktionalität erreichen kann, die ich erreichen möchte?

Mehr Infos über Streichelzoo (slideshare)

Antwort

13

Ich fürchte, es gibt keine einfache Methode mit hohen Verfügbarkeit zu erreichen. Dies ist normalerweise schwierig einzurichten und schwierig zu testen. Es gibt mehrere Möglichkeiten, HA zu erreichen, die in zwei Kategorien eingeteilt werden: physisches Clustering und logisches Clustering.

Bei der physischen Clusterbildung geht es um die Verwendung von Hardware-, Netzwerk- und OS-Level-Mechanismen, um HA zu erreichen. Unter Linux können Sie sich Pacemaker anschauen, eine vollwertige Open-Source-Lösung, die mit allen Unternehmensdistributionen geliefert wird. Wenn Sie Clusterfunktionen direkt in Ihre Anwendung einbetten möchten (in C), sollten Sie die Corosync cluster engine (ebenfalls von Pacemaker verwendet) überprüfen. Wenn Sie kommerzielle Software verwenden möchten, ist Veritas Cluster Server eine gut etablierte (aber teure) plattformübergreifende HA-Lösung.

Logical Clustering ist über Phantasie verteilte Algorithmen (wie Leiterwahl, PAXOS, etc ...) HA zu erreichen, ohne auf spezifische niedrigen Niveau Mechanismen angewiesen zu sein. Das bieten Dinge wie Zookeeper.

Zookeeper ist ein konsistenter, geordneter, hierarchischer Speicher, der auf dem ZAB-Protokoll (ähnlich wie PAXOS) aufgebaut ist. Es ist ziemlich robust und kann verwendet werden, um einige HA-Einrichtungen zu implementieren, aber es ist nicht trivial, und Sie müssen die JVM auf allen Knoten installieren. Für gute Beispiele können Sie sich die recipes und die ausgezeichnete Curator Bibliothek von Netflix anschauen. Heutzutage wird Zookeeper weit über die reinen Hadoop-Kontexte hinaus verwendet, und IMO ist dies die beste Lösung, um eine logische HA-Infrastruktur aufzubauen.

Redis pub/sub-Mechanismus ist nicht zuverlässig genug, um einen logischen Cluster zu implementieren, da ungelesene Nachrichten verloren gehen (es gibt keine Warteschlangen von Elementen mit pub/sub). Um HA einer Sammlung von Redis-Instanzen zu erreichen, können Sie Redis Sentinel versuchen, aber es erstreckt sich nicht auf Ihre eigene Software.

Wenn Sie bereit sind, in C zu programmieren, ist ein HA-Framework, das oft vergessen wird (aber ziemlich nützlich sein kann IMO), das mit BerkeleyDB kommen. Es ist ziemlich einfach, unterstützt aber Wahllisten von Führungskräften und kann in jede Umgebung integriert werden. Dokumentation kann here und here gefunden werden. Hinweis: Sie müssen Ihre Daten nicht bei BerkeleyDB speichern, um vom HA-Mechanismus zu profitieren (nur die Topologiedaten - die gleichen, die Sie in Zookeeper eingeben würden).