Installieren und Konfigurieren von Elasticsearch unter Ubuntu 16.04

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 entwickler- als auch benutzerfreundlich. Dies ist einer der Gründe für die Popularität von Elasticsearch.

Elasticsearch ist eine kostenlose Open-Source-Software mit einem soliden Unternehmen dahinter: 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, sichern und verwenden.

Voraussetzungen

Bevor Sie diesem Tutorial folgen, benötigen Sie:

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.

[[Schritt 1 - Herunterladen und Installieren von Elasticsearch]] == Schritt 1 - Herunterladen und Installieren von Elasticsearch

Elasticsearch kann direkt auselastic.co inzip,tar.gz,deb oderrpm Paketen heruntergeladen werden. Für Ubuntu ist es am besten, das Paketdeb (Debian) zu verwenden, mit dem alles installiert wird, was Sie zum Ausführen von Elasticsearch benötigen.

Aktualisieren Sie zunächst Ihren Paketindex.

sudo apt-get update

Laden Sie die neueste Elasticsearch-Version herunter, die zum Zeitpunkt des Schreibens 2.3.1 ist.

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

Dann installieren Sie es auf die übliche Ubuntu-Weise mitdpkg.

sudo dpkg -i elasticsearch-2.3.1.deb

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

Fügen Sie das Init-Skript zu den Standard-Runlevels hinzu, um sicherzustellen, dass Elasticsearch automatisch mit dem Server gestartet und gestoppt wird.

sudo systemctl enable elasticsearch.service

Bevor Sie Elasticsearch zum ersten Mal starten, lesen Sie bitte den nächsten Abschnitt über die empfohlene Mindestkonfiguration.

[[Schritt-2 - Konfigurieren der Elasticsearch]] == Schritt 2 - Konfigurieren der Elasticsearch

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 Einstellungen des Elasticsearch-Servers. Hier werden alle Optionen außer denen für die Protokollierung gespeichert, weshalb wir uns hauptsächlich für diese Datei interessieren.

  • logging.yml bietet eine Konfiguration für die Protokollierung. 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, sindnode.name undcluster.name inelasticsearch.yml. Wie der Name schon sagt, gibtnode.name den Namen des Servers (Knotens) und des Clusters an, dem dieser zugeordnet ist.

Wenn Sie diese Variablen nicht anpassen, wird automatisch einnode.name in Bezug auf den Droplet-Hostnamen zugewiesen. Diecluster.name werden automatisch auf den Namen des Standardclusters gesetzt.

Der Wertcluster.namewird von der Funktion zur automatischen Erkennung von Elasticsearch verwendet, um Elasticsearch-Knoten automatisch zu erkennen und einem Cluster zuzuordnen. Wenn Sie den Standardwert nicht ändern, befinden sich möglicherweise unerwünschte Knoten im selben Netzwerk in Ihrem Cluster.

So starten Sie die Bearbeitung der Hauptkonfigurationsdatei vonelasticsearch.ymlmitnano oder Ihrem bevorzugten Texteditor.

sudo nano /etc/elasticsearch/elasticsearch.yml

Entfernen Sie das Zeichen#am Zeilenanfang fürcluster.name undnode.name, um sie zu kommentieren, und aktualisieren Sie dann ihre Werte. Ihre ersten Konfigurationsänderungen in der Datei/etc/elasticsearch/elasticsearch.ymlollten folgendermaßen aussehen:

/etc/elasticsearch/elasticsearch.yml

. . .
cluster.name: mycluster1
node.name: "My First Node"
. . .

Dies sind die Mindesteinstellungen, mit denen Sie mit Elasticsearch beginnen können. Es wird jedoch empfohlen, den Konfigurationsteil weiterzulesen, um das Verständnis und die Feinabstimmung von Elasticsearch zu verbessern.

Eine besonders wichtige Einstellung von Elasticsearch ist die Rolle des Servers, der entweder Master oder Slave ist. Master servers sind für den Zustand und die Stabilität des Clusters 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 oder erstellt keine Indizes. Daher sollte keine Überlastungsgefahr bestehen, durch die der Clusterzustand gefährdet werden könnte.

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

Die Einstellung, die die Rolle des Servers bestimmt, heißtnode.master. Standardmäßig ist ein Knoten ein Master. Wenn Sie nur einen Elasticsearch-Knoten haben, sollten Sie diese Option auf den Standardwerttruebelassen, da immer mindestens ein Master benötigt wird. Wenn Sie den Knoten alternativ als Slave konfigurieren möchten, weisen Sie der Variablennode.master einen Wert vonfalsewie folgt zu:

