OpenSearch

OpenSearch basiert auf Apache Lucene.

Begriffe:

  • Index: Sammlung an „Dokumenten“, wobei ein Dokument ein JSON-Objekt ist. Analogie zu Datenbanken: Alle Studenten aus einer Tabelle.

  • Shard: Ein Index wird in Häppchen - den Shards - aufgeteilt und gleichmässig im Cluster verteilt. Ein Shard ist dabei ein vollständiger Lucene-Index, der CPU- und RAM-Ressourcen belegt. In der Regel sollte OpenSearch jedem Node die „Anzahl Shards im Index“ geteilt durch „Anzahl Nodes“ zuweisen. Shards sollten in der Praxis zwischen 10 und maximal 40 GB gross werden.

  • Shard Replica: Backup-Kopie im Falle des Ausfalls eines Nodes.

Installation

OpenSearch 2.15.x (inkl. Pinning):

curl --show-error --location https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo --output /etc/yum.repos.d/opensearch-2.x.repo

export OPENSEARCH_INITIAL_ADMIN_PASSWORD=$(tr -dc A-Z-a-z-0-9_@#%^-_=+ < /dev/urandom  | head -c${1:-32})
echo Admin Password: $OPENSEARCH_INITIAL_ADMIN_PASSWORD
dnf -y install opensearch-2.15.0

Bemerkung

Die separate Installation einer Java-Runtime ist nicht nötig, OpenSearch liefert sein JDK mit - siehe /usr/share/opensearch/jdk/bin/java -version.

Mindestens OpenSearch’s JVM-Options an die RAM-Grösse der Maschine anpassen:

cp /etc/opensearch/jvm.options /etc/opensearch/jvm.options.d/z00-linuxfabrik.options
/etc/opensearch/jvm.options.d/z00-linuxfabrik.options
# update the Xms and Xmx settings with half of the installed system memory
-Xms3g
-Xmx3g

Tipp

Aktuelle, tatsächliche Heap-Size und dessen Nutzung ausgeben lassen:

curl http://127.0.0.1:9200/_cat/nodes?h=heap*
# heap.current  heap.percent    heap.max
502.2mb         24              2gb

Cluster-Name anpassen - muss unternehmensweit eindeutig sein:

/etc/opensearch/opensearch.yml
cluster.name: graylog-linuxfabrik

Optional Bind-Adresse und Port anpassen. Achtung: Wird eine externe IP-Adresse angegeben, müssen weitere Security-Konfigurationen getätigt werden - ansonsten schlagen die „bootstrap checks“ beim Start des Servers mit einer node validation exception fehl.

/etc/opensearch/opensearch.yml
network.host: 0.0.0.0
http.port: 9200
# plus more ...

In den Default-Einstellungen erwartet OpenSearch Log-Einträge auf Port 9200 per HTTPS. Wer das abschalten möchte:

/etc/opensearch/opensearch.yml
# disable HTTPS
plugins.security.ssl.http.enabled: false

Ausserdem ist eine Authentifizierung fällig. Wer das ganze Security-Thema abschalten möchte:

/etc/opensearch/opensearch.yml
# disable all security settings, including authorization
plugins.security.disabled: true

Bemerkung

So wird Security konfiguriert: https://opensearch.org/docs/latest/security/configuration/index/

Kernel-Parameter für OpenSearch anpassen:

# this is already the default, just to be sure:
sudo sysctl --write vm.max_map_count=262144
echo 'vm.max_map_count=262144' > /etc/sysctl.d/opensearch.conf

OpenSearch aktivieren:

systemctl daemon-reload
systemctl enable --now opensearch.service

Test:

# if http:
curl http://localhost:9200

# if https with authorization:
curl https://localhost:9200 -u 'admin:<custom-admin-password>' --insecure

Troubleshooting

JNA temporary directory ‚/usr/share/opensearch‘ is not writable
chown -R opensearch:opensearch /usr/share/opensearch
systemctl restart opensearch
java.nio.file.AccessDeniedException: /usr/share/opensearch/3333321522907482464.tmp

Seit Version 2.13.0 müssen die Order dem OpenSearch User und Gruppe gehören, siehe https://github.com/opensearch-project/opensearch-build/pull/4043.

chown -R opensearch:opensearch /etc/opensearch/ /usr/share/opensearch/ /var/lib/opensearch/
systemctl restart opensearch

Built on 2025-03-27