<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/trouble-tickets/single-ticket.xsl"?>

<ticket>
  <meta>
    <id>208</id>
    <filename>208.xml</filename>
    <subject><![CDATA[Status der Moodle-Plattform]]></subject>
    <status>closed</status>
    <short-description><![CDATA[Die Moodle-Plattform hat heute morgen um Punkt 8 Uhr alle Rekorde gebrochen. Die meisten Instanzen halten dem Ansturm stand.

Nur ein kleiner Teil der Zugriffe sind im Moment langsam (länger als 5 Sekunden), oder werfen eine Fehlermeldung. Diese konzentrieren sich auf einzelne Server. Einer der Server bekommt DDoS-Angriffe ab und ist deshalb überlastet. Bei weiteren Servern gibt es aktuell Softwareprobleme, die die Performance der Server einschränken. Wir arbeiten im Moment daran, die Probleme einzugrenzen und zu lösen.

Korrektur: die Zugriffe, die derzeit langsam sind, oder Fehler werfen liegen nicht immer bei 1%, sondern schwanken etwas, je nach Last und Situation.]]></short-description>
    <creation-time>2021-01-11 09:01:48</creation-time>
    <creation-time-timezone></creation-time-timezone>
    <creation-time-unix>1610352108</creation-time-unix>
    <closing-time>2021-01-26 20:42:32</closing-time>
    <closing-time-timezone></closing-time-timezone>
    <closing-time-unix>1611690152</closing-time-unix>
    <location><![CDATA[]]></location>
    <planned>false</planned>
    <ticket-meta-type><![CDATA[Moodle]]></ticket-meta-type>
    <ticket-start-work>2021-01-11 09:00</ticket-start-work>
    <ticket-end-work>2021-01-11 15:00</ticket-end-work>
    <ticket-start-work-unix>1610352000</ticket-start-work-unix>
    <ticket-end-work-unix>1610373600</ticket-end-work-unix>
  </meta>
  <actions>
    <update>
      <id>1</id>
      <timestamp>2021-01-12 08:40:39</timestamp>
      <timezone>+01</timezone>
      <text><![CDATA[Sehr geehrte Damen und Herren,

nach verschiedenen Optimierungen am Montag bestehen keine nennenswerten Probleme mehr.
Die Spitzenlast um 8 Uhr konnte so am Dienstag gut abgefangen werden.

Mit freundlichen Grüßen
Ihre Webmaster]]></text>
    </update>
    <update>
      <id>2</id>
      <timestamp>2021-01-12 20:13:48</timestamp>
      <timezone>+01</timezone>
      <text><![CDATA[Sehr geehrte Damen und Herren,

am Montag (11.01.2021) kam es zu Problemen mit einigen Moodle-Instanzen. Die Probleme traten unter der bisher größten Last auf, die die BelWü Moodle-Plattform bisher gesehen hatte. In dem Zeitfenster in dem es Probleme gab, hatten wir versucht das Problem zunächst schnell durch Verwendung von Teilen unserer Hardware-Reserven zu erschlagen, um so genug Luft zu haben um die konkreten Probleme und Engpässe zu finden und zu analysieren.

Da die Probleme bei den meisten Instanzen nicht oder nur in einem bestimmten Zeitraum auftraten, dauerte diese Analyse einige Zeit. Wir könnten verschiedene Punkte identifizieren, die nur bei sehr hohen Lastsituationen sichtbar werden und im Voraus nicht trivial gefunden oder simuliert werden können.

Wir möchten die aufgetretenen Probleme und unsere technischen Änderungen hier kurz darstellen.

Das größte Problem lag im Verhalten der Datenbanken. Hier gibt es viele Konfigurationsparameter an denen justiert werden kann und muss. Einer davon beeinflusst wie viele Daten im Arbeitsspeicher verarbeitet werden und wann Daten auf Festplatte geschrieben werden. Die Konfiguration sah vor, dass möglichst viel im Arbeitsspeicher bleibt, denn Arbeitsspeicher ist schnell und Festplattenzugriffe können theoretisch früher zum Flaschenhals werden. Unter der hohen Last waren die seltenen aber großen Festplattenzugriffe allerdings ein Problem, da die Datenbank hier kurz zum Stocken kommt. PHP-/Webserverprozesse warten dann auf die Datenbank, und es stauen sich offene Anfragen an, die danach parallel auf die Datenbank einprasseln. Damit schaukelt sich das Problem ab einer gewissen Lastgrenze auf und die Instanzen blockieren.

Die Parameter wurde am 11.01.21 gegen 12:00 Uhr an der virtuellen Maschine mit den meisten Problemen angepasst. Die virtuelle Maschine und die daraufliegenden Moodles waren danach sofort mit der gewohnten Performance erreichbar. Die Parameter wurden im Laufe des gestrigen Tages weiter getestet und als mögliche Problemlösung angesehen. Am Abend und in der Nacht wurden die Parameter auf allen Datenbankservern konfiguriert. Heute (Dienstag, 12.01.2021) konnten diese Probleme nicht mehr festgestellt werden.

Ein weiteres Problem ist Datenbank-Locking durch die Moodle-Software. Bestimmte Teile von Moodle bzw. Moodle-Plugins stellen große Anfragen an die Datenbanken. Für die Anfragen wird die Datenbank in bestimmten Fällen gelockt (für andere Anfragen komplett gesperrt), damit müssen andere Prozesse kurz warten, bis die Datenbank wieder schreibbar ist. Das erzeugt ebenfalls wartende Prozesse und hohe Last im System.

An einigen Stellen wurden diese Datenbankzugriffe im Moodle-Code verbessert, sodass sie schneller sind und eine bessere Parallelität ermöglichen. Wir haben hierfür auch Hilfe von den Betreibern der Moodle-Plattform in Berlin bekommen. Moodle ist freie Software. Der Quellcode ist offen zugänglich und kann damit auch gelesen und verbessert werden. Die konkreten Verbesserungen werden von den Betreibern in Berlin in den offiziellen Moodle-Quellcode eingepflegt.

Außerdem wurden in den Datenbanken zusätzliche Indizes angelegt. Indizes sind wie ein Stichwortverzeichnis in einem Buch und sorgen dafür, dass Datenbankzugriffe auf Kosten von etwas Speicherbedarf schneller beantwortet werden können. Der größte Flaschenhals bei den Indizes waren die Tabellen des Moodle-Kalenders, die Datenbankzugriffe erzeugten, die bis zu 40 Sekunden andauerten.

Um bei höherer Last ein Flaschenhals im Webserver ausschließen zu können wurde hier auch an Parametern optimiert.

Um die virtuellen Maschinen mit den meisten Zugriffen weiter skalieren zu können wurden diese Heute um 5:00 Uhr auf größere Server umgezogen. Dadurch ist es möglich im laufenden Betrieb den virtuellen Maschinen mehr CPU-Kerne oder mehr Arbeitsspeicher zuzuweisen und auf eine höhere Last zu reagieren.

Die Moodle-Plattform hielt dem Ansturm heute (Dienstag) ohne Probleme stand. Kleinere Lastspitzen wurden innerhalb kurzer Zeit behoben. Ein kurzer DDoS-Angriff führte zur Mittagszeit zum Ausfall einer virtuellen Maschine für 5 Minuten.

Um die Last noch besser verteilen zu können kann es in den nächsten Tagen zwischen 22:00 und 06:00 Uhr zu kurzen Ausfällen kommen.

Die meistgestellten Moodle Fragen haben wir unter https://support.belwue.de/FAQ/webhosting/moodle/ zusammengefasst. Die FAQ-Seite wird bei Bedarf erweitert.

Aktuell betreiben wir auf jeder virtuellen Maschine 50 Moodle-Instanzen. Insgesamt sind derzeit 112 virtuelle Maschinen im Betrieb.

Mit freundlichen Grüßen
Ihre Webmaster
]]></text>
    </update>
    <update>
      <id>3</id>
      <timestamp>2021-01-13 14:48:27</timestamp>
      <timezone>+01</timezone>
      <text><![CDATA[Sehr geehrte Damen und Herren,

wir als BelWü betreiben nur Moodle. Die Erweiterung Videokonferenz BigBlueButton (BBB) wird nicht von uns, sondern vom Zentrum für Schulqualität und Lehrerbildung (ZSL) betrieben. 

Bei Problemen mit BBB wenden Sie sich bitte an das entsprechende Forum der Lehrerfortbildung unter https://lehrerfortbildung-bw.de/moodle2/course/view.php?id=471

Mit freundlichen Grüßen
Ihre Webmaster]]></text>
    </update>
    <update>
      <id>4</id>
      <timestamp>2021-01-14 08:09:43</timestamp>
      <timezone>+01</timezone>
      <text><![CDATA[Sehr geehrte Damen und Herren,

zwischen 7:53 und 8:01 gab es auf der virtuellen Maschine web76.belwue.de eine eingeschränkte Erreichbarbarkeit von 50 Moodle-Instanzen. Der Grund war ein nicht mehr reagierender Webserver. Der Webserver wurde neugestartet und wird seitdem verstärkt beobachtet.

Mit freundlichen Grüßen
Ihre Webmaster

---
Ob Ihr Moodle betroffen ist, finden sie am einfachsten mit einer DNS Anfrage heraus.
Eine solche Anfrage können Sie z.B. online hier machen: https://ping.eu/nslookup/
Wenn folgendes Ergebnis erscheint:

<IHRE-MOODLE-DOMAIN> is an alias for web76.belwue.de ]]></text>
    </update>
  </actions>
</ticket>
