Elasticsearch: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
(monit => systemd, Elasticsearch Version 8)
 
Zeile 2: Zeile 2:


Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien.
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.
Nach einer Lizenzänderung im Jahr 2021 war Elasticsearch leider keine freie Software im Sinne der Opensource Initiative (OSI) mehr.
Im Jahr 2024 wurde die Lizenz nun aber wieder geändert, auf AGPL [https://www.elastic.co/de/blog/elasticsearch-is-open-source-again].
 
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 ==
== Installation ==
Zeile 12: Zeile 16:
Im ersten Schritt wird die Software (als ''tar.gz''-Archiv) heruntergeladen und entpackt.
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!
Die neueste Version kann auf https://www.elastic.co/de/downloads/elasticsearch in Erfahrung gebracht werden.  


<syntaxhighlight lang=shell>
<syntaxhighlight lang=shell>
wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.7-linux-x86_64.tar.gz"
wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.2-linux-x86_64.tar.gz"
tar xzf elasticsearch-7.17.7-linux-x86_64.tar.gz  
tar xzf elasticsearch-8.15.2-linux-x86_64.tar.gz
rm elasticsearch-7.17.7-linux-x86_64.tar.gz  
rm elasticsearch-8.15.2-linux-x86_64.tar.gz
</syntaxhighlight>
</syntaxhighlight>


Zeile 24: Zeile 28:
<syntaxhighlight lang=shell>
<syntaxhighlight lang=shell>
mkdir ~/elastic/
mkdir ~/elastic/
mv elasticsearch-7.17.7/config elastic
mv elasticsearch-8.15.2/config elastic
mkdir ~/elastic/logs
mkdir ~/elastic/logs
mkdir ~/elastic/data
mkdir ~/elastic/data
</syntaxhighlight>
</syntaxhighlight>


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.
Wir setzen einen symbolischen Link, um bei Updates nicht alle Skripte ändern zu müssen:
 
<syntaxhighlight lang=shell>
ln -s elasticsearch-8.15.2 elasticsearch
</syntaxhighlight>
 
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.


<syntaxhighlight lang=yaml line>
<syntaxhighlight lang=yaml line>
Zeile 43: Zeile 54:


<syntaxhighlight lang=shell>
<syntaxhighlight lang=shell>
cd elasticsearch-7.17.7/
cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
export ES_PATH_CONF=$HOME/elastic/config
ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
Zeile 51: Zeile 62:


<syntaxhighlight lang=shell>
<syntaxhighlight lang=shell>
cd elasticsearch-7.17.7/
cd ~/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
export ES_PATH_CONF=$HOME/elastic/config
./bin/elasticsearch-setup-passwords auto
./bin/elasticsearch-setup-passwords auto
Zeile 62: Zeile 73:
<syntaxhighlight lang=shell>
<syntaxhighlight lang=shell>
export ES_PATH_CONF=$HOME/elastic/config
export ES_PATH_CONF=$HOME/elastic/config
cd elasticsearch-7.17.7/
cd elasticsearch/
./bin/elasticsearch-plugin install ingest-attachment
./bin/elasticsearch-plugin install ingest-attachment
-> Installing ingest-attachment
-> Installing ingest-attachment
Zeile 85: Zeile 96:
Danach sollte Elasticsearch neugestartet werden.
Danach sollte Elasticsearch neugestartet werden.


== Monitoring ==
== Systemd Service ==
 
Ein Start- und ein Stop-Skript und eine Monit-Konfiguration sorgen für den automatischen Start des Dienstes nach einem Reboot.
 
''~/bin/start-elastic''


<syntaxhighlight lang=shell line>
Wir konfigurieren ElasticSearch als Systemd Dienst, um bei Neustarts des Servers automatisch gestartet zu werden:
#!/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
</syntaxhighlight>


''~/bin/stop-elastic''
''~/.config/systemd/user/elasticsearch.service''


<syntaxhighlight lang=shell line>
<syntaxhighlight lang=shell line>
#!/bin/bash
[Unit]
export HOME=/home/pacs/xyz00/users/elastic
Description=ElasticSearch
kill $( cat $HOME/var/elasticsearch.pid )
After=network.target
</syntaxhighlight>


''~/.monitrc''
[Service]
WorkingDirectory=%h/elasticsearch
Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m"
Environment="ES_PATH_CONF=%h/elastic/config"
ExecStart=%h/elasticsearch/bin/elasticsearch
StandardOutput=append:%h/var/log/elasticsearch.log
StandardError=inherit
Restart=always
PrivateTmp=true
NoNewPrivileges=true


<syntaxhighlight lang=shell line>
[Install]
set daemon 60 with start delay 10
WantedBy=default.target
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"
</syntaxhighlight>
</syntaxhighlight>


''crontab -l''
Diese Schritte werden durchgeführt, um den Dienst zu aktivieren:


<syntaxhighlight lang=shell line>
<syntaxhighlight lang=shell line>
# m h  dom mon dow  command
mkdir -p ~/var/log
HOME=/home/pacs/xyz00/users/elastic
systemctl --user enable elasticsearch --now
@reboot rm -f $HOME/.monit.pid && /usr/bin/monit -c $HOME/.monitrc
</syntaxhighlight>
</syntaxhighlight>


Zeile 141: Zeile 135:
* https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html
* https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html


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!
Dieses Vorgehensweise hat bei mir für das Upgrade von 8.15.0 auf 8.15.2 funktioniert. Bitte am besten erst auf einer Testinstallation testen!


als Benutzer xyz00-elastic:
als Benutzer xyz00-elastic:
Zeile 147: Zeile 141:
<syntaxhighlight lang=shell line>
<syntaxhighlight lang=shell line>
# TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben.  
# TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben.  
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-7.16.1
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-8.15.2
killall monit  # Stoppe monit
systemctl --user stop elasticsearch
~/bin/stop-elastic
 
# TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird,  
# TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird,  
#      muss jetzt config und data und logs vom alten elasticsearch
#      muss jetzt config und data und logs vom alten elasticsearch
#      in das neue elasticsearch Verzeichnis verschoben werden.
#      in das neue elasticsearch Verzeichnis verschoben werden.
# TODO: Bearbeite ~/bin/start-elastic und ändere den Pfad auf die
export OLD=elasticsearch-8.15.0
#      neue Version von elasticsearch
export NEW=elasticsearch-8.15.2
/usr/bin/monit -c $HOME/.monitrc  # starte monit neu, und das
cp -R $OLD/config $NEW
                                  # startet dann auch elasticsearch
mv $OLD/data $NEW
mv $OLD/logs $NEW
 
# TODO: Falls Plugins verwendet werden, müssen diese wieder
# TODO: Falls Plugins verwendet werden, müssen diese wieder
#      installiert werden. Siehe oben.
#      installiert werden. Siehe oben.
#       Elasticsearch nachher neustarten
 
# symbolischen Link umbiegen
rm elasticsearch
ln -s $NEW elasticsearch
 
Elasticsearch wieder starten
systemctl --user start elasticsearch
</syntaxhighlight>
</syntaxhighlight>



Aktuelle Version vom 8. Oktober 2024, 15:05 Uhr

Elasticsearch

Elasticsearch ist ein weit verbreiteter Suchserver für die Indizierung von Volltext oder von Log-Dateien.

Nach einer Lizenzänderung im Jahr 2021 war Elasticsearch leider keine freie Software im Sinne der Opensource Initiative (OSI) mehr. Im Jahr 2024 wurde die Lizenz nun aber wieder geändert, auf AGPL [1].

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.

wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.2-linux-x86_64.tar.gz"
tar xzf elasticsearch-8.15.2-linux-x86_64.tar.gz
rm elasticsearch-8.15.2-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-8.15.2/config elastic
mkdir ~/elastic/logs
mkdir ~/elastic/data

Wir setzen einen symbolischen Link, um bei Updates nicht alle Skripte ändern zu müssen:

ln -s elasticsearch-8.15.2 elasticsearch

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
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
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/
./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.

Systemd Service

Wir konfigurieren ElasticSearch als Systemd Dienst, um bei Neustarts des Servers automatisch gestartet zu werden:

~/.config/systemd/user/elasticsearch.service

[Unit]
Description=ElasticSearch
After=network.target

[Service]
WorkingDirectory=%h/elasticsearch
Environment="ES_JAVA_OPTS=-Xms512m -Xmx512m"
Environment="ES_PATH_CONF=%h/elastic/config"
ExecStart=%h/elasticsearch/bin/elasticsearch
StandardOutput=append:%h/var/log/elasticsearch.log
StandardError=inherit
Restart=always
PrivateTmp=true
NoNewPrivileges=true

[Install]
WantedBy=default.target

Diese Schritte werden durchgeführt, um den Dienst zu aktivieren:

mkdir -p ~/var/log
systemctl --user enable elasticsearch --now

Update durchführen

Siehe auch die Anleitungen:

Dieses Vorgehensweise hat bei mir für das Upgrade von 8.15.0 auf 8.15.2 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-8.15.2
systemctl --user stop elasticsearch

# 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.
export OLD=elasticsearch-8.15.0
export NEW=elasticsearch-8.15.2
cp -R $OLD/config $NEW
mv $OLD/data $NEW
mv $OLD/logs $NEW

# TODO: Falls Plugins verwendet werden, müssen diese wieder
#       installiert werden. Siehe oben.

# symbolischen Link umbiegen
rm elasticsearch
ln -s $NEW elasticsearch

#  Elasticsearch wieder starten
systemctl --user start elasticsearch