
Ich betreibe einen einfachen Entwicklungsserver (Ubuntu), auf dem MySQL und MongoDB manchmal abstürzen. Ich starte sie immer mit neu sudo service mysql restart
.
Obwohl ich weiß, dass ich untersuchen muss, warum sie abstürzen – und das werde ich – suche ich derzeit nach einer Möglichkeit, sie nach einem Absturz automatisch neu zu starten. Ich schätze, ich brauche eine Art Daemon, der sie anpingt und neu startet, wenn sie nicht mehr reagieren, aber ich bin mir nicht sicher, wie ich das machen soll.
Ich habe über Tools wie gelesenNagios, aber ich denke, das ist für meine Situation etwas übertrieben.
Weiß jemand, wie ich anfangen kann?
Antwort1
Ich habe über Tools wie gelesenNagios, aber ich denke, das ist für meine Situation etwas übertrieben.
Weiß jemand, wie ich anfangen kann?
Einfach. Informieren Sie sich über die Einrichtung von Überwachungskonfigurationen mitÜberwachen. Es handelt sich um ein leichtes und einfach zu installierendes Systemüberwachungstool, das sich genau in den von Ihnen beschriebenen Szenarien sehr gut einrichten lässt: Der Dienst fällt aus, ich starte ihn neu und erhalte eine Benachrichtigung darüber.
Ich benutze es hauptsächlich für Apache-Webserver, aber es gibtviele Beispiele, was für andere Programme/Software getan werden kannwie MySQL und dergleichen.
Monit einrichten.
Ich habe es folgendermaßen eingerichtet. Installieren Sie zunächst das Monit-Programm selbst wie folgt:
sudo apt-get install monit
Bearbeiten Sie die Konfiguration nach der Installation hier. Ich bevorzuge die Verwendung von, nano
Sie können aber auch jeden anderen Texteditor verwenden:
sudo nano /etc/monit/monitrc
Passen Sie die Standardwerte des Daemons an, um die Dienste alle 60 Sekunden mit einer Startverzögerung von 120 zu überprüfen:
set daemon 60
with start delay 60
Suchen Sie dann den mailserver
Bereich monitrc
und fügen Sie die folgende Zeile hinzu. Postfix oder ein SMTP muss aktiviert sein, damit dies funktioniert. Normalerweise habe ich Postfix auf meinen Servern installiert, daher verwende ich das folgende Setup:
set mailserver localhost
Dann stelle ich sicher, dass ein Monit-Konfigurationsverzeichnis wie folgt eingerichtet ist:
sudo mkdir -p /etc/monit/conf.d
Einrichten eines Monit Apache2-Überwachungsregelsatzes.
Nun, wie gesagt, ich verwende Monit hauptsächlich für die Apache-Überwachung, daher ist dies eine einfache Konfiguration, die ich gerne verwende, aber das Grundkonzept ist für MySQL, MongoDB oder andere Dinge ähnlich. Ich würde es in dieser Datei speichern:
sudo nano /etc/monit/conf.d/apache2.conf
Und dies wäre der Inhalt dieser Datei:
check process apache with pidfile /var/run/apache2.pid
start "/usr/sbin/service apache2 start"
stop "/usr/sbin/service apache2 stop"
if failed host 127.0.0.1 port 80
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
Die Syntax ist ziemlich selbsterklärend, aber im Wesentlichen gilt:
- Der Vorgang hängt vom ab
apache2.pid
. Stellen Sie sicher, dass Sie diesen so ändern, dass er dem tatsächlichen Standort Ihresapache2.pid
oderhttpd.pid
in Ihrer Umgebung entspricht. - Dann hat Befehle, die mit den Prozessen von
start
und verbunden sindstop
. - Und verfügt über eine Logik, die den Webserver auf Port
80
(localhost
)127.0.0.1
überwacht. - Und nur so, wenn der Server für 15 Sekunden nicht erreichbar ist.
- Und wenn es handeln muss, versucht es einen Neustart.
- Und sendet dann bei Vorfällen, bei denen es zu einer Zeitüberschreitung des Servers oder einer Nichtverfügbarkeit des Servers kommt, eine Warnung an die angegebene E-Mail-Adresse.
Einrichten eines Monit MySQL-Überwachungsregelsatzes.
Bezogen aufdie Beispiele, die ich oben verlinkt habe, ich würde annehmen, dass eine solche Konfiguration für MySQL funktioniert. Erstellen Sie zunächst eine Datei wie diese:
sudo nano /etc/monit/conf.d/mysql.conf
Und ich habe das Beispiel angepasst, sodass es sich – nehme ich an – ähnlich verhält wie das, was ich für Apache eingerichtet habe:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
start program = "/usr/sbin/service mysql start"
stop program = "/usr/sbin/service mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
Natürlich sollte dies angepasst werden, um Ihrer tatsächlichen Arbeitsumgebung zu entsprechen (beispielsweise durch Anpassen des Speicherorts mysqld.pid
, der E-Mail-Adresse usw.), aber darüber hinaus ist es in Bezug auf Ideen/Umsetzung ziemlich allgemein gehalten.
Sobald dies eingestellt ist, starten Sie neu monit
und alles sollte gut sein:
sudo service monit restart
Einrichten eines Monit MongoDB-Überwachungsregelsatzes.
Um einen MongoDB-Überwachungsregelsatz zu erstellen, erstellen Sie eine Datei wie diese:
sudo nano /etc/monit/conf.d/mongod.conf
Und hier ist die MongoDB-Überwachungsregel. Beachten Sie, dass diese mit dem aktiven MongoDB-Daemon übereinstimmt und nicht mit einer PID (auch bekannt als: mongod.lock
), da es damit nicht zu funktionieren schien:
check process mongod matching "/usr/bin/mongod"
start program = "/usr/sbin/service mongod start"
stop program = "/usr/sbin/service mongod stop"
if failed host 127.0.0.1 port 27017 protocol http
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
Natürlich sollte dies angepasst werden, um Ihrer tatsächlichen Arbeitsumgebung zu entsprechen – beispielsweise durch Anpassen des tatsächlichen Pfads der /usr/bin/mongod
Binärdatei, der E-Mail-Adresse und dergleichen –, aber darüber hinaus ist es in Bezug auf Ideen/Implementierung ziemlich allgemein gehalten.
Sobald dies eingestellt ist, starten Sie neu monit
und alles sollte gut sein:
sudo service monit restart
Überwachungsmonitor.
Sie können dem Monit-Protokoll folgen, um es in Aktion zu sehen:
sudo tail -f -n 200 /var/log/monit.log
Und als Test können Sie einfach den MySQL- oder MongoDB-Server stoppen und dann sehen, was in diesem Protokoll angezeigt wird. Wenn alles gut geht, sollten Sie den gesamten Überwachungsprozess und den Neustart sehen, einschließlich der Versendung einer E-Mail an die Adresse, die Sie in der Konfiguration festgelegt haben.
Antwort2
Ein einfaches Bash-Skript (oder eine andere Ihnen vertraute Skriptsprache) erledigt die Aufgabe (auszuführen mit sudo):
while true
do
# Ping the MySQL server (or run a real SELECT command using mysql client)
mysqladmin ping
# Check the return code: should be 0 if server is alive
if [[ $? != 0 ]]
then
service mysql restart
fi
# Wait until next check
sleep 60
done