Installieren und Konfigurieren von Elasticsearch unter CentOS 7

Einführung

Elasticsearch ist eine Plattform für die verteilte Suche und Analyse von Daten in Echtzeit. Die Popularität ist auf die einfache Bedienung, die leistungsstarken Funktionen und die Skalierbarkeit zurückzuführen.

Elasticsearch unterstützt RESTful-Operationen. Dies bedeutet, dass Sie HTTP-Methoden (GET, POST, PUT, DELETE usw.) in Kombination mit einem HTTP-URI (/ collection / entry) verwenden können, um Ihre Daten zu bearbeiten. Der intuitive RESTful-Ansatz ist sowohl für Entwickler als auch für Benutzer geeignet. Dies ist einer der Gründe für die Beliebtheit von Elasticsearch.

Elasticsearch ist eine kostenlose Open-Source-Software mit einem soliden Unternehmen - Elastic. Diese Kombination macht es für den Einsatz in allen Bereichen von persönlichen Tests bis zur Unternehmensintegration geeignet.

Dieser Artikel führt Sie in Elasticsearch ein und zeigt Ihnen, wie Sie es installieren, konfigurieren und verwenden.

Voraussetzungen

Stellen Sie vor dem Ausführen dieses Lernprogramms sicher, dass folgende Voraussetzungen erfüllt sind:

Sofern nicht anders angegeben, sollten alle Befehle, für die in diesem Lernprogramm Root-Berechtigungen erforderlich sind, als Nicht-Root-Benutzer mit Sudo-Berechtigungen ausgeführt werden.

Annahmen

In diesem Lernprogramm wird davon ausgegangen, dass Ihre Server ein VPN wie das hier beschriebene verwenden: https://www.digitalocean.com/community/tutorials/how-to-use-ansible-and-tinc-vpn-to-secure-your- Serverinfrastruktur [So sichern Sie Ihre Serverinfrastruktur mit Ansible- und Tinc-VPN]. Dadurch wird die Funktionalität eines privaten Netzwerks unabhängig vom physischen Netzwerk bereitgestellt, das Ihre Server verwenden.

Wenn Sie ein freigegebenes privates Netzwerk wie DigitalOcean Private Networking verwenden, müssen Sie ein VPN verwenden, um Elasticsearch vor unbefugtem Zugriff zu schützen. Jeder Server muss sich in demselben privaten Netzwerk befinden, da Elasticsearch keine integrierte Sicherheit in der HTTP-Schnittstelle hat. Das private Netzwerk darf nicht mit Computern geteilt werden, denen Sie nicht vertrauen.

Schritt 1 - Java installieren

Zunächst benötigen Sie eine Java Runtime Environment (JRE) für Ihr Droplet, da Elasticsearch in der Programmiersprache Java geschrieben ist. Sie können das native CentOS OpenJDK-Paket für die JRE verwenden. Diese JRE ist kostenlos, wird gut unterstützt und wird automatisch über den CentOS Yum-Installationsmanager verwaltet.

Sie können das neueste OpenJDK mit dem folgenden Befehl installieren:

sudo yum install java-1.8.0-openjdk.x86_64

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihre JRE installiert ist und verwendet werden kann:

java -version

Das Ergebnis sollte so aussehen:

Output of java -versionopenjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

Wenn Sie mit der Verwendung von Elasticsearch fortfahren und nach einer besseren Java-Leistung und -Kompatibilität suchen, können Sie sich für die Installation des proprietären Java von Oracle (Oracle JDK 8) entscheiden. Weitere Informationen hierzu finden Sie in dem Artikel unter How To Install Java on CentOS und Fedora.

Schritt 2 - Elasticsearch herunterladen und installieren

Elasticsearch kann direkt von elastic.co in zip-, tar.gz-, deb- oder rpm-Paketen heruntergeladen werden. Für CentOS ist es am besten, das native RPM-Paket zu verwenden, das alles installiert, was Sie zum Ausführen von Elasticsearch benötigen.

Zum Zeitpunkt dieses Schreibens ist die neueste Elasticsearch-Version 1.7.3. Laden Sie es mit dem folgenden Befehl in ein Verzeichnis Ihrer Wahl herunter:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm

Dann installieren Sie es wie gewohnt unter CentOS mit dem Befehl + rpm + wie folgt:

sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm

