Installieren und Konfigurieren von Elasticsearch unter Ubuntu 14.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 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:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure. Dadurch wird die Funktionalität eines privaten Netzwerks unabhängig vom physischen Netzwerk bereitgestellt, das Ihre Server verwenden.

Wenn Sie ein gemeinsam genutztes privates Netzwerk wieDigitalOcean Private Networking verwenden, ist diese Sicherheitsfunktion bereits für Server im selben Team oder Konto in derselben Region aktiviert. Dies ist besonders wichtig, wenn Sie Elasticsearch verwenden, da die HTTP-Schnittstelle keine Sicherheit enthält.

[[Schritt-1 - Installation von Java]] == 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. Elasticsearch benötigt Java 7 oder höher. Elasticsearch empfiehlt Oracle JDK Version 1.8.0_73, aber das native Ubuntu OpenJDK-Paket für die JRE funktioniert auch.

In diesem Schritt erfahren Sie, wie Sie beide Versionen installieren, um zu entscheiden, welche für Sie am besten geeignet ist.

OpenJDK installieren

Das native Ubuntu OpenJDK-Paket für die JRE ist kostenlos, wird gut unterstützt und wird automatisch über den Ubuntu APT-Installationsmanager verwaltet.

Aktualisieren Sie vor der Installation von OpenJDK mit APT die Liste der verfügbaren Pakete für die Installation auf Ihrem Ubuntu-Droplet, indem Sie den folgenden Befehl ausführen:

sudo apt-get update

Danach können Sie OpenJDK mit dem folgenden Befehl installieren:

sudo apt-get install openjdk-7-jre

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 -versionjava version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Java installieren 8

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.

Fügen Sie den Oracle Java PPA zu apt hinzu:

sudo add-apt-repository -y ppa:webupd8team/java

Aktualisieren Sie Ihre apt-Paketdatenbank:

sudo apt-get update

Installieren Sie die neueste stabile Version von Oracle Java 8 mit diesem Befehl (und akzeptieren Sie die Lizenzvereinbarung, die angezeigt wird):

sudo apt-get -y install oracle-java8-installer

Stellen Sie zum Schluss sicher, dass es installiert ist:

java -version

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

Elasticsearch kann direkt vonelastic.co in zip-, tar.gz-, deb- oder rpm-Paketen heruntergeladen werden. Für Ubuntu ist es am besten, das deb-Paket (Debian) 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.2. Laden Sie es mit dem folgenden Befehl in ein Verzeichnis Ihrer Wahl herunter:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

Installieren Sie es dann auf die übliche Ubuntu-Weise mit dem Befehldpkg wie folgt:

sudo dpkg -i elasticsearch-1.7.2.deb

[.tip] #Tip: Wenn Sie die neueste veröffentlichte Version von Elasticsearch möchten, gehen Sie zuelastic.co, um den Link zu finden, und verwenden Siewget, um ihn in Ihr Droplet herunterzuladen. Stellen Sie sicher, dass Sie das Deb-Paket herunterladen.
#

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.

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 update-rc.d elasticsearch defaults

[[Schritt-3 - Konfigurieren von Elastik]] == 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 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 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.yml:

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml

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

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ßtnode.master. Wenn Sie nur einen Elasticsearch-Knoten haben, sollten Sie diese Option auskommentieren, damit der Standardwert vontrue beibehalten wird - d. H. Der einzige Knoten sollte auch ein Master sein. Wenn Sie den Knoten alternativ als Slave konfigurieren möchten, entfernen Sie alternativ das Zeichen#am Anfang der Zeilenode.master und ändern Sie den Wert infalse:

/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. 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 auskommentiert lassen, damit der Standardwert vontruebeibehalten wird. Um das lokale Speichern von Daten zu deaktivieren, kommentieren Sie die folgende Zeile aus und ändern Sie den Wert infalse:

/etc/elasticsearch/elasticsearch.yml

...
node.data: false
...

Zwei weitere wichtige Optionen sindindex.number_of_shards undindex.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 werden (entfernen Sie unbedingt# am Zeilenanfang):

/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 anderen Pfad vonpath.dataangeben, indem Sie die Zeilepath.dataauskommentieren und ihren Wert ändern:

/etc/elasticsearch/elasticsearch.yml

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

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 - Sicherungselastik]] == Schritt 4 - Elastische Sicherung

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. Verwenden Sieiptables, 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 Dateielasticsearch.yml:

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 inlocalhost, sodass er folgendermaßen aussieht:

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host: localhost
...

[.warning] #Warning: Da Elasticsearch keine integrierte Sicherheit hat, ist es sehr wichtig, dass Sie keine IP-Adresse festlegen, auf die Server zugreifen können, die Sie nicht kontrollieren oder denen Sie nicht vertrauen. Binden Sie Elasticsearch nicht an eine öffentliche odershared private network IP-Adresse!
#
Für zusätzliche Sicherheit können Sie auch dynamische Skripte deaktivieren, die zum Auswerten benutzerdefinierter Ausdrücke verwendet 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/etc/elasticsearch/elasticsearch.yml-Datei hinzu:

/etc/elasticsearch/elasticsearch.yml

...
script.disable_dynamic: true
...

[[Schritt 5 - Testen]] == 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" : "Harry Leland",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "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]] == 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. Der URI der Anfrage war/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 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 World!" }
}

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.

Related