Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

Überwachung von Mariadb (mysql) mit monit

Mit Systemd werden abgestürzte Dienste neu gestartet und das System sollte eigentlich ohne großartige Überwachung laufen. Bei manchen kritischen Diensten lohnt es sich aber trotzdem separat ein Monitoring laufen zu lassen, um eventuell präventiv Maßnahmen zu ergreifen. Dafür bietet sich immer noch monit an.

Für Mariadb (mysql) kann eine Überwachungsdatei so aussehen:

 check process mariadb with pidfile /run/mysqld/mysqld.pid
   group mysql

   start program = "/usr/sbin/service mariadb start" with timeout 300 seconds
   stop  program = "/usr/sbin/service mariadb stop" with timeout 300 seconds

    if failed host 127.0.0.1 port 3306 protocol mysql username "monitordienst" password "dein_feines_Passwort" with timeout 4 seconds and retry 3 then restart

    if total memory usage > 25 GB for 3 cycles then alert
    if threads > 250 then alert

Hier wird von monit zuerst einmal überprüft, ob die Prozesskennung /run/mysqld/mysqld.pid existiert. Andernfalls gibt es einen Standardalarm.

Danach wird mittels start program = "/usr/sbin/service mariadb start" with timeout 300 seconds festgelegt, wie das überwachte Programm gestartet und über stop program = "/usr/sbin/service mariadb stop" with timeout 300 seconds wie es gestoppt werden kann. Bei beiden Kommandos wurde eine Verzögerung von 300 Sekunden also 5 Minuten über with timeout 300 seconds hinzugefügt, da Mariadb (mysql) mitunter beim Starten oder Herunterfahren etwas länger braucht und das vor allem in Krisensituationen.

Dazu wird regelmäßig überprüft, ob der Datenbankserver ansprechbar ist. Dazu muss ein User namens monitordienst mit Passwort eingerichtet werden, der sich dann im Standardintervall unter 127.0.0.1:3306 einloggt und damit überprüft, ob Mariadb noch funktioniert. Falls das mit einem timeout von 4 Sekunden in drei Überwachungszyklen nicht möglich ist, dann wird ein Neustart des Datenbankservers ausgelöst.

Dazu gibt es noch Alarme, wenn die Speichernutzung des Prozesses längere Zeit über 25 Gigabyte steigt und wenn es über 250 Datenbankserverthreads gibt.

Zusätzlich könnte man noch so eine Sicherung einbauen, wenn Mariadb (mysql) seine temporären Dateien in das tmpfs unter /tmp schreibt.

check filesystem tmpfs with path /tmp
       if space usage > 50% then alert
       if space usage > 80% then exec "/usr/sbin/service mariadb restart"

Dabei bekommt man bei über 50 Prozent eine Warnung und wenn die Speichernutzung über 80 Prozent steigt, dann wird Mariadb (mysql) neu gestartet.

Bei Mariadb (mysql) wird das temporäre Verzeichnis so tmpdir = /tmp/mysql festgelegt. Die Überwachung ist beim eingesetzten Server notwendig, da Mariadb (mysql) in Stresssituationen trotz der Einschränkung tmp_disk_table_size = 9500M das /tmp-Verzeichnis vollschreibt und der Datenbankdienst irgendwann nicht mehr reagiert. Dagegen hilft nach bisheriger Erkenntnis nur ein Neustart des Dienstes, der dann von monit ausgelöst wird. Das führt zwar zu einem kurzzeitigen Ausfall der Datenbanken, der aber durch den zwischengeschaltenen Varnish-Cache größtenteils abgefangen werden sollte.

Zur Sicherheit kann auch für den Systemd-Dienst eine längere Auszeit für den Start und den Stop von Mariadb (myslq) eingebaut werden. Dazu braucht es in Debian unter /etc/systemd/system/mariadb.service in der Datei override.conf unter [service] den Eintrag TimeoutSec=300. Die Änderungen müssen wie üblich noch per systemctl daemon-reload vom laufenden Systemd übernommen werden. Damit ist die Wartezeit für den Start und den Stop auf 300 Sekunden bzw. 5 Minuten festgelegt. Wenn Mariadb (mysql) sich dann in diesem Zeitraum von insgesamt 10 Minuten nicht neustarten also geordnet stoppen und wieder starten lässt, gibt es wohl ein anderes Problem.


Stichworte: , , , , ,
Kategorien: ,


Kommentare

  1. „group mysql“
    überprüft nicht, ob das PID-File der Unix-Gruppe mysql gehört!

    Das Schlüsselword „group“ wird in monit genutzt um verschiedene Services logisch zu gruppieren und entsprechend gemeinsam ansprechen zu können.

    Siehe dazu:
    https://www.mmonit.com/monit/documentation/monit.html#SERVICE-GROUPS

  2. (Autor)

    Danke für den Hinweis! Wurde korrigiert …

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.