Zurück zur Startseite

Solr mit Systemd im Userspace Betreiben

Einleitung

Solr ist ein OpenSource Enterprise Suchplatform basierend auf Apache Lucene. Die Hauptmerkmale umfassen Volltextsuche, Hervorhebung, Facetierte Suche, Echtzeitindizierung, dynamisches Clustering, Datenbankintegration und Rich Document (z. B. Word, PDF) indexierung.

Schritt für Schritt Anleitung

In dieser Anleitung zeigen wir wie eine einzelne Solr Instanz im ~/solr Verzeichnis eines Benutzers installiert wird. Diese Instanz kann mehrere sogenannte Cores mit unterschiedlichen Konfigurationen betreiben. Es ist auch möglich mehrere Instanzen von der selben oder unterschiedlichen Versionen zu betreiben. Auf diesen Anwendungsfall gehen wir hier nicht weiter ein. Das vorgehen kann aber daraus abgeleitet werden.

Voraussetzungen

  • Ubuntu 16.04 (Xenial)
  • OpenJDK ist auf dem Server installiert.

Solr aus den Sourcen installieren

Das ~/solr Verzeichnis anlegen

Um alles Solr betreffende zusammen zu halten erstellen wir ein Unterverzeichnis welches alles enthalten wird.

mkdir ~/solr

Solr Downloaden

Wir starten mit dem Download und dem auspacken der gewünschten Solr Version.

export SOLR_VERSION=6.5.0
cd solr
curl -OL http://www-eu.apache.org/dist/lucene/solr/${SOLR_VERSION}/solr-${SOLR_VERSION}.tgz
tar xzf solr-${SOLR_VERSION}.tgz
rm solr-${SOLR_VERSION}.tgz

Instanz default erstellen

Wir erstellen eine Instanz im Unterordner default. Die Solr Instanz weiss nichts von diesem Namen, dies ermöglicht es uns später zusätzliche Instanzen anzulegen falls gewünscht. Um Upgrade zu vereinfachen legen wir einen Symlink an auf die Solr Version welche wir benutzen möchten.

mkdir -p default/{data,logs}
cd default
ln -s ../solr-${SOLR_VERSION} solr
cp -nv solr/server/solr/{solr.xml,zoo.cfg} data/
cp -nv solr/server/resources/log4j.properties solr/bin/solr.in.sh .

systemd User Service einrichten

Durch das anlegen der systemd Service-Templates solr-instance@ können wir die Instanz default als Service solr-instance@default.service ansprechen.

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/solr-instance@.service << EOF
[Unit]
Description=Solr Instance %i of %u

[Service]
WorkingDirectory=%h/solr/%i
ExecStart=/bin/bash solr/bin/solr start -f
ExecStop=/bin/bash solr/bin/solr stop
Environment=SOLR_HOME=%h/solr/%i/data/
Environment=SOLR_LOGS_DIR=%h/solr/%i/logs
EnvironmentFile=-%h/solr/%i/solr.in.sh

[Install]
WantedBy=default.target
EOF

Mit den folgenden Befehlen kann die Solr Instanz gestartet und ihr Zustand überprüft werden.

www-data@server$ systemctl --user enable solr-instance@default.service
Created symlink from /home/www-data/.config/systemd/user/default.target.wants/solr-instance@default.service to /home/www-data/.config/systemd/user/solr-instance@.service.
www-data@server$ systemctl --user start solr-instance@default.service
www-data@server$ systemctl --user status solr-instance@default.service
● solr-instance@demo.service - Solr Instance demo of www-data
   Loaded: loaded (/home/www-data/.config/systemd/user/solr-instance@.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-04-06 07:24:01 CEST; 1s ago
 Main PID: 32403 (java)
   CGroup: /user.slice/user-33.slice/user@33.service/solr\x2dinstance.slice/solr-instance@demo.service
           └─32403 java -server -Xms512m -Xmx512m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGC

Feb 30 07:24:01 server systemd[816]: Started Solr Instance demo of www-data.

Um sicherzustellen das die Instanz beim Booten des Servers gestartet wir muss sie im systemd enabled werden.

www-data@server$ systemctl --user is-enabled solr-instance@default.service
enabled

Einen neuen Core einrichten

Die Cores können im data Verzeichnis nach belieben eingerichtet werden. Die Solr Instanz such beim starten nach Dateien mit dem Namen core.properties und lädt all diese als Cores. Typischerweise hat jeder Core ein eigenes Unterverzeichnis im data Verzeichnis.
Um die Konfiguration von mehreren Cores zu vereinfachen können sogenannte configsets angelegt und ein den Cores referenziert werden. Dadurch muss die Konfiguration nur einmal gepflegt werden für alle Cores die sie verwenden.

Neues configset anlegen

Um ein configset anzulegen wird es nach ~/solr/default/data/configsets kopiert. Viele Solr-Integrationen stellen ein entsprechendes configset zum Download zur Verfügung. Als Beispiel verwenden wir hier das configset der Solr demo.

cd ~/solr/default/data
mkdir -p configsets
cp -r ../solr/server/solr/configsets/*  configsets/

Beispiele für configsets von Solr-Integrationen sind:

Neuen Core anlegen

Um einen neuen Core zu erstellen muss eine core.propertie Datei in einem beliebigen Unterverzeichnis von ~/solr/default/data erstellt werden. Im folgenden Beispiel wird ein Core mit dem Namen core1 welcher das basic_configs configset verwendet erstellt.

cd ~/solr/default/data
mkdir core1
cat > core1/core.properties << EOF
name=core1
configset=basic_configs
dataDir=./data
EOF

Um die Anwender beim erstellen der Cores zu unterstützen liefern Solr-Integrationen entsprechende Konfigurationen mit. Für die zuvor erwähnten Integrationen können diese ebenfalls im git gefunden werden.

Konfiguration anpassen

Das Solr start Script verwendet verschiedene Environment Variablen um das Verhalten und die Konfiguration zu steuern. Die menge des verfügbaren Speichers wie auch der Port auf dem Solr horcht werden so gesteuert.

Die Datei solr.in.sh enthält eine liste der verfügbaren Variablen mit einigen Beispielen. Diese Datei wird beim Starten von systemd eingelesen. Diese Datei kann den eigenen Bedürfnissen angepasst werden. Durch einen neustart von Solr werden diese Änderungen dann aktiv.

Um den Port zu verändern kann der folgende Teil von solr.in.sh angepasst werden,

# Sets the port Solr binds to, default is 8983
#SOLR_PORT=8983

so dass es danach folgendermassen aussieht.

# Sets the port Solr binds to, default is 8983
SOLR_PORT=8984

Nach einem Neustart horcht Solr nun auf Port 8984 und nicht mehr auf 8983.

Haben Sie die gewünschten Informationen nicht gefunden?

Kontaktieren Sie unseren Support:

+41 44 637 40 40 support@nine.ch