2013-12-16 6 views
7

Entschuldigen Sie bitte, aber die Dokumentation von ES (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index.html) verwirrt mich.Verstehen der elastischen Suche

Dank Glossar verstehe ich die Bedingungen für Datenbank-, Tabellen- und Zeilen aber ich habe wesentliche Teile der Dokumentation zu lesen und ich kann keine Antworten finden:

  • Warum muss ich tun, brauchen number_of_shards und number_of_replicas hinzufügen Indexerstellung? Ich schaute hier http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html aber ironisch lässt es diese beiden Einstellungen aus :/
  • Wie kann ich 3 Shards mit 2 Replikate haben? Wenn das Glossar etwas ist, sollte es nicht unmöglich sein, wenn man bedenkt, dass ein Shard "eine einzige Lucene-Instanz" ist?
  • Wenn ich später weitere Knoten hinzufüge, wie kann ich diese Werte so ändern, dass sie die neuen Knoten umfassen?
  • Wie funktioniert Sharding in ES?
  • Wie funktionieren Replikatsätze in ES?
  • Wie kann ich sharding verwalten? Ich verstehe, dass es automatisch beitreten (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html#cluster-name) aber wie definiere ich den Unterschied zwischen Replikaten und Shards?
  • Wie kann ich Replikatsätze verwalten? I.e. Wie füge ich Replikate, Primärfarben usw. hinzu?

Als Referenz las ich diese Links zuerst:

Wenn die Informationen in der Dokumentation vorhanden ist, dann wäre ich sehr dankbar, wenn Sie in Richtung zeigen kann mir es.

Edit:

Ich bin auch nicht sicher, wie die automatische Erkennung auf einem verteilten Netzwerk funktioniert. Kurz, wenn Sie jedes öffentliche Netzwerk pingen, wie verbindet es sich mit dem richtigen, das möglicherweise auf der anderen Seite der Welt sein könnte?

+3

Diese Antwort eine faire Art und Weise geht: http://stackoverflow.com/questions/15694724/shards-and-replicas-in-elasticsearch – Sammaye

Antwort

13

Hier finden Sie Antworten auf Ihre Punkte.

Sie nicht „haben“, aber Sie sollten wahrscheinlich in wird vor allem wollen in der Produktion. Der Standardwert ist fünf Shards und eine Replikation.

Die Anzahl der definierten Replikationen ist nur die Anzahl, wie oft der gesamte Index in allen Knoten in Ihrem ElasticSearch-Cluster repliziert wird. Stellen Sie sich vor, dass es sich um mehrere Lesekopien einer RDBMS-Datenbank handelt (aber in diesem Fall lesen und schreiben wir alle Kopien).

Ein Shard ist die Anzahl der Male, die ich aufgeteilt habe, oder Shard, ein Index. Also kann ich einen Index mit einem einzelnen Shard haben, oder ich kann einen Index mit mehreren Shards haben. Dies ähnelt dem Konzept einer RDBMS-Datenbank nach Primärschlüssel, aber nicht identisch.

Also die Gesamtzahl der Shards, die Sie in einem Index haben werden, ist das Produkt von number_of_shards und number_of_replicas.

Wenn Sie eine Suche durchführen, verteilt elasticsearch Ihre Suche auf alle möglichen Knoten mit den Shards in Ihrem Index und aggregiert das Ergebnis für Sie. Sie können sich das als Map/Reduce vorstellen, wo die Map die Suche nach jedem Shard sendet und das Reduce die Ergebnisse sammelt.

Sie können auch die Replikationsnummer_der_Replikate jederzeit ändern, aber Sie können die Anzahl der_Schwerter niemals ändern. Dies muss bei der Indexerstellung festgelegt werden.

  • Wie kann ich 3 Scherben mit 2 Repliken? Wenn das Glossar etwas ist, sollte das nicht unmöglich sein, wenn man bedenkt, dass ein Shard von "eine einzelne Lucene-Instanz" ist?

Ich denke, die oben meist diese Antworten, aber es ist wichtig, dass Elasticsearch ist in erster Linie eine verteilte Computing-Lösung zu suchen, zu erinnern. Wir teilen die Arbeit auf mehrere Shards und möglicherweise auf Maschinen auf.

  • Wenn ich hinzufügen mehr Knoten später, wie kann ich diese Werte ändern die neuen Knoten zu überbrücken?

Sobald der Cluster bewusst einen anderen Knoten im Cluster ist, wird keine weitere Aktion von Ihnen benötigt. Die Einstellungen verbreiten sich im gesamten Cluster. Wenn Sie in Ihrem obigen Beispiel mit drei Shards und zwei Replikaten ursprünglich zwei Knoten und eine dritte hinzugefügt haben, hat jeder Knoten im Durchschnitt zwei Shards pro Knoten. Diese Shard-Bewegung wird ohne Ihr Eingreifen ausgeführt (vorausgesetzt, der Cluster kennt die neuer Knoten)

  • Wie funktioniert sharding Arbeit in ES?

Siehe oben

  • Wie in ES Replikatsätzen arbeiten?

oben

Sie müssen es nicht aktiv "verwalten". Wie bereits erwähnt, werden Sharding und alles, was Sie bei der Indexerstellung definieren, an neue Knoten innerhalb des Clusters weitergegeben.

Sie definieren Repliken und Scherben wie folgt aus:

{ 
    "settings": { 
     "index": { 
      "number_of_shards": 20, 
      "number_of_replicas": 1 
     } 
    }, 
    "mappings": { 
     "some_type": { 
      "properties": { 
       "some_field": { 
        "type": "long" 
       } 
      } 
     } 
    } 
} 
  • Wie kann ich Replikatsätzen verwalten? I.e. Wie füge ich Replikate, Primärfarben usw. hinzu?

Sie tun das, durch die Update-Indizes API-Dokumentation für diesen speziellen Fall auf dort Website hier zu finden ist:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-update-settings.html

ich deine Bearbeitung nur bemerkt, siehe unten:

  • Ich bin auch unsicher, wie Auto-Discovery in einem verteilten Netzwerk funktioniert.

In der YML Konfigurationsdatei legen Sie die Unicast wie folgt aus:

discovery.zen.ping.multicast.enabled: false 
#discovery.zen.minimum_master_nodes: 3 
discovery.zen.ping.unicast.hosts: ["ip.add.r.ess", "ip.add.r.ess"] 

Die mittlere Einstellung eine wichtige Einstellung, aber ich bemerkte es hier.Diese Nummer sollte immer eine Anzahl von (Master-Knoten/2) +1 sein. Dies soll Split-Brain-Situationen vermeiden. Generell setze ich alle Knoten auf Master-fähig.

Diese Einstellungen sind für Unicast, was ich denke, dass Sie für Ihre Frage und nicht Multicast gehen.

+1

Also wenn ich Sie richtig verstehe ein Shard ist keine Kopie, es ist die Daten, ein Bereich der ID, (ähnlich wie SQL und MongoDB in dieser Hinsicht), aber ein primärer Shard kann nicht wieder geteilt werden, was bedeutet, wenn ich meine verteilen möchte weiterlesen muss ich neu erstellen. Sie bekommen die Antwortabstimmung für die Detaillierung aller Einstellungen und das, danke :) – Sammaye