Dies führt dazu, dass Elasticsearch in "+ / usr / share / elasticsearch / " installiert wird, wobei die Konfigurationsdateien in " / etc / elasticsearch " abgelegt werden und das Init-Skript in " / etc / init.d / elasticsearch +" hinzugefügt wird.

Um sicherzustellen, dass Elasticsearch automatisch mit dem Droplet gestartet und gestoppt wird, fügen Sie das Init-Skript mit dem folgenden Befehl zu den Standard-Runlevels hinzu:

sudo systemctl enable elasticsearch.service

Schritt 3 - Konfigurieren von Elastic

Nachdem Elasticsearch und seine Java-Abhängigkeiten installiert wurden, ist es an der Zeit, Elasticsearch zu konfigurieren.

Die Elasticsearch-Konfigurationsdateien befinden sich im Verzeichnis "+ / etc / elasticsearch +". Es gibt zwei Dateien:

  • + elasticsearch.yml + - Konfiguriert die Elasticsearch-Servereinstellungen. Hier werden alle Optionen außer denen für die Protokollierung gespeichert, weshalb wir uns hauptsächlich für diese Datei interessieren.

  • + logging.yml + - Stellt die Konfiguration für die Protokollierung bereit. Zu Beginn müssen Sie diese Datei nicht bearbeiten. Sie können alle Standardprotokollierungsoptionen beibehalten. Sie finden die resultierenden Protokolle standardmäßig in + / var / log / elasticsearch +.

Die ersten Variablen, die auf einem Elasticsearch-Server angepasst werden müssen, sind "+ node.name" und "+ cluster.name" in "+ elasticsearch.yml". Wie die Namen vermuten lassen, gibt "+ node.name +" den Namen des Servers (Knotens) und des Clusters an, dem dieser zugeordnet ist.

Wenn Sie diese Variable nicht anpassen, wird dem Droplet-Hostnamen automatisch ein "+ node.name " zugewiesen. Das ` cluster.name +` wird automatisch auf den Namen des Standardclusters gesetzt.

Der Wert "+ cluster.name +" wird von der Funktion zur automatischen Ermittlung von Elasticsearch verwendet, um Elasticsearch-Knoten automatisch zu ermitteln und einem Cluster zuzuordnen. Wenn Sie den Standardwert nicht ändern, befinden sich möglicherweise unerwünschte Knoten im selben Netzwerk in Ihrem Cluster.

So bearbeiten Sie die Hauptkonfigurationsdatei "+ elasticsearch.yml +":

sudo nano /etc/elasticsearch/elasticsearch.yml

Entfernen Sie das Zeichen "+ # " am Anfang der Zeilen für " node.name" und "+ cluster.name", um die Kommentare zu entfernen, und ändern Sie dann ihre Werte. Ihre ersten Konfigurationsänderungen in der Datei "+ / etc / elasticsearch / elasticsearch.yml +" sollten folgendermaßen aussehen:

/etc/elasticsearch/elasticsearch.yml

...
node.name:
cluster.name:
...

Eine weitere wichtige Einstellung ist die Rolle des Servers, die entweder "Master" oder "Slave" sein kann. „Meister“ sind für den Clusterzustand und die Stabilität verantwortlich. In großen Bereitstellungen mit vielen Clusterknoten wird empfohlen, mehr als einen dedizierten „Master“ zu haben. In der Regel speichert ein dedizierter „Master“ keine Daten und erstellt keine Indizes. Daher sollte keine Überlastungsgefahr bestehen, durch die der Clusterzustand gefährdet werden könnte.

"Slaves" werden als "Arbeitspferde" verwendet, die mit Datenaufgaben geladen werden können. Selbst wenn ein "Slave" -Knoten überlastet ist, sollte der Clusterzustand nicht ernsthaft beeinträchtigt werden, vorausgesetzt, es sind andere Knoten vorhanden, die zusätzliche Lasten aufnehmen können.

Die Einstellung, die die Rolle des Servers bestimmt, heißt + node.master +. Wenn Sie nur einen Elasticsearch-Knoten haben, sollten Sie diese Option auskommentieren, damit der Standardwert von "+ true " beibehalten wird - d. H. Der einzige Knoten sollte auch ein Master sein. Wenn Sie den Knoten alternativ als Slave konfigurieren möchten, entfernen Sie das Zeichen " # " am Anfang der Zeile " node.master " und ändern Sie den Wert in " false +":

/etc/elasticsearch/elasticsearch.yml

...
node.master:
...

