NEWS
REDIS will be back
-
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 Copyright2014-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 Copyright2014-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 Copyright2014-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 Copyright2014-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!
-
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! `
Danke dir für den Push redis Stand auf meiner Liste Mal zu probieren aber total verschlafen jetzt habe ich wieder was zu tun am Wochenende.
Aus deinem post lese ich Performance boost, wienäussert sich das bei dir und wieviele states/objecten hast du?
–-----------------------
Send from mobile device
-
Hallo Dutch,
ich hatte bei der (Wieder-) Einführung von Redis auch deutliche Performancegewinne bemerkt, finde aber meine Posts dazu nicht mehr (zumindest nicht in diesem Thread)
Die States werden damit in einer schnellen Datenbank abgelegt und müssen nicht aus einer (json?) Datei geparst werden.
Gruß
Rainer
-
Naja, so schlimm ists nicht. Die JSON-Datei ist nur die Speicherform. Die Daten liegen im Speicher, aber natürlich ist eine eigene "Memory-DB" vllt nicht ganz so performant wie Redis vor allem bei Subscribes und so.
Ansonsten wird das JSON-File halt alle x Sekunden auf Platte gesichert was durchaus I/O kostet.
Aber bei Redis muss man auch aufpassen das man ADF nutzt o.ä. sonst ist im zweifel bei einem Restart alles weg
-
hmm wird wohl an mir liegen….
neu installation von iobroker auf ubuntu mit nodejs 6 und redis, iobroker einmal gestartet ohne redis danach umgeschaltet (redis vorher natuerlich installiert.
Iobroker admin nicht erreicht, commando iobroker status sagt running....
log:
2017-07-15 23:24:39.933 - ^[[32minfo^[[39m: iobroker _restart 2017-07-15 23:24:39.941 - ^[[32minfo^[[39m: host.HomeMaster terminated 2017-07-15 23:24:40.181 - ^[[32minfo^[[39m: iobroker Starting node restart.js 2017-07-15 23:24:40.188 - ^[[32minfo^[[39m: iobroker exit 0 2017-07-15 23:24:40.333 - ^[[32minfo^[[39m: host.HomeMaster received SIGTERM 2017-07-15 23:24:40.334 - ^[[32minfo^[[39m: host.HomeMaster terminated 2017-07-15 23:24:45.707 - ^[[32minfo^[[39m: host.HomeMaster iobroker.js-controller version 1.1.2 js-controller starting 2017-07-15 23:24:45.711 - ^[[32minfo^[[39m: host.HomeMaster Copyright (c) 2014-2017 bluefox, hobbyquaker 2017-07-15 23:24:45.711 - ^[[32minfo^[[39m: host.HomeMaster hostname: HomeMaster, node: v6.11.1 2017-07-15 23:24:45.712 - ^[[32minfo^[[39m: host.HomeMaster ip addresses: 192.168.1.60 fe80::20c:29ff:fef3:bb55 2017-07-15 23:24:45.740 - ^[[32minfo^[[39m: host.HomeMaster States connected to redis: 127.0.0.1:6379 2017-07-15 23:24:45.741 - ^[[32minfo^[[39m: host.HomeMaster InRedisDB connected 2017-07-15 23:24:45.760 - ^[[31merror^[[39m: uncaught exception: Cannot read property 'views' of null 2017-07-15 23:24:45.762 - ^[[31merror^[[39m: TypeError: Cannot read property 'views' of null at /opt/iobroker/node_modules/iobroker.js-controller/lib/objects/objectsInRedis.js:1380:24 at Command.callback (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:639:49) at normal_reply (/opt/iobroker/node_modules/redis/index.js:721:21) at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:819:9) at JavascriptRedisParser.returnReply (/opt/iobroker/node_modules/redis/index.js:192:18) at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:574:12) at Socket. <anonymous>(/opt/iobroker/node_modules/redis/index.js:274:27) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at readableAddChunk (_stream_readable.js:176:18) 2017-07-15 23:24:45.765 - ^[[32minfo^[[39m: iobroker _restart 2017-07-15 23:24:45.774 - ^[[32minfo^[[39m: host.HomeMaster terminated 2017-07-15 23:24:46.006 - ^[[32minfo^[[39m: iobroker Starting node restart.js 2017-07-15 23:24:46.012 - ^[[32minfo^[[39m: iobroker exit 0 2017-07-15 23:24:46.158 - ^[[32minfo^[[39m: host.HomeMaster received SIGTERM 2017-07-15 23:24:46.158 - ^[[32minfo^[[39m: host.HomeMaster terminated</anonymous>
nach umschalten auf settings ohne redis geht alles wieder
Edit: Dieser depp der Dutchman heist sollte mal vernuenftig lesen…. es laeuft !
Datei => REDIS:
>iobroker stop >iobroker setup custom
` > Type of objects DB [file, couch, redis], default [file]:
Host of objects DB(file), default[127.0.0.1]:
Port of objects DB(file), default[9001]:
Type of states DB [file, redis], default [file]: redis
Host of states DB (redis), default[127.0.0.1]:
Port of states DB (redis), default[6379]:
Data directory (file), default[../../../iobroker-data/]:
Host name of this machine [FastPC]:
creating conf/iobroker.json `
iobroker start
nur die states und nicht alles auf redis setzen !
-
hab da ein Problem mit multihost
redis läuft auf dem Master … kann mich auch von aussen mit verbinden
started Sun Dec 10 2017 10:48:54 GMT+0100 (CET)Restarting iobroker... Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Stopping daemon iobroker... Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 796": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 1025": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 1018": 1 Sun Dec 10 2017 10:48:55 GMT+0100 (CET)Exit code for "kill -KILL 631": 1
steht im log auf dem Master.. iobroker startet nicht…
multihost Umgebung
Master
Type of objects DB [file, couch, redis], default [file]: redis Host of objects DB(file), default[127.0.0.1]: <0.0.0.0> Port of objects DB(file), default[6379]: ENTER Type of states DB [file, redis], default [file]: ENTER Host of states DB (file), default[0.0.0.0]: ENTER Port of states DB (file), default[6379]: ENTER Host name of this machine [hostname]: ENTER
Slave alles gleich bis auf die IP