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
# update the Xms and Xmx settings with half of the installed system memory
-Xms3g
-Xmx3g
Tipp
Nach der Installation kann man sich so die 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:
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.
# Bind OpenSearch to the correct network interface. Use 0.0.0.0
# to include all available interfaces or specify an IP address
# assigned to a specific interface.
network.host: 0.0.0.0
In den Default-Einstellungen erwartet OpenSearch Log-Einträge per HTTPS auf Port 9200. Wer das abschalten möchte:
# disable HTTPS
plugins.security.ssl.http.enabled: false
Ausserdem ist eine Authentifizierung fällig. Wer das ganze Security-Thema abschalten möchte:
# If you previously disabled the Security plugin in opensearch.yml,
# be sure to re-enable it. Otherwise you can skip this setting.
plugins.security.disabled: false
Bemerkung
So wird Security konfiguriert: https://opensearch.org/docs/latest/security/configuration/index/
Single-Node? Dann das:
# Unless you have already configured a cluster, you should set
# discovery.type to single-node, or the bootstrap checks will
# fail when you try to start the service.
discovery.type: single-node
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
curl http://localhost:9200 -u 'admin:<custom-admin-password>'
# 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-07-14