NEWS
[Frage] redis - Installation lokal oder extern
-
Hallo zusammen,
ich habe mich heute etwas mit redis beschäftigt.
Nach langem hin- und herlesen, redis in einem Container installiert.
Hat alles soweit funktioniert. Erste Test waren erfolgreich.
Dann habe ich ioBroker umstellen möchten, was auf Anhieb nicht funktionierte.
Also dachte ich mir, hast wieder Mist gebaut, und redis in dem gleichen Container wie ioBroker installiert.
Danach hat alles reibungslos funktioniert. States werden in die redis Datenbank geschrieben, und daraus gelesen.
Da es mir keine Ruhe gelassen hat, warum das in einem externen Container nicht funktioniert,
noch einmal diese Anleitung von @apollon77 , welche übrigens sehr gut verfasst ist, durchgelesen.
Lösung gefunden.Falls auch andere Hosts auf diesen Redis-Server zugreifen sollen (Slaves oder so), dann muss dies noch erlaubt werden. Dazu muss /etc/redis/redis.conf editiert werden und die Zeile bind 127.0.0.1 zu bind 0.0.0.0 geändert werden und direkt darunter der protected_mode auf no gesetzt werden.
War bei mir auf noch auf
yes
.Jetzt sind bei mir noch ein paar Fragen aufgetaucht, welche ich vorher gerne beantwortet hätte,
bevor ich wieder auf den externen Container umschwenke.
Derzeit habe ich nur eine Anwendung (ioBroker), welche redis nutzen würde.Welche Vor- oder Nachteile entstehen wenn ich lokal bleibe, bzw. auf externen Container umschwenke?
Wenn redis extern läuft, und neu gestartet werden muss, wie reagiert ioBroker darauf?
Ich hoffe ihr könnt mir etwas bei der Entscheidungsfindung helfen.
Gruß, Karsten -
@hydrotec
Ich habe Iobroker und Redis in 2 separaten Containern installiert.
Beide Container per Compose in einem service.
Dadurch kannst du jeweils die Standard Containers von buanet und redis verwenden ind dadurch bei Updates einfacher altualisieren.Ich könnte die mein compose File geben.
Habe allerdings mit macvlan konfiguriert. -
@oliverio sagte in [Frage] redis - Installation lokal oder extern:
Beide Container per Compose in einem service.
Da müsste ich mich erst einmal schlau machen, wie das unter LXD funktioniert, wenn überhaupt.
Ich könnte die mein compose File geben.
Danke für das Angebot.
Habe allerdings mit macvlan konfiguriert.
Sind meine Container auch, finde ich einfacher zu verwalten.
Aber die Idee ist nicht schlecht, zwei Container die miteinander verbunden sind, im Fall das einer ausfällt.
Quasi HA. -
@hydrotec sagte in [Frage] redis - Installation lokal oder extern:
Aber die Idee ist nicht schlecht, zwei Container die miteinander verbunden sind, im Fall das einer ausfällt.
Quasi HA.das ist quatsch..
und ihr redet meine ich aneinander vorbei der eine über docker der andere LCX
korrigiert mich webb ich falsch leseder vorteil ist man verteil die ressourcen auf 2 Maschienen (container oder lxc ist egal)
der update ist einfcher
und das backup von iobroker ist kleiner..eine HA bekommst du damit nicht hin..
-
Kann schon sein.
Doch stellt sich mir immer noch die Frage, wie reagiert ioBroker, wenn der externe redis Server nicht verfügbar ist.
Wenn ioBroker und redis auf dem gleichen Server liegen, dann sind halt beide Anwendungen down,
und nichts weiteres passiert, oder.
Und, bringt es überhaupt Vorteile, redis in einem extra Container laufen zu lassen?
Bin noch recht unerfahren, was das Zusammenspiel ioBroker und redis angeht. -
Aaaaaaaaaalso :-))
Mit Redis (und jetzt nehmen wir mal an das States und Objects im Redis sind) wird die Redis DB quasi zum "Master" und alle Hosts mit einem ioBroker js-controller sind alle gleichberechtigt. ABER damit: Wenn die DB weg ist geht nichts mehr weil halt die DB weg ist. Die DB ist also dein "Single Point of Failure".
Wenn man jetzt den Redis auf dem gleichen Host hat wie einen der iobroker Prozesse (oder "lokal" wie du es nennst) dann hat man quasi das gleiche Szenario wie bisher mit der file bzw jsonl DB ... wenn der Host ausfällt geht nichts mehr.
Wenn der Redis (egal ob lokal oder extern) neu gestartet wird dann verkraftet der iobroker das für im Standard maximal ca. 90s. Im Log wirst Du sehen das die DBs in dem Zeitraum versuchen den Redis neu zu verbinden. Fehlende Schreibaktionen werden dann gepuffert und dann geschrieben wenn die Verbindung wieder da ist. Falls es länger dauert werden alle adapter beendet und der js-controller startet sich neu um immer wieder neu zu verbinden. Wenn Redis dann wiederkommt wird alles wieder hochgefahren. Das könnte man durch settings ändern und länger machen, aber ich habe diesen Weg gewählt weil nach ca. 90s der lokale Stand immer weiter auseinander läuft und es danach sowieso komisch wird was Skripte o.ä. angeht weil Sie dann ggf zu strange reagieren.
Wer mindestens 3 Hosts hat kann den Redis als Cluster mit Sentinel aufsetzen, dann ist der Ausfall eines Nodes egal weil dasnn ein anderer Redis als neuer Master übernimmt und die Adapter alle umschwenken.
Und, bringt es überhaupt Vorteile, redis in einem extra Container laufen zu lassen?
Am Ende ist der Vorteil das jeder Container "zielgerichteter arbeitet und minimaler" (one container, one function) ... aber ja das Risiko bei Ausfall ist etwas höher
-
Dankeschön für die ausführliche Antwort.
Meine Fragen sind beantwortet, und ich verstehe die Konstellation besser.
Wenn ich es nicht komplett falsch verstanden habe, stört der kurzfristige Ausfall von redis hauptsächlich,
wenn die Objekte mit in diese Datenbank verschoben werden.Einen Cluster mit Sentinel ist für die Heimanwendung dann doch etwas übertrieben,
und wie du es beschrieben hast, auch nicht notwendig, bei kurzfristigem Ausfall von redis.Danke nochmal
-
@hydrotec sagte in [Frage] redis - Installation lokal oder extern:
Wenn ich es nicht komplett falsch verstanden habe, stört der kurzfristige Ausfall von redis hauptsächlich,
wenn die Objekte mit in diese Datenbank verschoben werden.Ne, das oben genannte gilt egal für was mit Redis.
Wenn man nur States in Redis hat und Objects nicht macht es in jedem fall (in meinen Augen) KEINEN Sinn Redis extern zu betreiben, weil man dann zwei Single-point-of-Failures hat! Adapter und alles brauchen beide Datenbanken. Wenn Objects also file/jsonl von einem js-controller bereitgestellt wird und States im Redis dann uss beies da sein damit es tut.
-
@hydrotec sagte in [Frage] redis - Installation lokal oder extern:
Einen Cluster mit Sentinel ist für die Heimanwendung dann doch etwas übertrieben,
Wie man es sieht :-)) Wenn man 3 Hosts hat ... why not
-
Wieder was gelernt
@apollon77 sagte in [Frage] redis - Installation lokal oder extern:
Wie man es sieht :-)) Wenn man 3 Hosts hat ... why not
Das ist dann etwas anderes, doch bis dahin bin ich vermutlich schon in Rente