Elasticsearch: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
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.
Die neueste Version kann auf https://www.elastic.co/de/downloads/elasticsearch in Erfahrung gebracht werden.  


  wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.1-linux-x86_64.tar.gz"
<syntaxhighlight lang=shell>
  tar xzf elasticsearch-7.16.1-linux-x86_64.tar.gz  
wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.2-linux-x86_64.tar.gz"
  rm elasticsearch-7.16.1-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
</syntaxhighlight>


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


  mkdir ~/elastic/
<syntaxhighlight lang=shell>
  mv elasticsearch-7.16.1/config elastic
mkdir ~/elastic/
  mkdir ~/elastic/logs
mv elasticsearch-8.15.2/config elastic
  mkdir ~/elastic/data
mkdir ~/elastic/logs
mkdir ~/elastic/data
</syntaxhighlight>
 
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.
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
<syntaxhighlight lang=yaml line>
  transport.tcp.port: 39202
http.port: 39200
  xpack.security.enabled: true
transport.tcp.port: 39202
  discovery.type: single-node
xpack.security.enabled: true
  path.data: /home/pacs/xyz00/users/elastic/elastic/data
discovery.type: single-node
  path.logs: /home/pacs/xyz00/users/elastic/elastic/logs
path.data: /home/pacs/xyz00/users/elastic/elastic/data
path.logs: /home/pacs/xyz00/users/elastic/elastic/logs
</syntaxhighlight>


Dann wird der Dienst provisorisch gestartet.  
Dann wird der Dienst provisorisch gestartet.  


  cd elasticsearch-7.16.1/
<syntaxhighlight lang=shell>
  export ES_PATH_CONF=$HOME/elastic/config
cd ~/elasticsearch
  ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
export ES_PATH_CONF=$HOME/elastic/config
ES_JAVA_OPTS="-Xms1g -Xmx1g" ./bin/elasticsearch
</syntaxhighlight>


In einer zweiten Shell erzeuge ich mit dem Kommando ''elasticsearch-setup-passwords'' zufällige Passworte für die vordefinierten Account in 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.16.1/
<syntaxhighlight lang=shell>
  export ES_PATH_CONF=$HOME/elastic/config
cd ~/elasticsearch
  ./bin/elasticsearch-setup-passwords auto
export ES_PATH_CONF=$HOME/elastic/config
./bin/elasticsearch-setup-passwords auto
</syntaxhighlight>


Die Ausgabe mit den generierten Passwörtern sichern!
Die Ausgabe mit den generierten Passwörtern sichern!
Zeile 50: Zeile 71:
Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:
Für Nextcloud ist noch das Plugin ingest-attachment Plugin erforderlich:


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


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''


  #!/bin/bash
Wir konfigurieren ElasticSearch als Systemd Dienst, um bei Neustarts des Servers automatisch gestartet zu werden:
  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.16.1
  exec ./bin/elasticsearch &
  echo $! >$HOME/var/elasticsearch.pid


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


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


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


  set daemon 60 with start delay 10
[Install]
  set logfile /home/pacs/xyz00/users/elastic/var/monit.log
WantedBy=default.target
  set idfile /home/pacs/xyz00/users/elastic/var/monit.id
</syntaxhighlight>
  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''
Diese Schritte werden durchgeführt, um den Dienst zu aktivieren:


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


== Update durchführen ==
== Update durchführen ==
Zeile 121: 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:


  # TODO: neue tar.gz Datei herunterladen und entpacken, siehe oben.
<syntaxhighlight lang=shell line>
  #      Es gibt ein neues Verzeichnis $HOME/elasticsearch-7.16.1
export OLD=elasticsearch-8.15.0
  killall monit  # Stoppe monit
export NEW=elasticsearch-8.15.2
  ~/bin/stop-elastic
 
  # TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird,  
# neue tar.gz Datei herunterladen und entpacken
  #      muss jetzt config und data und logs vom alten elasticsearch
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-8.15.2
  #      in das neue elasticsearch Verzeichnis verschoben werden.
wget "https://artifacts.elastic.co/downloads/elasticsearch/${NEW}-linux-x86_64.tar.gz"
  # TODO: Bearbeite ~/bin/start-elastic und ändere den Pfad auf die
tar xzf ${NEW}-linux-x86_64.tar.gz
  #      neue Version von elasticsearch
rm ${NEW}-linux-x86_64.tar.gz
  /usr/bin/monit -c $HOME/.monitrc  # starte monit neu, und das
 
                                    # startet dann auch elasticsearch
systemctl --user stop elasticsearch
  # TODO: Falls Plugins verwendet werden, müssen diese wieder
 
  #      installiert werden. Siehe oben.
# TODO: Falls nicht mit separaten Verzeichnissen gearbeitet wird,  
  #       Elasticsearch nachher neustarten
#      muss jetzt config und data und logs vom alten elasticsearch
#      in das neue elasticsearch Verzeichnis verschoben werden.
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
</syntaxhighlight>


----
----
Zeile 144: Zeile 173:
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Software]]
[[Kategorie:Software]]
[[Kategorie:Java]]
[[Kategorie:Nextcloud]]

Aktuelle Version vom 5. November 2024, 19:06 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:

export OLD=elasticsearch-8.15.0
export NEW=elasticsearch-8.15.2

# neue tar.gz Datei herunterladen und entpacken
#      Es gibt ein neues Verzeichnis $HOME/elasticsearch-8.15.2
wget "https://artifacts.elastic.co/downloads/elasticsearch/${NEW}-linux-x86_64.tar.gz"
tar xzf ${NEW}-linux-x86_64.tar.gz
rm ${NEW}-linux-x86_64.tar.gz

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