{"id":694,"date":"2020-03-10T22:43:19","date_gmt":"2020-03-10T21:43:19","guid":{"rendered":"https:\/\/ns.10be.de\/blog\/?p=694"},"modified":"2020-05-27T14:29:16","modified_gmt":"2020-05-27T12:29:16","slug":"wie-ist-ns-10be-de-aufgebaut-struktur-skripte-ablaeufe","status":"publish","type":"post","link":"https:\/\/zehn.be\/2020\/03\/10\/wie-ist-ns-10be-de-aufgebaut-struktur-skripte-ablaeufe\/","title":{"rendered":"Wie ist ns.10be.de aufgebaut. Struktur, Skripte, Abl\u00e4ufe&#8230;"},"content":{"rendered":"<h1>Also, wie sieht es denn so hinter ns.10be.de aus?<\/h1>\n<p>Eigentlich ist 10be nur ein Web-Frontend, welches die Bedienung von der Nightscout-Erstellung erleichtert und im Hintergrund das macht, was Heroku &amp; co auch machen.<\/p>\n<p>Die Einstellungen, welcher der User auf der Seite macht, werden in einer Datenbank gespeichert und zur Nightscout-Instanz weitergeleitet und dort in die Config eingetragen.<\/p>\n<p>Nightscout selbst, h\u00e4ndelt dann die ganzen Daten bz, treatments, profile etc und speichert dies in der MongoDB-Datenbank, welche bei 10be f\u00fcr den User beim erstellen vom Server gemacht wurden.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Aus User\/Anwender Sicht: Ganz grob so:<\/h3>\n<p><a href=\"https:\/\/ns.10be.de\/blog\/wp-content\/uploads\/2020\/03\/ns.10be-struktur.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-696\" src=\"https:\/\/ns.10be.de\/blog\/wp-content\/uploads\/2020\/03\/ns.10be-struktur.png\" alt=\"\" width=\"848\" height=\"646\" srcset=\"https:\/\/zehn.be\/wp-content\/uploads\/2020\/03\/ns.10be-struktur.png 848w, https:\/\/zehn.be\/wp-content\/uploads\/2020\/03\/ns.10be-struktur-300x229.png 300w, https:\/\/zehn.be\/wp-content\/uploads\/2020\/03\/ns.10be-struktur-768x585.png 768w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li>Also der Client (Browser, App etc), stellt eine Anfrage wie z.B. gib mir die Seite xxxxxxx.ns.10be.de und diese geht beim Proxy1 oder Proxy2 ein (Round Robin).<\/li>\n<li>Wenn es im nginx eine Config f\u00fcr den Hostnamen oder Port gibt, wird die Anfrage im Hintergrund an den Cluster zu der Nightscout-Instanz weitergeleitet.<\/li>\n<li>Nightscout selbst, holt sich die Daten aus der MongoDB, die auf dedizierten Server laufen (Ram w\u00e4re sonst auf den Clustern zu wenig und ist weniger flexible um eine einzelne Instanz auf einen anderen Cluster zu ziehen).\n<ol start=\"3\">\n<li>Dann wird das Ergebnis an den Client zur\u00fcck gegeben und die Webseite wird angezeigt.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Und was machen die anderen Sachen da?<\/h3>\n<ol start=\"4\">\n<li>Da werden die Daten auf den zweiten Proxy gesynct, das falls der Hauptserver mal l\u00e4nger ausf\u00e4llt, man diesen mit etwas Handarbeit als Ersatz nutzten kann.Das es auch ohne eingreifen geht, w\u00e4re m\u00f6glich, aber habe ich noch nicht hinbekommen, da es viel Aufwand ist.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>und 6. Beim share-Server, liegen die Nightscout-Dateien, sowie die DB-Backups und die Autotune-Auswertung.<br \/>\nDie Proxy-Server d\u00fcrfen lesen auf die DB-Backups zugreifen, ansonsten pusht dieser nur die Daten\/Files.Sprich dort werden die neuen Dateien\/updates zuerst geladen, dann getestet und dann nach und nach auf den Cluster geladen.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3>Allgemeine Pr\u00fcfung der Erreichbarkeit und der Instanzen<\/h3>\n<p>Dazu laufen alle paar Minuten Pr\u00fcfungen ob servername.ns.10be.de:xxx\/api\/v1\/status ein &#8222;OK&#8220; zur\u00fcck gibt und das innerhalb von 3 Sekunden.<\/p>\n<p>Wenn dies in 15 Minuten mehr als 3 Mal fehlgeschlagen ist, wird die Instanz neu deployed.<\/p>\n<p>Dazu laufen auf dem Cluster Daemons, welche pr\u00fcfen, das die Instanzen laufen und auf dem Port reagieren. L\u00e4uft ein Prozess nicht oder antwortet dieser nicht, wird die Instanz neu gestartet.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3>Pr\u00fcfung der VPS-Server<\/h3>\n<p>Die Server werden alle paar Minuten gepr\u00fcft, ob diese erreichbar sind und wie der Status vom Server selbst in der api ist.<\/p>\n<p>Wenn ein Server mehrmals nach 30 Sekunden Timeout nicht reagiert, aber gestartet ist, so wird dieser neu gestartet.<\/p>\n<p>Wenn nach einer Stunde immer noch keine Antwort erfolgt, gibt es vom Slack-Bot eine Nachricht und ein reboot wird erneut probiert.<\/p>\n<p>Ebenso wird eine Meldung auf Twitter und hier <a href=\"https:\/\/ns.10be.de\/de\/status.html\" target=\"_blank\" rel=\"noopener\">https:\/\/ns.10be.de\/de\/status.html<\/a> gepostet.<\/p>\n<p>Dies funktioniert meist gut, aber leider auch nicht immer korrekt, dann muss man immer mal wieder (selten), von Hand eingreifen.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Probleme letzer Woche<\/h3>\n<p>Die Hauptprobleme sind mittlerweile der nginx auf Proxy1 und Proxy2.<\/p>\n<p>Die Requesttime liegt meist bei:<\/p>\n<p><em>req_time=0.002<\/em><\/p>\n<p>bis<\/p>\n<p><em>req_time=0.295<\/em><\/p>\n<p>im Normallfall (und aktuell auch wieder).<\/p>\n<p>Bei dem Probleme letzter Woche, gab es aber Werte mit 5 Sekunden und h\u00f6her, sowie loops, das der Proxy2 erst zum Proxy1 und von dort dann zum Cluster die Verbindung geleitet hat.<\/p>\n<p>Dies kamm zum Teil von dem folgenden Fehler auf dem Proxy1:<\/p>\n<pre class=\"moz-quote-pre\">could not allocate node in cache keys zone \"STATIC\"<\/pre>\n<p>Und durch die falsche DNS-Aufl\u00f6sung beim proxy2.<\/p>\n<p>Den Fehler von Proxy1 konnte ich leider auch nach vielen Versuchen und Tipps nicht l\u00f6sen, wodurch der Cache f\u00fcr statische Files, nun komplett deaktiviert ist.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3>Warum gibt es dann immer noch immer mal wieder Connection Timeouts?<\/h3>\n<p>Der Nginx-Dienst muss seit dem die 1.000 Instanzen \u00fcberschritten wurde, leider mit einem restart neu gestartet werden, da ein reload nicht nur ewig lange dauert, sondern auch danach dieser die neuen Instanzen einfach nicht kennt und daher nicht eingelesen hat.<\/p>\n<p>Beim einem restart werden allerdings die offenen Verbindungen beendet, was zu dem Timeout und \u00e4hnlich f\u00fchren kann. Da dies aber auf dem Proxy1 und 2 mit zwei Minuten Verz\u00f6gerung passiert, ist immer ein Proxy online.<\/p>\n<p>Man k\u00f6nnte es alles in eine Config-Datei schreiben, dann w\u00fcrde der reload <em>vermutlich<\/em> gehen, daf\u00fcr ist aber viel Arbeit zum umbauen der Skripte n\u00f6tig&#8230;&#8230;.<\/p>\n<p>Allerdings habe ich heute eine andere \u00c4nderung gemacht, die es besser machen sollte.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Bitte beachte weiterhin, es ist immer noch ein Gefallen, der hier gemacht wird!<\/h2>\n<h2>Es gibt keine Garantien oder \u00e4hnliches!<\/h2>\n<h2>Es steckt verdammt viel Arbeit drin und ich versuche mein bestes, aber auch die Freizeit und das Wissen in allen Bereichen ist begrenzt (w\u00e4chst, aber trotzdem begrenzt).<\/h2>\n<p>&nbsp;<\/p>\n<p>Von daher, kann es immer wieder zu solchen Probleme kommen und wie beim letzten Fall, wo man denkt, es ist gel\u00f6st, tritt dann aber wieder auf und wieder und wieder, kann sich die L\u00f6sung hinziehen.<\/p>\n<p>Wer z.B. immer noch Probleme in aaps hat (was bei mir in der DEV nicht auftritt und auch nie aufgetreten ist), kann ich leider nur hier her verweisen:<\/p>\n<p>https:\/\/github.com\/MilosKozak\/AndroidAPS\/issues\/2481#issuecomment-595903148<\/p>\n<p>&nbsp;<\/p>\n<p><strong>[UPDATE 27.05.2020]<\/strong><\/p>\n<p>Seit den letzten Anpassungen vom M\u00e4rz, l\u00e4uft alles wieder reibungslos.<\/p>\n<p>Das letzte Problem Anfang\/Mitte April, das timezone-Paket von npm nun eine Anpassung braucht, die in nightscout noch nicht drin ist, wurde lokal gefixt.<\/p>\n<p>Abgesehen von Hardware-Probleme, die bei einem technischen Defekt auch etwas l\u00e4nger andauern k\u00f6nnen, gab es keine Verz\u00f6gerungen, Ausf\u00e4lle oder \u00e4hnliches.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Also, wie sieht es denn so hinter ns.10be.de aus? Eigentlich ist 10be nur ein Web-Frontend, welches die Bedienung von der Nightscout-Erstellung erleichtert und im Hintergrund das macht, was Heroku &amp; co auch machen. Die Einstellungen, welcher der User auf der Seite macht, werden in einer Datenbank gespeichert und zur Nightscout-Instanz weitergeleitet und dort in die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,5],"tags":[202,206,203,207,205,204],"class_list":["post-694","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-diy-technik-apps","tag-10be","tag-erreichbarkeit","tag-nginx","tag-probleme","tag-proxy","tag-server"],"_links":{"self":[{"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/posts\/694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/comments?post=694"}],"version-history":[{"count":8,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/posts\/694\/revisions"}],"predecessor-version":[{"id":706,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/posts\/694\/revisions\/706"}],"wp:attachment":[{"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/media?parent=694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/categories?post=694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zehn.be\/wp-json\/wp\/v2\/tags?post=694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}