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. In der Regel sollte OpenSearch jedem Node die „Anzahl Shards im Index“ geteilt durch „Anzahl Nodes“ zuweisen.

  • 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 2024-11-18