Eine weitere wichtige Konfigurationsoption ist + node.data +, die bestimmt, ob ein Knoten Daten speichert oder nicht. In den meisten Fällen sollte diese Option auf dem Standardwert ("+ true +") belassen werden. In zwei Fällen möchten Sie möglicherweise keine Daten auf einem Knoten speichern. Zum einen ist der Knoten ein dedizierter „Master“, wie wir bereits erwähnt haben. Der andere ist, wenn ein Knoten nur zum Abrufen von Daten von Knoten und zum Aggregieren von Ergebnissen verwendet wird. Im letzteren Fall fungiert der Knoten als "Search Load Balancer".

Wenn Sie nur einen Elasticsearch-Knoten haben, sollten Sie diese Einstellung auskommentieren, damit der Standardwert "+ true " beibehalten wird. Andernfalls können Sie das lokale Speichern von Daten deaktivieren, indem Sie die folgende Zeile auskommentieren und den Wert in " false +" ändern:

/etc/elasticsearch/elasticsearch.yml

...
node.data:
...

Zwei weitere wichtige Optionen sind "+ index.number_of_shards " und " index.number_of_replicas +". Der erste bestimmt, in wie viele Teile (Shards) der Index aufgeteilt wird. Die zweite definiert die Anzahl der Replikate, die über den Cluster verteilt werden. Durch mehr Shards wird die Indizierungsleistung verbessert, während durch mehr Replikate die Suche beschleunigt wird.

Angenommen, Sie untersuchen und testen Elasticsearch noch auf einem einzelnen Knoten, ist es besser, mit nur einem Shard und keinen Replikaten zu beginnen. Daher sollten ihre Werte wie folgt eingestellt sein (achten Sie darauf, das "+ # +" am Anfang der Zeilen zu entfernen):

/etc/elasticsearch/elasticsearch.yml

...
index.number_of_shards:
index.number_of_replicas:
...

Eine letzte Einstellung, die Sie möglicherweise ändern möchten, ist "+ path.data ", mit der der Pfad festgelegt wird, in dem Daten gespeichert werden. Der Standardpfad ist " / var / lib / elasticsearch ". In einer Produktionsumgebung wird empfohlen, eine dedizierte Partition und einen Bereitstellungspunkt zum Speichern von Elasticsearch-Daten zu verwenden. Im besten Fall handelt es sich bei dieser dedizierten Partition um ein separates Speichermedium, das eine bessere Leistung und Datenisolation bietet. Sie können einen anderen " path.data" -Pfad angeben, indem Sie die Zeile "+ path.data +" auskommentieren und ihren Wert ändern:

/etc/elasticsearch/elasticsearch.yml

...
path.data:
...

Wenn Sie alle Änderungen vorgenommen haben, speichern Sie die Datei und schließen Sie sie. Jetzt können Sie Elasticsearch zum ersten Mal mit dem folgenden Befehl starten:

sudo service elasticsearch start

Warten Sie mindestens 10 Sekunden, bis Elasticsearch vollständig gestartet ist, bevor Sie es verwenden können. Andernfalls erhalten Sie möglicherweise Fehler, weil Sie keine Verbindung herstellen können.

Schritt 4 - Gummiband sichern

Elasticsearch verfügt über keine integrierte Sicherheit und kann von jedem gesteuert werden, der auf die HTTP-API zugreifen kann. Dieser Abschnitt ist kein umfassender Leitfaden zur Sicherung von Elasticsearch. Ergreifen Sie alle erforderlichen Maßnahmen, um den unbefugten Zugriff auf den Server bzw. die virtuelle Maschine, auf der er ausgeführt wird, zu verhindern. Erwägen Sie die Verwendung von iptables, um Ihr System weiter zu sichern.

Die erste Sicherheitsoptimierung besteht darin, den öffentlichen Zugriff zu verhindern. Um den öffentlichen Zugriff zu entfernen, bearbeiten Sie die Datei + elasticsearch.yml +:

sudo nano /etc/elasticsearch/elasticsearch.yml

Suchen Sie die Zeile, die "+ network.bind_host " enthält, entfernen Sie das Kommentarzeichen, indem Sie das Zeichen " # " am Zeilenanfang entfernen, und ändern Sie den Wert in " localhost +".

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host:
...

+ Für zusätzliche Sicherheit können Sie auch dynamische Skripts deaktivieren, mit denen benutzerdefinierte Ausdrücke ausgewertet werden. Durch die Erstellung eines benutzerdefinierten böswilligen Ausdrucks kann ein Angreifer möglicherweise Ihre Umgebung angreifen.

