Ü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: Datenbankserver, Mariadb, Monit, Mysql, Systemd, Webserver
Kategorien: Linux , Debian