Wie richte ich einen ES-Cluster ein?

80

Angenommen, ich habe 5 Computer, auf denen ich einen Elasticsearch-Cluster ausführen möchte, und alle sind mit einem freigegebenen Laufwerk verbunden. Ich habe eine einzelne Kopie von elasticsearch auf dieses freigegebene Laufwerk gelegt, damit alle drei es sehen können. Starten Sie einfach die Elasticsearch auf diesem freigegebenen Laufwerk auf allen meinen Computern, und das Clustering würde automatisch seine Magie entfalten? Oder müsste ich bestimmte Einstellungen konfigurieren, damit die Elasticsearch erkennt, dass sie auf 5 Computern ausgeführt wird? Wenn ja, welche Einstellungen sind relevant? Sollte ich mir Gedanken über die Konfiguration von Replikaten machen oder wird dies automatisch erledigt?

Rolando
quelle
3
Sie werden den freigegebenen Ordner nicht für den Index verwenden, oder?
Javanna

Antworten:

53

es ist super einfach.

Sie benötigen für jeden Computer eine eigene Kopie von ElasticSearch (kopieren Sie einfach die, die Sie jetzt haben). Der Grund dafür ist, dass jeder Computer / Knoten seine eigenen Dateien behält, die im gesamten Cluster gespeichert sind.

Das einzige, was Sie wirklich tun müssen, ist die Konfigurationsdatei so zu bearbeiten, dass sie den Namen des Clusters enthält.

Wenn alle Computer denselben Clusternamen haben, erledigt elasticsearch den Rest automatisch (solange sich alle Computer im selben Netzwerk befinden).

Lesen Sie hier, um loszulegen: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

Wenn Sie Indizes erstellen (wohin die Daten gehen), definieren Sie zu diesem Zeitpunkt, wie viele Replikate Sie möchten (sie werden im Cluster verteilt).

Transaktion Charlie
quelle
9
Installieren Sie auch das Head Plugin. Dies erleichtert die Überwachung des Status Ihrer Indizes erheblich. mobz.github.io/elasticsearch-head
Transact Charlie
1
Warum müssen Sie auf jedem Computer separate Kopien haben? Basierend auf dem, was ich für Computer mit einem Knoten gesehen habe, können Sie den Knotennamen so ändern, dass mehrere Instanzen mit derselben Kopie ausgeführt werden: concept47.com/austin_web_developer_blog/elasticsearch/… Dies gilt nicht, wenn Sie separate Computer mit einem Laufwerk mit einer Freigabe haben ? Ich würde denken, wenn ich einen Clusternamen für die einzelne Kopie festlegen würde, könnte jeder der Computer diese einzelne Kopie ausführen, sodass der Clustername theoretisch der gleiche ist, oder bin ich falsch?
Rolando
Jede Maschine (oder jeder Knoten) benötigt einen eigenen Dateibereich, um Lucene-Indexdateien zu schreiben. Wenn Sie die Konfigurationsdatei so ändern (überprüfen Sie den Link), dass sie auf ein anderes Verzeichnis auf dem lokalen Knoten verweist, funktioniert dies möglicherweise.
Transaktion Charlie
Ich hatte den Eindruck, dass die verschiedenen Knotennamen jedes Clusters, da eine einzelne Instanz von elasticsearch automatisch erkennen kann, dass bereits eine andere Instanz ausgeführt wird, elasticsearch separate Verzeichnisse basierend auf dem Knoten erstellen würde. (Korrigieren Sie mich, wenn dies nicht die richtige Annahme ist)
Rolando
1
Warum probieren Sie es nicht einfach aus - Sie könnten es immer aufräumen? Bericht zurück - das würde mich interessieren. In der Vergangenheit wurde auf jedem Computer eine Installation ausgeführt, da dies redundanter und sicherer schien.
Transaktion Charlie
53

Es wird normalerweise automatisch behandelt.

Wenn die automatische Erkennung nicht funktioniert. Bearbeiten Sie die Konfigurationsdatei für die elastische Suche, indem Sie die Unicast-Erkennung aktivieren

Knoten 1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Knoten 2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

und so weiter für Knoten 3,4,5. Machen Sie Knoten 1 zum Master und den Rest nur als Datenknoten.

Bearbeiten: Bitte beachten Sie, dass nach der ES-Regel, wenn Sie NKnoten haben, Knoten gemäß der Konvention N/2+1Master für Failover-Mechanismen sein sollten. Sie können jedoch Datenknoten sein oder nicht.

Falls die automatische Erkennung nicht funktioniert, liegt der wahrscheinlichste Grund darin, dass das Netzwerk dies nicht zulässt (und daher deaktiviert). Wenn zu viele Pings für die automatische Erkennung auf mehreren Servern stattfinden, verhindern die Ressourcen zum Verwalten dieser Pings, dass andere Dienste ordnungsgemäß ausgeführt werden.

Stellen Sie sich zum Beispiel einen Cluster mit 10.000 Knoten und alle 10.000 Knoten vor, die die automatischen Pings ausführen.