Um benutzerdefinierte Ausdrücke zu deaktivieren, fügen Sie die folgende Zeile am Ende der Datei + / etc / elasticsearch / elasticsearch.yml + hinzu:

/etc/elasticsearch/elasticsearch.yml

...
script.disable_dynamic: true
...

Damit die obigen Änderungen wirksam werden, müssen Sie Elasticsearch mit dem folgenden Befehl neu starten:

sudo service elasticsearch restart

Schritt 5 - Testen

Inzwischen sollte Elasticsearch auf Port 9200 ausgeführt werden. Sie können es mit curl, dem Kommandozeilen-Tool für clientseitige URL-Übertragungen und einer einfachen GET-Anfrage wie folgt testen:

curl -X GET 'http://localhost:9200'

Sie sollten die folgende Antwort sehen:

Output of curl{
 "status" : 200,
 "name" : "CentOS Node",
 "cluster_name" : "mysqluster",
 "version" : {
   "number" : "1.7.3",
   "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682",
   "build_timestamp" : "2015-10-15T09:14:17Z",
   "build_snapshot" : false,
   "lucene_version" : "4.10.4"
 },
 "tagline" : "You Know, for Search"
}

Wenn Sie eine ähnliche Antwort wie oben sehen, funktioniert Elasticsearch ordnungsgemäß. Ist dies nicht der Fall, vergewissern Sie sich, dass Sie die Installationsanweisungen korrekt befolgt und einige Zeit für den vollständigen Start von Elasticsearch eingeplant haben.

Schritt 6 - Verwenden von Elasticsearch

Fügen Sie zunächst einige Daten hinzu, um Elasticsearch zu verwenden. Wie bereits erwähnt, verwendet Elasticsearch eine RESTful-API, die auf die üblichen CRUD-Befehle reagiert: Erstellen, Lesen, Aktualisieren und Löschen. Zum Arbeiten verwenden wir erneut die Funktion "Wellung".

Sie können Ihren ersten Eintrag mit dem folgenden Befehl hinzufügen:

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Sie sollten die folgende Antwort sehen:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

Mit curl haben wir eine HTTP-POST-Anfrage an den Elasticsearch-Server gesendet. Die URI der Anfrage lautete "+ / tutorial / helloworld / 1 +". Es ist wichtig, die Parameter hier zu verstehen:

  • + Tutorial + ist der Index der Daten in Elasticsearch.

  • + helloworld + ist der Typ.

  • + 1 + ist die ID unseres Eintrags unter dem obigen Index und Typ.

Sie können diesen ersten Eintrag mit einer HTTP-GET-Anforderung wie folgt abrufen:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

Das Ergebnis sollte so aussehen:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

Um einen vorhandenen Eintrag zu ändern, können Sie eine HTTP-PUT-Anfrage wie folgt verwenden:

curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
 "message": "Hello People!"
}'

Elasticsearch sollte eine erfolgreiche Änderung wie folgt bestätigen:

Output{
 "_index" : "tutorial",
 "_type" : "helloworld",
 "_id" : "1",
 "_version" : 2,
 "created" : false
}

Im obigen Beispiel haben wir das "+ message " des ersten Eintrags in "Hello People!" Geändert. Damit wurde die Versionsnummer automatisch auf " 2 +" erhöht.

Möglicherweise haben Sie das zusätzliche Argument "+ pretty +" in der obigen Anfrage bemerkt. Es aktiviert ein für Menschen lesbares Format, sodass Sie jedes Datenfeld in eine neue Zeile schreiben können. Sie können Ihre Ergebnisse auch beim Abrufen von Daten „verschönern“ und eine viel schönere Ausgabe erhalten:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1?'

Jetzt hat die Antwort ein viel besseres Format:

Output{
 "_index" : "tutorial",
 "_type" : "helloworld",
 "_id" : "1",
 "_version" : 2,
 "found" : true,
 "_source":{ "message": "Hello World!" }
}

Bisher haben wir Daten in Elasticsearch hinzugefügt und abgefragt. Weitere Informationen zu den Vorgängen finden Sie in der API-Dokumentation unter https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html.

Fazit

So einfach können Sie Elasticsearch installieren, konfigurieren und verwenden. Sobald Sie genug mit manuellen Abfragen gespielt haben, besteht Ihre nächste Aufgabe darin, sie in Ihren Anwendungen zu verwenden.