NEWS
REDIS will be back
-
hey,
habe gerade mein System (multihost with 4 Rechner) auf redis umgestellt, kein Problem damit gehapt, nachdem ich den Thread durchgelesen habe, gute Arbeit, danke.
Vielleicht könnte Bluefox im ersten Post dazunehmen, dass man bei multihost bei redis die ip auf 0.0.0.0 stellen muß, da es sonst gar nicht funkt
-
Allerdings habe ich andere probleme. Alle Scripts werden staendig ausgeführt. Was zu einer überlastung des Systems führt.
Ich konnte keinen Fehler im Log sehen, nur eben, dass die scripts immer wieder neu gestartet wurden.
Ich musste die Sicherung wieder herstellen `
Ich habe für jede Instanz ein Skript zu Erstellung der Textdateien angelegt, gestartet und deaktiviert/gelöscht.Dann habe ich ein neues Skript erstellt, das den überarbeiteten Inhalt der gerade erstellten Textdateien enthält. Das Skript habe ich dann ebenfalls deaktiviert, bzw. gar nicht erst aktiviert. Im Javascript-Editor sieht man ja auch sehr gut, wo es noch Fehler durch Zeichen o.ä. im Code zu bereinigen gibt. Vor allem lange Zeichenketten, wie ganze JSON-Ausgaben oder HTML-Dateien, die eh später zeitgesteuert neu erstellt werden, habe ich raus gelöscht.
Dann, nach dem Neustart von ioBroker, das Skript durch "/" und "/" in Häppchen auskommentiert und so immer wieder gestartet, bis alle States eingelesen waren.
Gruß
Pix
-
Hat einer der Redis Nutzer schon für den Redis Master/Slave aufgesetzt bzw Cluster konfiguriert?
Vor allem bei Multi Host vllt eine gute Anwendung…
Ich habe aktuell nur in mein Backup Skript eingebaut das ein Redis Snapshot erstellt wird und mit gesichert wird.
Ingo F
-
Bei Redis ist Master - Save wirklich Master-Slave. Will sagen, der Slave ist per Default Readonly. Selbst wenn man den Default ändert erfolgt keine Übertragung vom Slave an den Master. Replikation erfolgt bei Redis generell asynchron. Locks gibt es nicht, was zu schönen Änderungsanomalien führen kann.
Cluster dienen zur Leistungssteigerung und HA-Absicherung auf mehrere Nodes. Die Daten werden dabei per Sharding anhand der Hashwerte auf alle Nodes im Cluster verteilt. Damit alle Daten gelesen werden können brauchen alle Clients Verbindungen zu allen Nodes des Clusters.
Wahrscheinlich ist beides nicht das gewünschte Verhalten.
Gesendet von meinem GT-N8000 mit Tapatalk
-
@pix:Ich habe für jede Instanz ein Skript zu Erstellung der Textdateien angelegt, gestartet und deaktiviert/gelöscht.
Dann habe ich ein neues Skript erstellt, das den überarbeiteten Inhalt der gerade erstellten Textdateien enthält. Das Skript habe ich dann ebenfalls deaktiviert, bzw. gar nicht erst aktiviert. Im Javascript-Editor sieht man ja auch sehr gut, wo es noch Fehler durch Zeichen o.ä. im Code zu bereinigen gibt. Vor allem lange Zeichenketten, wie ganze JSON-Ausgaben oder HTML-Dateien, die eh später zeitgesteuert neu erstellt werden, habe ich raus gelöscht. `
Hi,
habs jetzt auch hinbekommen. Irgendwie hatte ich nicht bemerkt, dass die Datei "states" sich mit jeder Ausführung verlängert und nicht ersetzt wird.
Das Programm benutze ich nun in abgeänderter Form (mit Datum und Zeit), um vor dem nächtlichen Backup alle states zu sichern.
vG Looxer
Falls für jemand interessant:
var fs = require('fs'); var now = new Date(); // store current date and time var year = now.getFullYear(); var month = addZero(now.getMonth()+1).zero2; var day = addZero(now.getDate()).zero2; var Thour = addZero(now.getHours()).zero2; var Tmin = addZero(now.getMinutes()).zero2; var Tsec = addZero(now.getSeconds()).zero2; var logdate = day + '.' + month + '.' + year; var logtime = Thour + ':' + Tmin + ':' + Tsec; datei = "/opt/iobroker/states"; // Schedule für die Updates schedule("50 23 * * *", function () { var cacheSelectorState = $('state[state.id=javascript.0.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; var zk = "setState('"+id+"', "+val+");\n"; if(typeof val === "string") zk = "setState('"+id+"', '"+val+"');\n"; fs.appendFileSync(datei + logdate + "-"+ logtime + ".txt", zk); }); }); // --------------------------------------------------------------------------------------- // Funktion zur Erzeugung von 2 oder 3 führenden Nullen für das Datum Format //----------------------------------------------------------------------------------------------------- function addZero(i) { if (i < 10) { j = "00" + i; i = "0" + i; } if (i > 9 && i < 100) { j = "0" + i; } return { 'zero2' : i, 'zero3' : j }; } // Ende Funktion
-
Bei Redis ist Master - Save wirklich Master-Slave. Will sagen, der Slave ist per Default Readonly. Selbst wenn man den Default ändert erfolgt keine Übertragung vom Slave an den Master. Replikation erfolgt bei Redis generell asynchron. Locks gibt es nicht, was zu schönen Änderungsanomalien führen kann.
Cluster dienen zur Leistungssteigerung und HA-Absicherung auf mehrere Nodes. Die Daten werden dabei per Sharding anhand der Hashwerte auf alle Nodes im Cluster verteilt. Damit alle Daten gelesen werden können brauchen alle Clients Verbindungen zu allen Nodes des Clusters.
Wahrscheinlich ist beides nicht das gewünschte Verhalten. `
Naja,
Cluster ist wohl etwas oversized und man braucht einige Rechner um das sauber aufzusetzen. Ebenso sharding ist eher unnötig.
Aber ein Slave ist sinnvoll in meinen Augen:
Redis persistiert in unregelmäßigen Abständen auf Platte. Wenn Redis oder der Host danach abstürzt sind die Daten seit dem letzten persistierten Stand weg … Mit einem Slave auf einem zweiten Host hat man wenigstens den Datenstand. Man kann dann den Stand persistieren und für den Master als initialstand nutzen oder den Slave zum Master machen und iobroker umkonfigurieren den zu benutzen. Ich denke das das sinnvoll ist weil sonst die States in so einem Fall halt pot. nicht aktuell sind. Das könnte ggf. Logiken durcheinanderbringen.
In seltenen Fällen fehlt vllt ein letztes Update eines States aber besser ein Datensatz als viele.
Oder?!
-
Ja. Kann man machen. Hilft nur nicht viel, wenn man die Umschaltung nicht automatisiert bekommt.
Insbesondere die States enthalten ja nur kurzlebige Informationen, die eigentlich schon veraltet sind, wenn die Verbindung zum Service (z b CCU) verloren geht und können einfach aus dem letzten Snapshot und über die Adapter rekonstruiert werden.
Redis selbst ist extrem stabil und ist mir in den letzten Jahren im Produktiveinsatz noch nicht weggeflogen. Nur wenn das ram voll ist oder das System Probleme hat kann es vorkommen. Dann ist aber der js-controller auch weg.
Ein komplette HA Absicherung mit Standby Instanz und z.b. Pacemaker und IP Umzug wäre schön aber alleine für die Haussteuerung zu aufwändig.
Gesendet von meinem SM-G900F mit Tapatalk
-
Da hast du recht. Die Logiken im JavaScript ( z.B. Bei mir die Keymatic Steuerung und so kommt auch durcheinander wenn Ccu Verbindung weg wäre. Aber den letzten Stand der States zu haben falls der Host abtaucht oder es solche Speicherprobleme gibt ist schonmal was wert denke ich.
Ich überlege gerade allgemein wegen ausgallszenarien und so … Vor zwei Wochen ist die fritzbox ausgefallen ... Das fehlende Internet war erträglich, aber ohne Routing ging gar nichts mehr.
Und das home automation ist inzwischen akzeptiert und ganz blöd wenns weg ist. Daher suche ich gerade alle fallback Konzepte zusammen bzw denke sie mir aus
Ingo f
-
Bei mir will iobroker mit Redis gar nicht erst starten:
! TypeError: 2016-09-26 18:07:30.810 error at readableAddChunk (_stream_readable.js:146:16)
! TypeError: 2016-09-26 18:07:30.810 error at Socket.emit (events.js:169:7)
! TypeError: 2016-09-26 18:07:30.810 error at emitOne (events.js:77:13)
! TypeError: 2016-09-26 18:07:30.810 error at Socket. (/opt/iobroker/node_modules/redis/index.js:267:27)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:415:12)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.Parser.returnReply (/opt/iobroker/node_modules/redis/index.js:188:18)
! TypeError: 2016-09-26 18:07:30.810 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:816:9)
! TypeError: 2016-09-26 18:07:30.810 error at normal_reply (/opt/iobroker/node_modules/redis/index.js:714:21)
! TypeError: 2016-09-26 18:07:30.810 error at Command.callback (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:602:49)
! TypeError: 2016-09-26 18:07:30.810 error at /opt/iobroker/node_modules/iobroker.js-controller/lib/objects/objectsInRedis.js:1135:36
! TypeError: 2016-09-26 18:07:30.810 error that._clone is not a function
! uncaught 2016-09-26 18:07:30.800 error exception: that._clone is not a function
! host-odibroker 2016-09-26 18:07:30.739 info InRedisDB connected
! host-odibroker 2016-09-26 18:07:30.730 info States connected to redis 127.0.0.1:6379
! host-odibroker 2016-09-26 18:07:30.611 info ip addresses: 192.168.1.232 2003:c3:e3c1:1600:21e:6ff:fe33:9755 fe80::21e:6ff:fe33:9755
! host-odibroker 2016-09-26 18:07:30.609 info hostname: odibroker
! host-odibroker 2016-09-26 18:07:30.607 info Copyright 2014-2016 bluefox, hobbyquaker
! host-odibroker 2016-09-26 18:07:30.590 info iobroker.js-controller version 0.12.2 js-controller starting
! host-odibroker 2016-09-26 18:07:24.230 info terminated
! host-odibroker 2016-09-26 18:07:24.225 info received SIGTERM
! iobroker 2016-09-26 18:07:23.906 info exit 0
! iobroker 2016-09-26 18:07:23.872 info Starting node restart.js
! host-odibroker 2016-09-26 18:07:23.411 info terminated
! iobroker 2016-09-26 18:07:23.377 info _restartIch hatte es so in diesem thread gelesen, dass ich nicht mehr die git version von iobroker nehmen muss. Oder doch?
Welche Module genau?
****Meine aktiven Module:
Admin: 1.6.3
Host: 0.12.2****
Danke im voraus:
Fitti
-
Bei mir will iobroker mit Redis gar nicht erst starten:
! TypeError: 2016-09-26 18:07:30.810 error at readableAddChunk (_stream_readable.js:146:16)
! TypeError: 2016-09-26 18:07:30.810 error at Socket.emit (events.js:169:7)
! TypeError: 2016-09-26 18:07:30.810 error at emitOne (events.js:77:13)
! TypeError: 2016-09-26 18:07:30.810 error at Socket. (/opt/iobroker/node_modules/redis/index.js:267:27)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:415:12)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.Parser.returnReply (/opt/iobroker/node_modules/redis/index.js:188:18)
! TypeError: 2016-09-26 18:07:30.810 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:816:9)
! TypeError: 2016-09-26 18:07:30.810 error at normal_reply (/opt/iobroker/node_modules/redis/index.js:714:21)
! TypeError: 2016-09-26 18:07:30.810 error at Command.callback (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:602:49)
! TypeError: 2016-09-26 18:07:30.810 error at /opt/iobroker/node_modules/iobroker.js-controller/lib/objects/objectsInRedis.js:1135:36
! TypeError: 2016-09-26 18:07:30.810 error that._clone is not a function
! uncaught 2016-09-26 18:07:30.800 error exception: that._clone is not a function
! host-odibroker 2016-09-26 18:07:30.739 info InRedisDB connected
! host-odibroker 2016-09-26 18:07:30.730 info States connected to redis 127.0.0.1:6379
! host-odibroker 2016-09-26 18:07:30.611 info ip addresses: 192.168.1.232 2003:c3:e3c1:1600:21e:6ff:fe33:9755 fe80::21e:6ff:fe33:9755
! host-odibroker 2016-09-26 18:07:30.609 info hostname: odibroker
! host-odibroker 2016-09-26 18:07:30.607 info Copyright 2014-2016 bluefox, hobbyquaker
! host-odibroker 2016-09-26 18:07:30.590 info iobroker.js-controller version 0.12.2 js-controller starting
! host-odibroker 2016-09-26 18:07:24.230 info terminated
! host-odibroker 2016-09-26 18:07:24.225 info received SIGTERM
! iobroker 2016-09-26 18:07:23.906 info exit 0
! iobroker 2016-09-26 18:07:23.872 info Starting node restart.js
! host-odibroker 2016-09-26 18:07:23.411 info terminated
! iobroker 2016-09-26 18:07:23.377 info _restartIch hatte es so in diesem thread gelesen, dass ich nicht mehr die git version von iobroker nehmen muss. Oder doch?
Welche Module genau?
****Meine aktiven Module:
Admin: 1.6.3
Host: 0.12.2****
Danke im voraus:
Fitti `
Die Objekte gehen leider im Redis noch nicht. Du solltest für Objekte weiter hin "file" benutzen. -
welche node-version?
-
Nodejs 4.2.x …
-
Bei mir will iobroker mit Redis gar nicht erst starten:
! TypeError: 2016-09-26 18:07:30.810 error at readableAddChunk (_stream_readable.js:146:16)
! TypeError: 2016-09-26 18:07:30.810 error at Socket.emit (events.js:169:7)
! TypeError: 2016-09-26 18:07:30.810 error at emitOne (events.js:77:13)
! TypeError: 2016-09-26 18:07:30.810 error at Socket. (/opt/iobroker/node_modules/redis/index.js:267:27)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:415:12)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.Parser.returnReply (/opt/iobroker/node_modules/redis/index.js:188:18)
! TypeError: 2016-09-26 18:07:30.810 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:816:9)
! TypeError: 2016-09-26 18:07:30.810 error at normal_reply (/opt/iobroker/node_modules/redis/index.js:714:21)
! TypeError: 2016-09-26 18:07:30.810 error at Command.callback (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:602:49)
! TypeError: 2016-09-26 18:07:30.810 error at /opt/iobroker/node_modules/iobroker.js-controller/lib/objects/objectsInRedis.js:1135:36
! TypeError: 2016-09-26 18:07:30.810 error that._clone is not a function
! uncaught 2016-09-26 18:07:30.800 error exception: that._clone is not a function
! host-odibroker 2016-09-26 18:07:30.739 info InRedisDB connected
! host-odibroker 2016-09-26 18:07:30.730 info States connected to redis 127.0.0.1:6379
! host-odibroker 2016-09-26 18:07:30.611 info ip addresses: 192.168.1.232 2003:c3:e3c1:1600:21e:6ff:fe33:9755 fe80::21e:6ff:fe33:9755
! host-odibroker 2016-09-26 18:07:30.609 info hostname: odibroker
! host-odibroker 2016-09-26 18:07:30.607 info Copyright 2014-2016 bluefox, hobbyquaker
! host-odibroker 2016-09-26 18:07:30.590 info iobroker.js-controller version 0.12.2 js-controller starting
! host-odibroker 2016-09-26 18:07:24.230 info terminated
! host-odibroker 2016-09-26 18:07:24.225 info received SIGTERM
! iobroker 2016-09-26 18:07:23.906 info exit 0
! iobroker 2016-09-26 18:07:23.872 info Starting node restart.js
! host-odibroker 2016-09-26 18:07:23.411 info terminated
! iobroker 2016-09-26 18:07:23.377 info _restartIch hatte es so in diesem thread gelesen, dass ich nicht mehr die git version von iobroker nehmen muss. Oder doch?
Welche Module genau?
****Meine aktiven Module:
Admin: 1.6.3
Host: 0.12.2****
Danke im voraus:
Fitti
Die Objekte gehen leider im Redis noch nicht. Du solltest für Objekte weiter hin "file" benutzen.
Was ist mit couch? Ist das eine alternative dafür?
-
Also ich nehme Redis nur für States … Für Objects war mir Redis (weil ja Mem-DB und wird nur unregelmäßig persistiert) zu unsicher.
Ich denke auch das Redis daher eher für States gedacht war und nur da getestet ist
-
Bei mir will iobroker mit Redis gar nicht erst starten:
! TypeError: 2016-09-26 18:07:30.810 error at readableAddChunk (_stream_readable.js:146:16)
! TypeError: 2016-09-26 18:07:30.810 error at Socket.emit (events.js:169:7)
! TypeError: 2016-09-26 18:07:30.810 error at emitOne (events.js:77:13)
! TypeError: 2016-09-26 18:07:30.810 error at Socket. (/opt/iobroker/node_modules/redis/index.js:267:27)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:415:12)
! TypeError: 2016-09-26 18:07:30.810 error at JavascriptRedisParser.Parser.returnReply (/opt/iobroker/node_modules/redis/index.js:188:18)
! TypeError: 2016-09-26 18:07:30.810 error at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:816:9)
! TypeError: 2016-09-26 18:07:30.810 error at normal_reply (/opt/iobroker/node_modules/redis/index.js:714:21)
! TypeError: 2016-09-26 18:07:30.810 error at Command.callback (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:602:49)
! TypeError: 2016-09-26 18:07:30.810 error at /opt/iobroker/node_modules/iobroker.js-controller/lib/objects/objectsInRedis.js:1135:36
! TypeError: 2016-09-26 18:07:30.810 error that._clone is not a function
! uncaught 2016-09-26 18:07:30.800 error exception: that._clone is not a function
! host-odibroker 2016-09-26 18:07:30.739 info InRedisDB connected
! host-odibroker 2016-09-26 18:07:30.730 info States connected to redis 127.0.0.1:6379
! host-odibroker 2016-09-26 18:07:30.611 info ip addresses: 192.168.1.232 2003:c3:e3c1:1600:21e:6ff:fe33:9755 fe80::21e:6ff:fe33:9755
! host-odibroker 2016-09-26 18:07:30.609 info hostname: odibroker
! host-odibroker 2016-09-26 18:07:30.607 info Copyright 2014-2016 bluefox, hobbyquaker
! host-odibroker 2016-09-26 18:07:30.590 info iobroker.js-controller version 0.12.2 js-controller starting
! host-odibroker 2016-09-26 18:07:24.230 info terminated
! host-odibroker 2016-09-26 18:07:24.225 info received SIGTERM
! iobroker 2016-09-26 18:07:23.906 info exit 0
! iobroker 2016-09-26 18:07:23.872 info Starting node restart.js
! host-odibroker 2016-09-26 18:07:23.411 info terminated
! iobroker 2016-09-26 18:07:23.377 info _restartIch hatte es so in diesem thread gelesen, dass ich nicht mehr die git version von iobroker nehmen muss. Oder doch?
Welche Module genau?
****Meine aktiven Module:
Admin: 1.6.3
Host: 0.12.2****
Danke im voraus:
Fitti
Die Objekte gehen leider im Redis noch nicht. Du solltest für Objekte weiter hin "file" benutzen.
Was ist mit couch? Ist das eine alternative dafür? `
Couch ist schon dafür, aber ich finde die Zeit nicht, um die features, die in den letzten 2 Jahre eingebaut habe, zu portieren. -
Hallo
Frage: Nutzt die mqtt implementierung auch die redis db?
Ich habe heute die states auf redis umgestellt…
LG
Uwe
-
Wenn DU die States auf Redis umgestellt hast werden alle state-Daten in der Redis gespeichert von allen Adaptern.
Oder auf was gernau ziehlt Deine Frage ab?
-
Ja, das meinte ich.
Ich nutze zur zeit mqtt mit den ESP12 und der ESPEasy firmware.
In Nodered schreibe ich auch in mqtt, obwohl ich das eigentlich gar nicht muss.
Daher stellt sich die Frage wo die Variablen eigentlich am Besten untergebracht sind:
Im iobroker oder unter mqtt?
-
Ja, das meinte ich.
Ich nutze zur zeit mqtt mit den ESP12 und der ESPEasy firmware.
In Nodered schreibe ich auch in mqtt, obwohl ich das eigentlich gar nicht muss.
Daher stellt sich die Frage wo die Variablen eigentlich am Besten untergebracht sind:
Im iobroker oder unter mqtt? `
Im iobroker. So sind die über mqtt und iobroker erreichbar. Und so ist auch gedacht. -
Auch wenn der Thread doch schon etwas älter ist muss ich auch hier einmal mein Lob lassen… Ich habe seit einigen Wochen massive Probleme mit der Performance gehabt und diese durch Redis lösen können!
Daumen hoch!