NEWS
Fragen/Probleme Redis (Sentinel)
-
Guten Morgen Zusammen!
Ich hatte meine iobroker Installation (1 Master und 5 Slaves) vor rund 1,5 Jahren auf Redis Sentinel (mit 3 Nodes) umgestellt.
Bis letzte Woche Freitag lief die Geschichte stabil, schnell und unauffällig ohne Ausfälle.
Am Freitag fiel mir auf, dass mein iobroker mehrfach pro Stunde für ein paar Minuten "hängen" blieb. Eine Untersuchung ergab dann, dass der Redis Master regelmäßig kommentarlos abgestürzt ist. Einer der Slaves hat dann versucht zu übernehmen. Da der Master im Docker läuft, wurde er automatisch restartet. Dies hat dann aber aufgrund der riesigen dump.rdb (15GB!) 90 Sekunden gedauert und dabei "hing" ioBroker. Anschließend hat einer der Slaves eine komplette Neu-Übertragung der Redis Daten (15GB!) vom Master angefordert und ist dabei gescheitert.
Dann ging das Spiel wieder von vorne los...
Meine Lösung: ich habe jetzt erst einmal auf JSONL zurück umgestellt. Das war zwar auch nicht smooth und hat mich viel Schweiß und Zeit gekostet, in der ich mehrmals an dem Punkt war, dass ich beinahe meine komplette Installation verloren habe. Backups und viel Gefummel haben mich aber gerettet.
Jetzt meine Fragen...
a) warum wird die Redis DB so riesig? Wird da nicht regelmäßig geflusht und alte States Einträge und anderer Garbage gelöscht?
b) trotz Umstellung auf JSONL motzt der iobroker Master, dass er keine Sentinels finden konnte, wenn ich Sentinel auf allen 3 Nodes runterfahre.
Warum ist das so?c) meine Slaves verbinden sich nicht mehr (bis auf einen komischerweise). Auf dem Master ist Multihost dauerhaft enabled, aber ein Multihost connect oder Scan sagt, dass kein Multihost Master im LAN gefunden werden kann.
Gestern habe ich festgestellt, dass sich ein weiterer Slave nach Reparatur (Löschen der dump.rdb!) des Sentinel mit dem Master verbunden hat. Interessanterweise ist das so ein Test-Slave in Docker, den ich bisher gar nicht auf JSONL umgestellt habe. Er läuft also über Redis und kann sich plötzlich zum Master verbinden! Der auf JSONL läuft...Ich habe schwer den Eindruck, dass man die Redis-Geister, die man rief, so ohne Weiteres nicht mehr los wird.
Ob ich wieder auf Redis Sentinel zurück umstelle weiß ich nicht. Die Geschichte mit der ständig wachsenden Datenbank unter Redis stört mich immens. Da ist die nächste Katastrophe in ein paar Monaten vorprogrammiert.
Wer hat Langfristerfahrungen mit redis und kann mir u.U. helfen?
Viele Grüße
DirkP.S.: Lesson learned - mein 0_userdata.0 Bereich war komplett weg, also alle selbstangelegten Objects. Das wird auch nirgendwo mitgesichert. Ich konnte ihn aus den JSON-Scripten rekonstruieren und habe jetzt ein Script, welches den Bereich komplett neu anlegt. Für den Fall der Fälle. Sollte man so machen. Oder die Userdata Objekte im JS, welches sie benutzt, einmal initial anlegen.
-
15 GB alder schwede.. was hast du an objects und states ??
meine ist paar MB gross..
da stimmt was nicht .. ist aber schwierieg zu sagen was..
Wird da nicht regelmäßig geflusht und alte States Einträge und anderer Garbage gelöscht?
Redis DB ist eine in Memory DB.. die wird in RAM gehalten und ab und an ein dump file gezogen damit die Daten nicht verloren gehen.
solltest dich mal mit der Funktionsweise einer Redis auseinander setzten..trotz Umstellung auf JSONL motzt der iobroker Master, dass er keine Sentinels finden konnte, wenn ich Sentinel auf allen 3 Nodes runterfahre. Warum ist das so?
dann hast du was falsch gemacht .. was kein Plan...
meine Slaves verbinden sich nicht mehr
mit einem eintrag im LOG ???? bestimmt
Wer hat Langfristerfahrungen mit redis und kann mir u.U. helfen?
ja aber das ist nicht mal eben so...
-
Zunächst mal danke für Deine Antwort!
Ich weiß, daß Redis eine InMemory-DB ist. Wie oft das Dump-File gesichert wird, habe ich in der Config-Datei konfiguriert.
Mir ist auch klar, daß 15GB ein irrer Wert sind, deswegen ja meine Fragen und mein Post hier. Ich bin davon ausgegangen, daß Redis immer den aktuellen Stand aller States und Objects im Speicher hält und dann nach einer gewissen Zeit bzw. Anzahl Änderungen das dump.rdb erstellt.
Bei mir sind aber scheinbar irgendwelche Altdaten (?) im Memory hängen geblieben und das hat sich dann auf 15GB hochgeschaukelt.
Die aktuellen Größen meiner objects.jsonl: 16MB und meiner states.jsonl: 5,7MB. Ich denke mit diesen Werten sollte Redis vernünftig umgehen können.
EDIT: habe gerade nachgesehen. Das dump.rdb ist mittlerweile wieder auf 307MB (!!) angestiegen, obwohl redis/sentinel gar nichts macht, sondern nur so vor sich hin läuft. Das kann oder darf doch nicht sein?!?
Dazu kommt, daß mein Sentinel-Master regelmäßig alle paar Stunden in den Tilt-Mode fällt (Meldung: +tilt #tilt mode entered). Keine Ahnung, was das ist und warum das passiert. Kannst Du mir bitt erklären, was dieser Tilt-Modus bedeutet?
Und wie meinst Du das "mit einem eintrag im LOG ???? bestimmt" ? Meine Slaves werden im Master ausgegraut, also als nicht verbunden, dargestellt. Ein "iobroker multihost browse" auf den Slaves ergibt: "No Multihost server found. ..." Der ist alledings sehr wohl aktiv, siehe die iobroker.json meines Masters:
"multihostService": {
"enabled": true,
"secure": true,
"password": "$/aes-192-cbc:XXXXXX", (censored)
"persist": true
},Die Slaves sind alle per setup custom auf JSONL mit der IP des Masters und den Default-Ports 9000 und 9001 umgestellt worden.
-
@higginsd sagte in Fragen/Probleme Redis (Sentinel):
No Multihost server found
das ist normal im docker..
welche redis version hast du installiert ??
schon mal im redis LOG nachgeschaut ...
hast du die redis.cfg untereinander abgeglichen??ich habe
und meine object redis ist 450 mb gross
die states nochmal 6 mb grossalso stimmt gewaltig bei dir was nicht.. und nein es kann nix hängenbleiben.. vor allem wenn auf redis nicht zugegriffen wird darf diese nicht ansteigen..
tilt mode ist hier beschrieben
https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/#tilt-modewas sagt den
redis-cli -p 26379 info sentinel
auf jeden node
sind die Daten passend zueinandermit
redis-cli info replication
kannst du schauen welcher node gerade der master ist und welcher slave
der der master ist liefert dir weitere informationen zum anderen slaves -
@arteck said in Fragen/Probleme Redis (Sentinel):
redis-cli info replication
Ok, danke.
Habe ich alles gecheckt, passt soweit. Das dump.rdb wird auch tatsächlich nicht größer, sondern bleibt bei 307MB.
Ich habe 17829 States und 17528 Objects.
Ich riskiere es und stelle mal auf Sentinel zurück. Dann werde ich mir einen Watchdog einrichten, der die Größe des dump.rdb im Auge behält.
-
@arteck
So, Ok, kleines Update. Die Zurück-Umstellung auf Redis/Sentinel war erfolgreich, alle States und Objects sind da und - alle ioBroker-Slaves sind wieder vom Master aus steuerbar und verbunden!Die dump.rdb ist nur um ein paar MB gewachsen durch die Umstellung.
Insofern alles super, ich laufe wieder! Danke!
Ah, doch noch mein Fazit, falls hier jemand mitliest und eventuell muss das als Bug in den Entwicklungspfad von ioBroker: wenn man einmal eine ioBroker Multihost Umgebung auf Redis/Sentinel umgestellt hat, sind die ioBroker Slaves nach der Rück-Umstellung auf JSONL NICHT mehr im ioBroker Cluster verfügbar für den Master!
Das ist m.E. sehr unschön.
Und beobachtet das Verhalten eures Sentinel sorgfältig. Falls die Datenmengen plötzlich ansteigen, lauft ihr in echte Probleme mit Full-Replica Anfragen usw.
-
@higginsd sagte in Fragen/Probleme Redis (Sentinel):
sind die ioBroker Slaves nach der Rück-Umstellung auf JSONL NICHT mehr im ioBroker Cluster verfügbar für den Master!
doch doch.. du musst nur dann alles manuell umstellen..
-
@arteck
Das hatte ich natürlich auch getan - leider ohne Erfolg. Die Slaves waren vom Master aus nicht mehr zugreifbar, also man konnte keine Instanzen auf einen Slave verschieben usw.