it-swarm.com.de

Wie richte ich ES Cluster ein?

Angenommen, ich habe 5 Computer, auf denen ich einen Elasticsearch-Cluster ausführen möchte, und die alle mit einem gemeinsam genutzten Laufwerk verbunden sind. Ich habe eine einzelne Kopie von elasticsearch auf dieses freigegebene Laufwerk kopiert, damit alle drei sie sehen können. Starte ich einfach die Elasticsuche auf diesem freigegebenen Laufwerk auf allen meinen Maschinen und das Clustering würde automatisch seine Wirkung entfalten? Oder muss ich bestimmte Einstellungen konfigurieren, damit die Elasticsearch erkennt, dass sie auf 5 Computern ausgeführt wird? Wenn ja, wie lauten die relevanten Einstellungen? Muss ich mich um die Konfiguration von Replikaten kümmern oder wird dies automatisch erledigt?

77
Rolando

es ist super einfach.

Sie benötigen für jede Maschine eine eigene Kopie von ElasticSearch (kopieren Sie einfach die, die Sie jetzt haben). Der Grund dafür ist, dass auf jeder Maschine/jedem Knoten, unabhängig davon, welche Dateien im Cluster gespeichert werden sollen, eigene Dateien gespeichert werden.

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

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

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

Wenn Sie Indizes erstellen (wo die Daten abgelegt werden), legen Sie zu diesem Zeitpunkt fest, wie viele Replikate Sie möchten (sie werden im Cluster verteilt).

51

Es wird normalerweise automatisch gehandhabt.

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.

Edit: Bitte beachten Sie, dass nach ES-Regel, wenn Sie N Knoten haben, nach Konvention N/2+1 Knoten sollten Master für Failover-Mechanismen sein. 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 ist). Wenn auf mehreren Servern zu viele Auto-Discovery-Pings stattfinden, verhindern die Ressourcen zum Verwalten dieser Pings, dass andere Dienste ordnungsgemäß ausgeführt werden.

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

52
KannarKK

Ich habe die Schritte ausprobiert, die @KannarKK für ES 2.0.2 vorgeschlagen hat, konnte den Cluster jedoch nicht zum Laufen bringen. Offensichtlich habe ich etwas herausgefunden, da ich die TCP-Portnummer für den Master in der Slave-Konfiguration "discovery.zen.ping.unicast.hosts" festgelegt hatte. Für die Erkennung wird die Portnummer des Masters zusammen mit der IP-Adresse (TCP-Portnummer) benötigt. Wenn ich also versuche, die Konfiguration zu befolgen, funktioniert das 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"]
4
Somum