NEWS
Redis in ioBroker - Überblick
-
@higginsd ja klar wenn du Docker hast dann mach nen zweiten sentinel Container auf dem gleiche Host. Ist doch faktisch das gleiche was ich oben geschrieben hab ;-))
-
Redis und Redis-Sentinel mit Docker - etwas tricky! Das Problem ist das NATing im Container. Sentinel sucht sich IP-Adressen über HELOs zusammen und das geht schief, wenn man wie bei Docker NATing hat. Denn dann wird die interne IP des Netzes im Container (irgendwas mit 17.0.x.x) an Sentinel geliefert.
Ok, die einfache Lösung ist es, den Container mit "--net=host" zu starten/bauen. Das funktioniert aber NICHT mit Docker auf MacOS, denn dann sind die Ports außerhalb des Macs (Docker Host) nicht mehr zugreifbar. Irgendein bekanntes, aber ungelöstes Problem mit dem dahinter liegendem NATing der Docker Linux-VM auf MacOS.
Abhilfe: für jeden Sentinel Host in der sentinel.conf die Parameter "sentinel announce-ip X.X.X.X" und "sentinel announce-port 26379" setzen, dabei X.X.X.X auf die eigene IP setzen. Also insbesondere im Sentinel Container auf dem Docker Host!
Ferner: damit ein Redis Master in einem Docker Container die IPs seiner verbundenen Slaves richtig erkennt, muss man in jedem Slave (besser auch im Master, wenn man Sentinel später verwenden will) die Parameter "replica-announce-ip X.X.X.X" und "replica-announce-port 6379" setzen. Dabei ist X.X.X.X wieder die eigene IP. Danach erkennt ein Redis Mster in einem Docker Container auch korrekt, mit welchen IPs seine Slaves verbunden sind.
Bisher läuft es bei mir mit 3 Redis Hosts und Sentinel.
-
@higginsd wow Puhh. Interessant. Danke für deine Infos. Hilft bestimmt anderen. Läuft bei mir in lxc Containern im proxmox Cluster.
-
Was mich ja jetzt umtreibt, ich mir aber nicht selber beantworten kann, weil ich mich noch zu wenig mit der Datenhaltung in iobroker befasst habe.
Ich nutze iobroker mit einem Master (auf Raspi mit SSD) und 6 Slaves. Wenn jetzt ein Slave ausfällt, verteile ich vom Master einfach die Adapter-Instanzen per Hand schnell auf andere Slaves und alles läuft wieder.
Mein persönlicher Worst-case: der Master fällt aus.
Frage: alle meine iobroker Daten (states und objects) sind ja sicher in meinem Redis Sentinel. Wenn jetzt der Master-Pi ausfällt, reicht es dann, einfach eine weitere iobroker Instanz als Master zu konfigurieren und mit dem Redis Sentinel zu verbinden? Sind dann alle installierten Adapter-Instanzen wieder auf dem neuen Master vorhanden und laufen? Alle meine JS-Scripte wieder da und laufen?
-
Ok, laaaangsam
Die Daten sind nicht im Redis-Sentinel!! Der Sentinel ist ein Zusatzprozess der alle deine Redis Hosts überwacht. Den Master und den Slave. Wenn jetzt der Redis Master ausfällt erkennt der Sentinel das und alle Sentinels stimmen für einen neuen Redis-master ab und das wird dann umgesetzt. Die Redis-Sentinels sorgen dann dafür das einer der Redis-Slaves zum neuen Master wird. Das heisst aus reiner DB Sicht hast Du jetzt eine hochverfügbare DB (so lange >50% der Sentinels da sind),
Daher bitte wenn Du das nutzt auch über iob Custom bei jedem ioBroker Host die Konfig der DB ändern: Als IP kommt die (komma getrennte) Liste aller (!!) Sentinel IPs rein. Bei Port der Sentinel port. Dann verbinden sich ab dann die Hots und Adapter zuerst zu irgendeinem Sentry und erfahren so welcher Redis gerade der Master ist und verbinden sich dann dorthin.
Ab jetzt sind alle ioBroker gleichberechtigt weil sie alle zum "richtigen" Redis Server verbinden können mit der Hilfe der Sentinels.
Wenn dir jetzt ein Host ausfällt wo auch ioBroker drauf läuft sind erstmal nur die Instanzen weg die dort waren. Du kannst also jetzt auf einen der anderen Hosts einloggen und die instanzen auf die anderen iobroker hosts verschieben (geht per CLI, oder auch indem du einfach pro iobroker host ne admin instanz machst die du dann bei bedarf einschaltest, dann haste auf der IP deine UI).
probleme mit dem "instanzen verschieben" machen nur adapter die ggf lokal extra Daten liegen haben - also zB "history" weil da die ganzen Datenfiles auf dem Host liegen oder andere Fälle oder falls es um USB sticks geht oder sowas.
-
Ja, schon klar daß die Daten im Redis liegen und die Sentinel clients nur die Redis Master/Slaves überwachen.
Und natürlich habe ich auf allen iobroker auch das custom setup mit der Liste der Sentinel Hosts durchgeführt.
Mein Punkt ist: ich habe die iobroker Adapter Installs nur auf dem Master gemacht, auf den Slaves nur jeweils den Backup Adapter und den JS Adapter. Instanzen verschieben auf Slaves mache ich über den Master.
Wenn ich mich auf 8081 zu einem Slave verbinde, sehe ich dort in der Oberfläche auch nur die Instanzen von Backup und JS.
Ich muss also einfach mal versuchen, den Master abzuschalten und einen weiteren iobroker als Master zu konfigurieren und dann zu starten. In der Hoffnung, dass er mir dann alle meine Adapter Instanzen anzeigt.
Das wäre dann ein einfaches Fail over für den Ausfall des Masters.
-
@higginsd Achtung Wording!! KEINER der ioBroker "hots" ist jetztnich der Master weil die Datenbank der Master ist wenn Objekte und States im Redis liegen.
und in jedem Admin kannst Du unter Adapter oben im Header den Host umschalten ... jeder Admin kann immer alle Hosts verwalten. Und unter "Instanzen" solltest Du alle Instanzen von allen Hosts sehen
-
Hi! Danke für den Hinweis! Ich habe es ausprobiert und es funktioniert tatsächlich. Man sollte nur auf allen iobroker Instanzen einen Admin Adapter installiert haben.
Meine Zusammenfassung: mit Redis und Redis Sentinel habe ich eine Sorge weniger bei ioBroker.
Danke für den Thread hier und die Hilfe!
-
Hi,
ich habe jezt auch mal auf redis für die States umgestellt, allerdings erhalte ich danach vom javascript Adapter Fehlermeldungen:
javascript.0 2023-01-27 12:39:10.004 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.004 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.004 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.004 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:15:95) javascript.0 2023-01-27 12:39:10.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:14:95) javascript.0 2023-01-27 12:39:10.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:13:191) javascript.0 2023-01-27 12:39:10.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.002 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.002 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:13:115) javascript.0 2023-01-27 12:39:10.002 warn getState "0_userdata.0.Stromverbrauch.Kosten_Grundpreis" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.002 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.002 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.002 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.002 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.002 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.002 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.002 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:12:141) javascript.0 2023-01-27 12:39:10.002 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_Abrechnungsbeginn" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.002 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.002 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.002 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.002 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.002 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.002 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.002 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:11:121) javascript.0 2023-01-27 12:39:10.002 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_Monatsanfang" not found (3) states[id]=null javascript.0 2023-01-27 12:39:10.002 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:10.001 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:10.001 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:10.001 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:10.001 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:10.001 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:10.001 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:9:121) javascript.0 2023-01-27 12:39:10.000 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_0:00" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.004 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.004 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.004 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.004 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.004 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.004 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.004 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:15:95) javascript.0 2023-01-27 12:39:00.004 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.004 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.004 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.004 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.004 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.004 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.004 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:14:95) javascript.0 2023-01-27 12:39:00.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:13:191) javascript.0 2023-01-27 12:39:00.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_kWh_in_Euro" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:13:115) javascript.0 2023-01-27 12:39:00.003 warn getState "0_userdata.0.Stromverbrauch.Kosten_Grundpreis" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:12:141) javascript.0 2023-01-27 12:39:00.003 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_Abrechnungsbeginn" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.003 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.003 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.003 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.003 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.003 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:11:121) javascript.0 2023-01-27 12:39:00.002 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_Monatsanfang" not found (3) states[id]=null javascript.0 2023-01-27 12:39:00.002 warn at processTimers (node:internal/timers:502:7) javascript.0 2023-01-27 12:39:00.002 warn at listOnTimeout (node:internal/timers:559:17) javascript.0 2023-01-27 12:39:00.002 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2023-01-27 12:39:00.002 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2023-01-27 12:39:00.002 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2023-01-27 12:39:00.002 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) javascript.0 2023-01-27 12:39:00.002 warn at Object.<anonymous> (script.js.common.Stromverbrauch_Berechnung:9:121) javascript.0 2023-01-27 12:39:00.002 warn getState "0_userdata.0.Stromverbrauch.Zählerstand_0:00" not found (3) states[id]=null
-
@fir3drag0n Umgestellt? Auch mit Datenmigration? Weil sonst hast Du halt keine State werte es sei denn sie werden mindestens einmal gesetzt
-
@apollon77 Danke für diese umfassende Info, habe alles mit interesse gelesen und versuche gerade diese Info auf meinen Anwendungfall zu übertragen.
Ich betreibe einen Iobroker Master z.Z. mit file/file also default. Einen Slave auch default. Beide im Docker, das läuft grundsätzlich gut. Ich hatte das Problem das der Master ständig abgeraucht ist und objekts.json und states.json hin waren. Das sollte ja bei redis nicht mehr passieren. Daher die Idee beides umzustellen.
Jetzt ist es aber so das der Slave auf einem durch VPN angebundenen Site steht. Das bedeutet jedes mal wenn der Tunnel zusammen bricht muss der Slave Container neu gestartet werden, und die Daten die er in der Zwischenzeit gesammelt hat sind weg.
Daher denke ich über sentinel nach. Ich würde also auf beiden Hosts zusätzlich einen Sentinel/redis container installieren. Auf dem Mastersite betreibe ich noch eine Synology NAS mit Raid und Backup. Diese schaltet sich aber Nachts ab. Hier würde ich gerne sichern. Hier läuft jedoch kein Docker.
Den dritten Sentinel könnte ich jedoch als zusätzlichen Container auf dem Master-Host installieren. Aber ich fürchte das hilft mir nicht wenn der Tunnel zusammen bricht. Der Master-Site wäre zwar save aber die Slave-Daten wären weiterhin verloren.
Wenn jemand eine Idee hat die einen zeitweiligen Ausfall der VPN Verbindung tolleriert, dann bin ich ganz gespannt.
VG Quaco
-
@quaco sagte in Redis in ioBroker - Überblick:
Ich hatte das Problem das der Master ständig abgeraucht ist und objekts.json und states.json hin waren. Das sollte ja bei redis nicht mehr passieren
Naja der erste Schritt wäre auf jsonl/jsonl zu gehen als DB weil die haben wir genau wegen sowas gebaut. AB controller 4.0.24 ist da alles feinstens. Da brauxchts erstmal keinen Redis. Es sei denn du hast sonstige Gründe dafür
Aber ich fürchte das hilft mir nicht wenn der Tunnel zusammen bricht. Der Master-Site wäre zwar save aber die Slave-Daten wären weiterhin verloren.
Exakt. Und in deinem Fall wird durch den Sentinel dann die Seite bevorzugt wo die 2 Sentinels stehen.
Wenn jemand eine Idee hat die einen zeitweiligen Ausfall der VPN Verbindung tolleriert, dann bin ich ganz gespannt.
Es gibt im Zuge der HA Überleitungen, wo Redis und Sentinel dann seine stärken ausspielen, am Ende den plan wenn ein Host als "offline" erkannt wird das dann seine Instanzen auf der anderen Seite neu gestartet werden und so "weiterlaufen". Wenn die jetzt aber "da drüben" Laufen weil Sie Daten sammeln die nur dort existieren hilft dir das nicht.
Wenn es NUR um Daten gibt die zB in einer InfluxDB landen dann könnte man folgendes überlegen (aber ja geht aktuell auch NUR mit InfluxDB): Lege für jede seite eine InfluxDB instanz an die auf die gleiche InfluxDB connecten auf der Master-Seite. Jetzt konfigurierst Du das Datenlogging für die Adapterinstanzen je nachdem wo Sie laufen.
Falls jetzt VPN wegbricht dann verliert die Influxdb Instanz auf Slave Seite die Verbindung und puffert alle Daten im RAM bis die Verbindung wieder steht und schiebt Sie dann rüber. Logik-Seitig hilft das natürlich nicht und am Ende ist es RAM limitiert was die Ausfalldauer angeht.
Hilft das? (Falls wir das weiter Diskutieren bitte neuen Thread öffnen). -
Hallo,
ich betreibe schon länger ein redis/redis System.
Wie komm ich in diesem Fall eine die vis.0 Files?
Diese liegen ja sonst unter: /opt/iobroker/iobroker-data/files/vis.0/.. -
-
@ro75
Ich würde gerne einige Ordner hin und her kopieren.
Es scheint, als wenn ich über diesen Weg, der am Anfang eine sehr lange Ladezeit hat, nur Sachen löschen, hochladen oder Dateien runterladen könnte - ganze Ordner sind nicht möglich.
Kommen ich über SFTP auch zu den Dateien ? -
@e-i-k-e sagte in Redis in ioBroker - Überblick:
Kommen ich über SFTP auch zu den Dateien ?
Nein. Ich "synchronisiere" etwas ein bis zweimal im Jahr die Redis-DB mit dem Filesystem. Dazu schalte ich von Redis auf JSONL um (custom setup). Danach habe ich auf der Festplatte dann wieder alles aktuell. Wenn das erledigt, wieder zurück auf Redis.
Ja, das ist keine elegante Lösung - aber was anderes ist mir bisher nicht bekannt.
Ro75.
-
@e-i-k-e Du kannst mal schauen was ggf per iob cli geht ... aber bisher gabs solche Usecases nicht so wirklich
-
@apollon77 sagte in Redis in ioBroker - Überblick:
Redis FAQ
1. Brauche ich Redis für meinen ioBroker oder nicht?
Für alle üblichen Installationen reichen normalerweise die ioBroker-eigenen Datenbanken vollkommen aus! Erst wenn der js-controller dauerhaft 50-70% oder mehr CPU braucht und sich das System gleichzeitig träge anfühlt kann es Sinn machen sich mit dem Thema Redis zu beschäftigen. Alternativ wird es nötig wenn man ein hochverfügbares ioBroker System anstrebt, aber dazu sich noch einige Dinge mehr nötig.2. Wie finde ich heraus ob ich Redis nutze oder nicht?
Ein Aufruf voniobroker status
zeigt an welcher Datenbanktyp für die States- und Objects-Datenbanken verwendet werden. "file" bedeutet das die ioBroker eigenen Datenbanken genutzt werden. "redis" bedeutet das ein Redis im Einsatz ist.Hallo,
ich habe heute in meiner Info Instanz / Übersicht den Hinweis bekommen:
Empfehlung: Migration auf Redis DB Ihre Datenbank speichert mehr als 15.000 Objekte. Die Migration auf Redis wird für größere Installationen performanter sein.
Aktuell sieht mein System (kein Master/Slave - nur eine VM auf Proxmox) so aus:
pi@iobroker:~$ iobroker status iobroker is running on this host. Objects type: jsonl States type: redis
Ich würde mich nach wie vor als geübten Anfänger bezeichnen und bekomme ein ziemlich mulmiges Gefühl vor einer Umstellung, da ich viel zu wenig in diesem Thread verstehe. Muss ich ich was tun?
-
Schieb mal ein
iob diag
(komplett) in code tags verpackt nach. -
@kiste01 Am Ende schau mal was dir ein "top" sagt wenn du den js-controller so ein bissl beobachtest ... wieviel CPU braucht der so?