6

Kurz gesagt, ein Index ist in Shards aufgeteilt. Shards können repliziert werden, dh mehrere Kopien desselben Shards können im selben Cluster vorhanden sein. Wenn also ein Index 3 Shards und 2 Replikate hat, bedeutet das, dass Sie insgesamt neun Shards haben, von denen sechs Replikate der drei Master-Shards sind.

ES wird versuchen, Shards und ihre Replikate über den Cluster hinweg auszugleichen, so dass bei einem Ausfall eines Knotens ein Failover von den Master-Shards auf diesem Knoten auf Replikate erfolgen kann. Dies kann einige Leute verwirren: Ein Master in der elastischen Suche bezieht sich auf Shards, nicht auf den eigentlichen Knoten. Ein einzelner Knoten kann also eine Mischung aus Replikaten und Master-Shards enthalten.

Wenn Sie aus der Lucene-Welt kommen, ist ein Lucene-Index nicht dasselbe wie ein elastischer Suchindex. Ein elastischer Suchindex ist eine logische Gruppe indizierter Dokumente mit Typen, Zuordnungen und Dokumenten. Mehr oder weniger dasselbe wie ein Datenbankschema. Ein Lucene-Index hingegen ist eine Gruppe von mehreren Dateien, die indizierte Daten enthält. Wenn die Elastic-Suche Indizes erstellt, erstellt sie mehrere Lucene-Indizes (einen für jedes Feld und jeden Shard), und wenn sie repliziert, kopiert sie grundsätzlich die Dateien dieser Lucene-Indizes herum.