/etc/elasticsearch/elasticsearch.yml

. . .
node.master: false
. . .

Eine weitere wichtige Konfigurationsoption istnode.data, die bestimmt, ob ein Knoten Daten speichert oder nicht. In den meisten Fällen sollte diese Option auf ihrem Standardwert (true) belassen werden. In zwei Fällen möchten Sie möglicherweise keine Daten auf einem Knoten speichern. Einer ist, wenn der Knoten ein dedizierter Master ist ", wie zuvor erwähnt. Der andere ist, wenn ein Knoten nur zum Abrufen von Daten von Knoten und zum Aggregieren von Ergebnissen verwendet wird. Im letzteren Fall wirkt der Knoten alssearch load balancer.

Wenn Sie nur einen Elasticsearch-Knoten haben, sollten Sie diesen Wert nicht ändern. Andernfalls geben Sie zum Deaktivieren des lokalen Speicherns von Datennode.data alsfalse wie folgt an:

/etc/elasticsearch/elasticsearch.yml

. . .
node.data: false
. . .

In größeren Elasticsearch-Bereitstellungen mit vielen Knoten sind zwei weitere wichtige Optionenindex.number_of_shards undindex.number_of_replicas. Der erste bestimmt, in wie viele Teile odershards 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.

Standardmäßig sind 5 Shards und 1 Replikate vorhanden. Angenommen, Sie untersuchen und testen Elasticsearch noch auf einem einzelnen Knoten, können Sie mit nur einem Shard und keinen Replikaten beginnen. Daher sollten ihre Werte wie folgt festgelegt werden:

/etc/elasticsearch/elasticsearch.yml

. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .

Eine letzte Einstellung, die Sie möglicherweise ändern möchten, istpath.data, die den Pfad bestimmt, 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 anderenpath.data-Pfad angeben, indem Sie ihn wie folgt angeben:

/etc/elasticsearch/elasticsearch.yml

. . .
path.data: /media/different_media
. . .

Speichern und beenden Sie die Datei, sobald Sie alle Änderungen vorgenommen haben. Jetzt können Sie Elasticsearch zum ersten Mal starten.

sudo systemctl start elasticsearch

Weisen Sie Elasticsearch einige wenige Schritte zu, bevor Sie versuchen, es zu verwenden. Andernfalls erhalten Sie möglicherweise Fehler, weil Sie keine Verbindung herstellen können.

[[Schritt-3 - Sichern der Elasticsearch]] == Schritt 3 - Sichern der Elasticsearch

Standardmäßig verfügt Elasticsearch über keine integrierte Sicherheit und kann von jedem gesteuert werden, der auf die HTTP-API zugreifen kann. Dies ist nicht immer ein Sicherheitsrisiko, da Elasticsearch nur die Loopback-Schnittstelle (d. H.127.0.0.1) überwacht, auf die nur lokal zugegriffen werden kann. Daher ist kein öffentlicher Zugriff möglich und Elasticsearch ist sicher genug, solange allen Serverbenutzern vertraut wird oder es sich um einen dedizierten Elasticsearch-Server handelt.

Wenn Sie jedoch die Sicherheit verbessern möchten, müssen Sie zunächst die Authentifizierung aktivieren. Die Authentifizierung erfolgt durch die kommerziellenShield plugin. Leider ist dieses Plugin nicht kostenlos, aber es gibt eine kostenlose 30-Tage-Testversion, mit der Sie es testen können. Die offizielle Seite enthält ausgezeichnete Installations- und Konfigurationsanweisungen. Das einzige, was Sie möglicherweise zusätzlich wissen müssen, ist, dass der Pfad zum Installationsmanager des Elasticsearch-Plugins/usr/share/elasticsearch/bin/plugin ist.

Wenn Sie das kommerzielle Plugin nicht verwenden möchten, aber dennoch den Remotezugriff auf die HTTP-API zulassen müssen, können Sie die Netzwerkexposition mit Ubuntus Standard-Firewall UFW (Uncomplicated Firewall) zumindest einschränken. Standardmäßig ist UFW installiert, aber nicht aktiviert. Wenn Sie es verwenden möchten, gehen Sie folgendermaßen vor:

