Mehr Performance mit redis als States-DB

Beim Lesen im Forum bin ich seinerzeit immer mal wieder über die Frage gestolpert, wie man ggf. die Performance von ioBroker verbessern könnte. Einige erfahrene Benutzer berichteten davon, dass die (optionale) Umstellung der Art, wie ioBroker die States speichert, eine spürbare Verbesserung der Performance brachte. In diesem Zusammenhang fiel vor allem der Begriff „redis“ sehr häufig. Grund genug für mich, sich das Thema mal aus der Nähe an zu sehen.

Nach einigen Recherchen und der Feststellung, dass es in der Paketverwaltung der Disk Station sogar ein redis-Paket gibt, gab ich redis eine Chance und bin nun davon überzeugt, dass die Umstellung in der Tat, zumindest bei meiner recht großen Installation, einen kleinen Performance-Schub für ioBroker bedeutet.

Im Rahmen dieser Anleitung werde ich erläutern wie man eine redis-DB auf der DS installiert und ioBroker entsprechend anbindet.

Info: Bei redis handelt es sich um eine „In-Memory-Datenbank“, also eine Datenbank die ihre Daten im Arbeitsspeicher eines Systems speichert, mit einer einfachen Schlüssel-Wert-Datenstruktur. Sie gehört damit zu den Nicht-Relationalen-Datenbanken und ist der am weitesten verbreitete Schlüssel-Wert-Speicher. Mehr Informationen zu redis finden sich zum Beispiel hier: redis.io

Ausgangslage

Mit dieser Anleitung baue ich praktisch auf die Ergebnisse meiner ersten Anleitung mit dem Titel „ioBroker unter Docker auf der Synology Disk Station“ auf.
Das Bedeutet ich beziehe mich auf eine ioBroker Installation in einem Docker Container der auf einer synology Disk Station läuft. Dies bedeutet aber nicht, dass die Schritte die ich beschreibe nicht auch analog auf ioBroker Installationen auf anderen Plattformen angewendet werden können.

Bereitstellen von redis

Für die Bereitstellung von redis gibt es eine ganze Reihe an Möglichkeiten. Generell gilt: redis ist völlig unabhängig von ioBroker. Ein eigenständiges Stück Software.
Da ich mich mit meinem ioBroker auf der Synology Disk Station befinde, möchte ich redis natürlich auch in diesem Umfeld bereitstellen. Kurzum, infrage kommen für mich nur die Installation von redis über die Paketverwaltung der DS (über die Paketquelle der SynoCommunity) oder die Installation unter Docker.

Meine Entscheidung fiel auf das Paket der SynoCommunity, da dies am einfachsten zu handhaben ist. Ich denke wie man ein Paket auf der DS installiert muss ich hier nicht weiter ausführen und wie man die zusätzliche Paketquelle der SynoCommunity zum Paketzentrum hinzufügt ist hier beschrieben: SynoCommunity.

Nach der Installation des redis-Pakets sollte dieses in der Regel automatisch starten.

Überprüfen der Funktion von redis

Mit einem kleinen Kommandozeilen Tool kann man einfach die Funktion des redis-Servers testen. Dazu können wir in der Kommandozeile des ioBroker-Containers zuerst einmal das Tool installieren

npm install -g redis-cli

Anschließend lässt sich mit dem Tool eine Verbindung zum Server aufbauen:

rdcli -h [IPderDiskStation]

Die offene Verbindung wird wie folgt angezeigt Der aufgeführte Port ist dabei der Standardport von redis:

[IPderDiskStation]:6379>

Eine Fehlermeldung in der Form “/usr/bin/rdcli: 2: /usr/bin/rdcli: [[: not found” können wir in diesem Szenario einfach ignorieren.

Folgender Dialog lässt nun die Funktion von redis prüfen. Dabei wird zuerst ein PING gesendet, der von redis quittiert wird. Anschließend schreiben wir einen Wert in die Datenbank und lesen ich wieder aus:

[IPderDiskStation]:6379> ping
PONG
[IPderDiskStation]:6379> set test irgendeinwert
OK
[IPderDiskStation]:6379> get test
irgendeinwert
[IPderDiskStation]:6379> quit
OK

Mit STRG+C beendet man das Tool und kehrt zur normalen Kommandozeile zurück. Die redis-Datenbank ist nun einsatzbereit.

ioBroker zur Verwendung von redis konfigurieren

Jetzt bleibt nur noch der letzte Schritt. Die benutzerdefinierte Konfiguration unseres ioBrokers zur Verwendung von redis als States-DB.

Bevor wir konfigurieren müssen wir zuerst einmal iobroker beenden. Dies geht, wie ja bekannt sein sollte in der Kommandozeile des Docker Containers wie folgt:

pkill io

Anschließend führen wir das benutzerdefinierte Setup wie folgt durch:

iobroker setup custom                                                                                               
Type of objects DB [(f)ile, (c)ouch, (r)edis], default [file]: <ENTER>
Host / Unix Socket of objects DB(file), default[127.0.0.1]: <ENTER>
Port of objects DB(file), default[9001]: <ENTER>
Type of states DB [(f)file, (r)edis], default [file]: r
Host / Unix Socket of states DB (redis), default[127.0.0.1]: [IPderDiskStation]
Port of states DB (redis), default[6379]: <ENTER>
Data directory (file), default[../../../iobroker-data/]: <ENTER>
Host name of this machine [iobrokertest]: <ENTER>
creating conf/iobroker.json

Danach können wir ioBroker wieder starten. Am Besten durch einen Neustart des gesamten Containers. Wenn alles geklaptt hat, können wir nach kurzer Zeit wieder auf die Admin-Oberfläche zugreifen. Falls es Probleme gab hilft ein Blick in die Prozesse und das Protokoll des Containers. Aufschluss gibt unter anderem auch folgende Statusabfrage in der Kommandozeile:

iobroker status

Sollte es Probleme mit der Verbindung zur redis-Datenbank geben, bekommt man eine entsprechende Meldung. Ist alles ok, sollte das Resultat “iobroker is running” heißen.

Damit ist die Umstellung von ioBroker auf redis abgeschlossen. Die States werden nun nicht länger in eine Datei, sondern in eine Datenbank im Arbeitsspeicher gespeichert. Dies sorgt vor allem für kürzere Zugriffszeiten und damit, zumindest bei größeren Installationen, eine spürbare Steigerung der Performance.

Wie sind eure Erfahrungen? Ist eine bessere Performance zu merken? Hat die Umstellung auf Anhieb geklappt? Schreibt es gerne in die Kommentare!

MfG,
André

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.

6
Hinterlasse einen Kommentar

avatar
10000
2 Comment threads
4 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
MatthiasUlrichAndréBenni Recent comment authors
  Subscribe  
Benachrichtige mich zu:
Ulrich
Gast
Ulrich

Hallo,
ich konnte den redis-server erfolgreich auf der Synology installieren.
Für eine Datensicherung habe ich den Pfad der dump.rdb gesucht, aber nicht gefunden.
Wo liegen die Daten?

Viele Grüße
Ulrich

Benni
Gast
Benni

auf der 218+ kann ich es nicht installieren!