Sie können die Anzahl der Shards für einen Index nicht ändern, aber Sie können die Anzahl der Replikate ändern. Wenn Sie mehr Shards benötigen, müssen Sie in der Regel einen neuen Index erstellen und die Daten neu indizieren. Im Hinblick auf das Shard-Management, abgesehen von der Entscheidung über die Anzahl der Shards, gibt es nicht viel zu verwalten und ES ist ziemlich gut, Dinge selbst zu koordinieren. Es gibt eine Menge Optionen, mit denen man herumspielen kann, wenn man ein bisschen besser geworden ist Verständnis, wie es funktioniert. Standardwerte sind für die meisten ziemlich OK. Im Hinblick auf Cluster-Management können Sie eine Menge über die API in Bezug auf das Herunterfahren von Knoten in einer kontrollierten Weise, mit Index Aliase, Ändern der Anzahl der Replikate usw.

Wie für die Autodiscovery verwendet ES lokale Netzwerk Multicast von Standard. Sie können zu Unicast wechseln und wahrscheinlich möchten Sie den Standardclusternamen ändern, um Unfälle zu vermeiden (hatte Spaß in Coffeeshops mit unbeabsichtigten Clustern). Sie möchten wahrscheinlich nicht global clustern. Ich sehe das Ende nicht gut.

+0

Yeah du zweiten Absatz war ein Bit, das mich wirklich verwirrt, dachte ich an physische Maschinen wie in MongoDB, ein bisschen bummer muss ich den Index reformieren, wenn ich einen ernsthaften Spike bekomme und müssen verteile meine Lese weiter. Heh Ja, das Problem mit Clusternamen und Broadcasting war auch mein Gedanke. +1 – Sammaye

+0

Sie können Aliase verwenden, um die festgelegte Anzahl von Shards/Indexproblemen zu verringern. Auf diese Weise können Sie eine Gruppe von Indizes bei der Abfrage als einen Index abfragen. Logstash verwendet dies zum Erstellen neuer Indizes (und Shards) jeden Tag/Woche/Monat. Dies bietet Ihnen horizontale Skalierbarkeit und es gibt einige da draußen, die diese im Petabyte-Maßstab mit Hunderten von Knoten verwenden. Die Clusterbildung ist nicht so sehr ein Problem und eine größere Auswahl. Die Standardeinstellung bietet lediglich ein komfortables Verhalten in einem privaten Netzwerk, Sie können es jedoch anders konfigurieren, wenn Sie es nicht mögen. –

1

Es ist ein ganz Vorfall, dass etwa 80% der Fragen in der Video-Präsentation gegeben beantwortet wird von Shay Banon (Die creater von Elasticsearch). Obwohl diese Präsentation viel mehr hat, als Sie irgendwo anders finden können. Hoffe das hilft.

http://www.infoq.com/presentations/ElasticSearch 

Dieses Video ist eine wenig niedrige Auflösung, also wenn Sie Code in der Präsentation angezeigt werden sollen folgen diese

https://github.com/kimchy/talks/tree/master/2011/wsnparis 
Verwandte Themen