Elasticsearch

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Elasticsearch

Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien. Nach einer Lizenzänderung ist Elasticsearch leider keine freie Software im Sinne der Opensource Initiative (OSI) mehr.

Dieses Dokument leitet zur Installation eines Elasticsearch-Server an, der am Localhost-Interface erreichbar ist und für Anwendungen auf dem Server (zum Beispiel Nextcloud mit Volltextsuche) genutzt werden kann. Durch eine Proxy-Konfiguration in einer .htaccess-Datei kann der Server über das Internet erreichbar gemacht werden.

Installation

Für den Dienst wird in HSAdmin ein eigener Shell-User xyz00-elastic mit der Shell /bin/bash angelegt.

Im ersten Schritt wird die Software (als tar.gz-Archiv) heruntergeladen und entpackt.

Die neueste Version kann auf https://www.elastic.co/de/downloads/elasticsearch in Erfahrung gebracht werden. Aktuell wird die Version 8.x noch nicht von der Nextcloud-Volltextsuche unterstützt!

 wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.7-linux-x86_64.tar.gz"
 tar xzf elasticsearch-7.17.7-linux-x86_64.tar.gz 
 rm elasticsearch-7.17.7-linux-x86_64.tar.gz 

Für zukünftige Updates ist zu empfehlen, die Verzeichnisse config, data und logs separat anzulegen:

 mkdir ~/elastic/
 mv elasticsearch-7.17.7/config elastic
 mkdir ~/elastic/logs
 mkdir ~/elastic/data

In der Konfigurationdatei ~/elastic/config/elasticsearch.yml werden folgende Optionen gesetzt: Die beiden Ports, auf denen das System erreichbar ist und die security-Option für das Passwort-Login. Außerdem die Pfade für logs und data.

 http.port: 39200
 transport.tcp.port: 39202
 xpack.security.enabled: true
 discovery.type: single-node
 path.data: /home/pacs/xyz00/users/elastic/elastic/data
 path.logs: /home/pacs/xyz00/users/elastic/elastic/logs

Dann wird der Dienst provisorisch gestartet.

 cd elasticsearch-7.17.7/
 export ES_PATH_CONF=$HOME/elastic/config
 ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch

In einer zweiten Shell erzeuge ich mit dem Kommando elasticsearch-setup-passwords zufällige Passworte für die vordefinierten Account in Elasticsearch:

 cd elasticsearch-7.17.7/
 export ES_PATH_CONF=$HOME/elastic/config
 ./bin/elasticsearch-setup-passwords auto

Die Ausgabe mit den generierten Passwörtern sichern!

Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:

 export ES_PATH_CONF=$HOME/elastic/config
 cd elasticsearch-7.17.7/
 ./bin/elasticsearch-plugin install ingest-attachment
 -> Installing ingest-attachment
 -> Downloading ingest-attachment from elastic
 [=================================================] 100%   
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @     WARNING: plugin requires additional permissions     @
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 * java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms
 * java.lang.RuntimePermission accessDeclaredMembers
 * java.lang.RuntimePermission getClassLoader
 * java.lang.reflect.ReflectPermission suppressAccessChecks
 * java.security.SecurityPermission createAccessControlContext
 See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
 for descriptions of what these permissions allow and the associated risks.
 
 Continue with installation? [y/N]y
 -> Installed ingest-attachment
 -> Please restart Elasticsearch to activate any plugins installed

Danach sollte Elasticsearch neugestartet werden.

Monitoring

Ein Start- und ein Stop-Skript und eine Monit-Konfiguration sorgen für den automatischen Start des Dienstes nach einem Reboot.

~/bin/start-elastic

 #!/bin/bash
 export HOME=/home/pacs/xyz00/users/elastic
 export ES_PATH_CONF=$HOME/elastic/config
 export ES_JAVA_OPTS="-Xms1g -Xmx1g"
 cd $HOME
 mkdir -p $HOME/var
 cd $HOME/elasticsearch-7.17.7
 exec ./bin/elasticsearch &
 echo $! >$HOME/var/elasticsearch.pid

~/bin/stop-elastic

 #!/bin/bash
 export HOME=/home/pacs/xyz00/users/elastic
 kill $( cat $HOME/var/elasticsearch.pid )

~/.monitrc

 set daemon 60 with start delay 10
 set logfile /home/pacs/xyz00/users/elastic/var/monit.log
 set idfile /home/pacs/xyz00/users/elastic/var/monit.id
 set statefile /home/pacs/xyz00/users/elastic/var/monit.state
 set mailserver localhost
 set mail-format { from: monit@xyz00.hostsharing.net }
 set httpd port 39008 address localhost
     allow elasticadmin:ein-monit-passwort
 check process elasticsearch with pidfile /home/pacs/xyz00/users/elastic/var/elasticsearch.pid
     start program "/home/pacs/xyz00/users/elastic/bin/start-elastic"
     stop program "/home/pacs/xyz00/users/elastic/bin/stop-elastic"

crontab -l

 # m h  dom mon dow   command
 HOME=/home/pacs/xyz00/users/elastic
 @reboot rm -f $HOME/.monit.pid && /usr/bin/monit -c $HOME/.monitrc

Update durchführen

Siehe auch die Anleitungen:

Dieses Vorgehensweise hat bei mir für das Upgrade von 7.14.1 auf 7.16.1 funktioniert. Bitte am besten erst auf einer Testinstallation testen!

als Benutzer xyz00-elastic:

 # TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben. 
 #      Es gibt ein neues Verzeichnis $HOME/elasticsearch-7.16.1
 killall monit  # Stoppe monit
 ~/bin/stop-elastic
 # TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird, 
 #       muss jetzt config und data und logs vom alten elasticsearch
 #       in das neue elasticsearch Verzeichnis verschoben werden.
 # TODO: Bearbeite ~/bin/start-elastic und ändere den Pfad auf die 
 #       neue Version von elasticsearch
 /usr/bin/monit -c $HOME/.monitrc  # starte monit neu, und das 
                                   # startet dann auch elasticsearch
 # TODO: Falls Plugins verwendet werden, müssen diese wieder
 #       installiert werden. Siehe oben.
 #       Elasticsearch nachher neustarten