KannarKK
quelle
Sollten zur Verdeutlichung alle "unicast.hosts" die IP / FQDN des Masters sein? Scheint das zu sein, was Ihr Beispiel anzeigt.
Harperville
Laut den Kommentaren von elasticsearch.yml in 1.7.x wird der Knoten
NIEMALS
@Jonesome - mein Beispiel zeigt einen Master und> 1 Datenknoten. Wenn Sie nicht möchten, dass ein Knoten jemals als Master fungiert, sollten Sie in Ordnung sein, wenn Sie die Eigenschaft auf false setzen. Wenn Sie jedoch jemals möchten, dass Ihr Knoten Master wird, sollte diese Eigenschaft niemals berührt werden.
KannarKK
@KannarKK Aber wenn Sie mit ES auf jedem Knoten außer 1 "node.master: false" setzen, fällt dann nicht der gesamte Cluster aus, wenn der Master ausfällt? Besiegt das nicht einen Hauptzweck des Clusters? Warum lassen Sie "node.master" nicht vollständig aus dem yml heraus (standardmäßig true), damit ein anderer Knoten zum Master werden kann, wenn der Master stirbt?
Jonesome Reinstate Monica
@Jonesome - Ich habe diese Informationen bereits in die Antwort aufgenommen: .... Bitte beachten Sie, dass nach der ES-Regel, wenn Sie N Knoten haben, gemäß Konvention N / 2 + 1 Knoten Master für Failover-Mechanismen sein sollten oder möglicherweise jedoch keine Datenknoten. Wenn Sie also> 1 Master haben, fügen Sie alle ihre Informationen in die Liste der Hosts ein
KannarKK
5

Ich habe die von @KannarKK in ES 2.0.2 vorgeschlagenen Schritte ausprobiert, konnte den Cluster jedoch nicht zum Laufen bringen. Offensichtlich habe ich etwas herausgefunden, da ich in der Slave-Konfiguration die TCP-Portnummer auf dem Master festgelegt hatte. Discovery.zen.ping.unicast.hosts benötigt die Portnummer des Masters zusammen mit der IP-Adresse (TCP-Portnummer) für die Erkennung. Wenn ich also die folgende Konfiguration versuche, funktioniert es für mich.

Knoten 1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Knoten 2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]
Somum
quelle
3

Elastic Search 7 hat die Konfigurationen für die Clusterinitialisierung geändert. Es ist wichtig zu beachten, dass die ES-Instanzen intern über die Transportschicht (TCP) kommunizieren und nicht über das HTTP-Protokoll, das normalerweise zur Durchführung von Operationen an den Indizes verwendet wird. Unten finden Sie eine Beispielkonfiguration für einen Cluster mit 2 Maschinen.

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2

Maschine 2 Konfiguration: -

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

cluster.name: Dies gilt für alle Computer, die Teil eines Clusters sein sollen.

node.name: Kennung für die ES-Instanz. Standardmäßig wird der Computername verwendet, wenn er nicht angegeben wird.

node.master: Gibt an, ob diese ES-Instanz Master sein soll oder nicht

node.data : Gibt an, ob diese ES-Instanz ein Datenknoten sein soll oder nicht (Daten halten).

bootrap.memory_lock: Deaktivieren Sie das Austauschen. Sie können den Cluster starten, ohne dieses Flag zu setzen. Es wird jedoch empfohlen, die Sperre festzulegen. Weitere Informationen: https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host: 0.0.0.0, wenn Sie die ES-Instanz über das Netzwerk verfügbar machen möchten. 0.0.0.0 unterscheidet sich von 127.0.0.1 (auch bekannt als localhost oder Loopback-Adresse). Dies bedeutet, dass alle IPv4-Adressen auf dem Computer vorhanden sind. Wenn der Computer mehrere IP-Adressen hat und ein Server 0.0.0.0 überwacht, kann der Client den Computer von jeder der IPv4-Adressen aus erreichen.

http.port: Port, an dem diese ES-Instanz auf HTTP-Anforderungen wartet

transport.host: Die IPv4-Adresse des Hosts (diese wird zur Kommunikation mit anderen ES-Instanzen verwendet, die auf verschiedenen Computern ausgeführt werden). Weitere Informationen: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

transport.tcp.port: 9300 (der Port, an dem der Computer die TCP-Verbindungen akzeptiert)

Discovery.seed_hosts: Dies wurde in neueren Versionen geändert. Initialisieren Sie alle IPv4-Adressen mit dem TCP-Port (wichtig) von ES-Instanzen, die Teil dieses Clusters sein sollen. Dies wird für alle ES-Instanzen, die Teil dieses Clusters sind, gleich sein.

cluster.initial_master_nodes: Knotennamen (node.name) der ES-Maschinen, die an der Master-Wahl teilnehmen werden. (Quorum-basierte Entscheidungsfindung: - https://www.elastic.co/guide/en/elasticsearch/reference/current /modules-discovery-quorums.html#modules-discovery-quorums )

Karotte
quelle