Erstellen Sie zunächst eine Regel, um alle erforderlichen Dienste zuzulassen. Sie müssen mindestens SSH zulassen, damit Sie sich am Server anmelden können. Um den weltweiten Zugriff auf SSH zu ermöglichen, Whitelist-Port 22.

sudo ufw allow 22

Ermöglichen Sie dann den Zugriff auf den Standard-HTTP-API-Port von Elasticsearch (TCP 9200) für den vertrauenswürdigen Remote-Host, z. B.TRUSTED_IP, wie folgt:

sudo ufw allow from TRUSTED_IP to any port 9200

Erst danach aktivieren Sie UFW mit dem Befehl:

sudo ufw enable

Überprüfen Sie abschließend den Status von UFW mit dem folgenden Befehl:

sudo ufw status

Wenn Sie die Regeln korrekt angegeben haben, sollte die Ausgabe folgendermaßen aussehen:

Output of java -versionStatus: active

To                         Action      From
--                         ------      ----
9200                       ALLOW       TRUSTED_IP
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

Sobald Sie bestätigt haben, dass UFW aktiviert ist und den Elasticsearch-Port 9200 schützt, können Sie Elasticsearch erlauben, auf externe Verbindungen zu warten. Öffnen Sie dazu die Konfigurationsdatei vonelasticsearch.ymlerneut.

sudo nano /etc/elasticsearch/elasticsearch.yml

Suchen Sie die Zeile mitnetwork.bind_host, kommentieren Sie sie aus, indem Sie das Zeichen# am Zeilenanfang entfernen, und ändern Sie den Wert in0.0.0.0, sodass er folgendermaßen aussieht:

/etc/elasticsearch/elasticsearch.yml

. . .
network.host: 0.0.0.0
. . .

Wir haben0.0.0.0 angegeben, damit Elasticsearch alle Schnittstellen und gebundenen IPs abhört. Wenn Sie möchten, dass es nur eine bestimmte Schnittstelle abhört, können Sie die IP-Adresse anstelle von0.0.0.0 angeben.

Starten Sie Elasticsearch mit dem folgenden Befehl neu, damit die obige Einstellung wirksam wird:

sudo systemctl restart elasticsearch

Versuchen Sie anschließend, eine Verbindung vom vertrauenswürdigen Host zu Elasticsearch herzustellen. Wenn Sie keine Verbindung herstellen können, stellen Sie sicher, dass die UFW funktioniert und die Variablenetwork.hostkorrekt angegeben wurde.

[[Schritt-4 -—- Testen der Elastiksuche]] == Schritt 4 - Testen der Elastiksuche

Inzwischen sollte Elasticsearch auf Port 9200 ausgeführt werden. Sie können es mitcurl, dem clientseitigen Befehlszeilen-URL-Übertragungstool und einer einfachen GET-Anforderung testen.

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

Sie sollten die folgende Antwort sehen:

Output of curl{
  "name" : "My First Node",
  "cluster_name" : "mycluster1",
  "version" : {
    "number" : "2.3.1",
    "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp" : "2016-04-04T12:25:05Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "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.

Führen Sie den folgenden Befehl aus, um eine gründlichere Überprüfung von Elasticsearch durchzuführen:

curl -XGET 'http://localhost:9200/_nodes?pretty'

In der Ausgabe des obigen Befehls können Sie alle aktuellen Einstellungen für Knoten, Cluster, Anwendungspfade, Module usw. anzeigen und überprüfen.

[[Schritt-5 -—- Verwenden von Elasticsearch]] == Schritt 5 - 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:create,read,update unddelete. Um damit zu arbeiten, verwenden wir erneutcurl.

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,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

Mitcuel haben wir eine HTTP-POST-Anfrage an den Elasticsearch-Server gesendet. Der URI der Anforderung war/tutorial/helloworld/1 mit mehreren Parametern:

  • 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 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-Anforderung 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,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

Im obigen Beispiel haben wir diemessage des ersten Eintrags in "Hallo Leute!" Geändert. Damit wurde die Versionsnummer automatisch auf2 erhöht.

Möglicherweise haben Sie das zusätzliche Argumentpretty in der obigen Anforderung 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?pretty'

Jetzt hat die Antwort ein viel besseres Format:

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

Bisher haben wir Daten in Elasticsearch hinzugefügt und abgefragt. Um mehr über die anderen Operationen zu erfahren, überprüfen Sie bittethe API documentation.

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.