Regelbasierte Replikat-Zuweisung für SolrCloud
Wenn Solr den Sammlungen Knoten zuweisen muss, kann es diese entweder automatisch nach dem Zufallsprinzip zuweisen oder der Benutzer kann…
Wenn Solr den Sammlungen Knoten zuweisen muss, kann es diese entweder automatisch nach dem Zufallsprinzip zuweisen oder der Benutzer kann eine Reihe von Knoten angeben, an denen es die Replikate erstellen soll. Bei sehr großen Clustern ist es schwierig, exakte Knotennamen festzulegen, und es gibt Ihnen immer noch keine feinkörnige Kontrolle darüber, wie die Knoten für einen Shard ausgewählt werden. Der Benutzer sollte die vollständige Kontrolle darüber haben, wo die Knoten für jede Sammlung, jeden Shard und jedes Replikat zugewiesen werden. Dies hilft bei der optimalen Zuweisung von Hardwareressourcen im gesamten Cluster.
Die regelbasierte Zuweisung von Replikaten ist eine neue Funktion in Solr 5.2, die die Erstellung von Regeln zur Bestimmung der Platzierung von Replikaten im Cluster ermöglicht. In Zukunft wird diese Funktion dabei helfen, automatisch Replikate hinzuzufügen/zu entfernen, wenn Systeme ausfallen oder ein höherer Durchsatz erforderlich ist. Dies ermöglicht eine einfachere Verwaltung des Clusters.
Diese Funktion kann in den folgenden Fällen verwendet werden:
- Erstellung einer Kollektion
- Scherbenbildung
- Erstellung von Replikaten
Häufige Anwendungsfälle
- Weisen Sie einem Host nicht mehr als 1 Replikat dieser Sammlung zu
- Weisen Sie alle Replikate Knoten mit mehr als 100 GB freiem Speicherplatz zu, oder weisen Sie Replikate zu, bei denen der Speicherplatz größer ist.
- Weisen Sie keine Replik auf einem bestimmten Host zu, weil ich dort einen Overseer ausführen möchte
- Weisen Sie nur ein Replikat eines Shards in einem Rack zu
- Weisen Sie Replikate auf Knoten mit weniger als 5 Kernen zu oder weisen Sie Replikate auf Knoten mit der geringsten Anzahl von Kernen zu.
Was ist eine Regel?
Eine Regel ist eine Reihe von Bedingungen, die ein Knoten erfüllen muss, bevor dort ein Replikationskern erstellt werden kann. Eine Regel besteht aus drei Bedingungen:
- shard – dies ist der Name eines Shards oder ein Platzhalter (* bedeutet für jeden Shard). Wenn shard nicht angegeben wird, gilt die Regel für die gesamte Sammlung
- Replik – dies kann eine Zahl oder ein Platzhalter sein ( * bedeutet eine beliebige Zahl zwischen Null und Unendlich )
- tag – dies ist ein Attribut eines Knotens im Cluster, das in einer Regel verwendet werden kann. z.B.: „freedisk“ „cores“, „rack“, „dc“ usw. Der Tag-Name kann eine benutzerdefinierte Zeichenfolge sein. Wenn Sie ein benutzerdefiniertes Tag erstellen, ist ein Solr-Plugin namens Snitch für die Bereitstellung von Tags und Werten zuständig.
Betreiber
Eine Bedingung kann einen der vier Operatoren haben
- equals (kein Operator erforderlich) : tag:x bedeutet, dass der Tag-Wert gleich ‚x‘ sein muss
- größer als (>): tag:>x bedeutet tag Wert größer als ‚x‘. x muss eine Zahl sein
- weniger als (<): tag:<x bedeutet tag Wert kleiner als ‚x‘. x muss eine Zahl sein
- nicht gleich (!): tag:!x bedeutet, dass der Tag-Wert NICHT gleich ‚x‘ sein MUSS. Die Gleichheitsüberprüfung wird für den String-Wert durchgeführt
Beispiele
Beispiel 1: Behalten Sie weniger als 2 Replikate (höchstens 1 Replikat) dieser Sammlung auf einem beliebigen Knoten
replica:<2,node:*
Beispiel 2: für einen bestimmten Shard weniger als 2 Replikate auf einem beliebigen Knoten behalten
shard:*,replica:<2,node:*
Beispiel 3 : „Alle Replikate in Shard1 dem Rack 730 zuweisen“.
shard:shard1,replica:*,rack:730
Der Standardwert von replica ist *. Er kann also weggelassen werden und die Regel kann reduziert werden auf
shard:shard1,rack:730
Hinweis: Dies bedeutet, dass es einen Snitch geben sollte, der Werte für das Tag ‚Rack‘ liefert.
Beispiel 4 : „Replikate nur auf Knoten mit weniger als 5 Kernen erstellen“.
replica:*,cores:<5
oder vereinfacht als,
cores:<5
Beispiel 5: Keine Replikate auf dem Host 192.45.67.3 erstellen
host:!192.45.67.3
Fuzzy-Operator (~)
Dies kann als Suffix zu jeder Bedingung verwendet werden. Damit wird zunächst versucht, die Regel strikt zu erfüllen. Wenn Solr nicht genügend Knoten findet, die das Kriterium erfüllen, versucht es, die nächstbeste Übereinstimmung zu finden, die das Kriterium möglicherweise nicht erfüllt
Zum Beispiel, beste Übereinstimmung . freedisk:>200~. Versuchen Sie, Replikate dieser Sammlung auf Knoten mit mehr als 200 GB freiem Speicherplatz zuzuweisen, und wenn das nicht möglich ist, wählen Sie den Knoten mit dem größten freien Speicherplatz
Die Wahl unter Gleichen
Die Knoten werden zuerst sortiert und die Regeln werden zum Sortieren verwendet. Dadurch wird sichergestellt, dass auch dann, wenn viele Knoten den Regeln entsprechen, die besten Knoten für die Knotenzuweisung ausgewählt werden. Wenn es beispielsweise eine Regel gibt, die besagt „freedisk:>20“, werden die Knoten nach Speicherplatz absteigend sortiert und der Knoten mit dem meisten Speicherplatz wird zuerst ausgewählt. Oder wenn die Regel lautet „Kerne:<5“, werden die Knoten nach der Anzahl der Kerne aufsteigend sortiert und der Knoten mit der geringsten Anzahl von Kernen wird zuerst ausgewählt.
Spitzel
Die Tag-Werte stammen von einem Plugin namens Snitch. Wenn es in einer Regel ein Tag namens ‚Rack‘ gibt, muss es einen Snitch geben, der den Wert für ‚Rack‘ für jeden Knoten im Cluster liefert. Ein Snitch implementiert die Snitch-Schnittstelle. Solr bietet standardmäßig einen Standard-Snitch, der die folgenden Tags bereitstellt
- Kerne: Anzahl:der Kerne im Knoten
- freedisk: Auf dem Knoten verfügbarer Speicherplatz
- host: Hostname des Knotens
- Knoten: Name des Knotens
- sysprop.{PROPERTY_NAME} sysprop.key bedeutet einen Wert, der beim Starten des Knotens als -Dkey=keyValue an den Knoten übergeben wird. Es ist möglich, Regeln wie sysprop.key:expectedVal,shard:* zu verwenden.
Wie sind Snitches konfiguriert?
Es ist möglich, einen oder mehrere Snitches für einen Satz von Regeln zu verwenden. Wenn die Regeln nur Tags vom Standard-Snitch benötigen, muss dieser nicht explizit konfiguriert werden.
Beispiel:
snitch=class:fqn.ClassName,key1:val1,key2:val2,key3:val3
Wie sammelt das System Tag-Werte?
- Identifizieren Sie den Satz von Tags in den Regeln
- Erstellen Sie Instanzen der angegebenen Snitches. Der Standard-Snitch wird trotzdem erstellt
- Fragen Sie jeden Snitch, ob er Werte für einen der Tags liefern kann. Wenn auch nur ein Tag keinen Snitch hat, schlägt die Zuordnung fehl.
- Nachdem Sie die Petzen identifiziert haben, bitten Sie sie, die Tag-Werte für jeden Knoten im Cluster anzugeben
- Wenn der Wert für ein Tag für einen bestimmten Knoten nicht erhalten wird, kann er nicht an der Zuordnung teilnehmen.
Wie konfiguriere ich Regeln?
Regeln werden bei der Erstellung von Sammlungen als Anfrageparameter pro Sammlung angegeben. Es ist möglich, mehrere ‚Regel‘- und ‚Snitch‘-Parameter wie in diesem Beispiel anzugeben:
snitch=class:EC2Snitch&rule=shard:*,replica:1,dc:dc1&rule=shard:*,replica:<2,dc:dc3
Diese Regeln werden im Cluster-Status in Zookeeper gespeichert und sind während der gesamten Lebensdauer der Sammlung verfügbar. Dadurch kann das System zukünftige Knotenzuweisungen ohne direkte Benutzerinteraktion durchführen.