IOBroker´s Schreibvolumen reduzieren

Der IOBroker ist eine coole Software um die vielfältigsten Systeme zu vereinen. Dazu rufen Adapter die Daten ab und stellen Kommandos zum steuern bereit. Die Daten werden dabei hierarisch gespeichert. Die Persistierung ist dabei sehr simple. Das Datenobjekt wird als JSON auf die Platte geschrieben. Bei vielen tausend Datenpunkten wird diese Datei aber recht groß und viele Schreibvorgänge erzeugen „Traffic“.

IOBroker´s Schreibvolumen reduzierenDas wäre nicht unbedingt das Problem, meine NVME kann das locker ab. Aber was ich in den Statistiken dann gesehen habe ich das Schreibvolumen auf die Platte:

IOBroker´s Schreibvolumen reduzierenUnd Schreibvorgänge sind nicht gut für die Lebensdauer der Festwertspeicher.
Also ging ich auf Suche und sah, dass ioBroker zyklich die objects.json speichert die 50MB umfasste. Mittels dem Programm iotop konnte man in der kumulierenden Ansicht sehen, dass schnell GigaBytes an Daten zusammen kommen.

Die Lösung

Eine Möglichkeit wäre natürlich ein träges Dateisystem was als Cache fungiert. Aber besser ist das „Backend“ vom IOBroker zu ändern. Das kann man umstellen auf CouchDB oder auch redis. 

Meine Wahl fiel auf redis da es „Leichtgewichtiger“ ist. Was ioBroker nur leider noch nicht kann bzw. ich noch nicht gefunden habe, ist die Möglichkeit zur Authentifizierung gegenüber redis. Auth per Token geht leider nicht. Da muss ich mal noch forschen. Gerade für den Multihostbetrieb brauch man eine geschützte Datenbank.

Die Umstellung

Installation redis

$ sudo apt update 
$ sudo apt install redis-server

Durch die Problematik mit der Auth empfiehlt sich eine Installation auf der ioBroker Maschine. 

Redis ist in dem Moment noch nicht „systemverwaltet“ das sollte man in der /etc/redis/redis.conf anpassen:

IOBroker´s Schreibvolumen reduzieren

sudo systemctl restart redis.service

Danach kann man den Status abfragen:

sudo systemctl status redis

Jetzt kann man testen:IOBroker´s Schreibvolumen reduzierenUmstellung ioBroker

Als ersten muss man ioBroker mit stop beenden. Man kann auch mit „pkill io“ alles schnell beenden 🙂

dann startet man das custom setup und trägt die Daten ein

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

Es folgt die Migration von File auf redis. Mit den ganzen Dateien kann das schon 10min dauern bei größeren Installationen.

Danach den iobroker wieder mit start starten und mit iobroker status kontrollieren ob alles läuft:

IOBroker´s Schreibvolumen reduzieren

Im Redis Client kann man mit „keys *“ sich auch alle Keys auflisten lassen die es gibt. Bei mir etwas über 150.000 – das ist schon Heftig

Endresultat

Was hat´s nun gebracht?

IOBroker´s Schreibvolumen reduzierenDie Schreibvorgänge sind erstmal massiv weniger geworden – Ziel erreicht. Aber auch die CPU Last hat sich gebessert:

IOBroker´s Schreibvolumen reduzieren

Der Disk IO ist fast auf 0, dafür mehr Net IO und RAM Auslastung ist auch etwas gesunken am ioBroker.

Auf dem VM Host sieht man „etwas“ weniger CPU – aber der redis benötigt natürlich auch etwas CPU Leistung. Aber dadurch, dass die Schreibvorgänge auf die NVME nun drastich weniger sind ist das Ziel erreicht.

Fazit

Ich denke mal, dass auch viele Raspberry Pi Besitzer auf redis als Backend umschalten sollten um die SD Karte zu entlasten. In meinem Beispiel wurden im Monat Mai 10TB an Daten geschrieben – sicher nicht alles der ioBroker aber ganz bestimmt ein Großteil.

Hinweise / Links:

  • Redis selbst speichert die Daten auch (Siehe „save“ in der config)
  • IOBroker speichert (backup) weiter die Daten – aber nicht mehr so oft.
  • redis Installieren => Link
  • Redis im Bereich Multihost in der IoBroker Doku Link
IOBroker´s Schreibvolumen reduzieren

Über den Autor Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.

Über Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.
Dieser Beitrag wurde unter Heimautomatisierung abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.