
Я использую простой сервер разработки (Ubuntu), на котором MySQL и MongoDB иногда падают. Я всегда перезапускаю их с помощью sudo service mysql restart
.
Хотя я знаю, что мне нужно выяснить, почему они падают — и я это сделаю — я сейчас ищу способ автоматически перезапускать их после падения. Думаю, мне нужен какой-то демон, который пингует их и перезапускает, если они больше не отвечают, но я не уверен, как это сделать.
Я читал о таких инструментах, какНагиос, но я думаю, что это немного перебор в моей ситуации.
Кто-нибудь знает, как мне начать?
решение1
Я читал о таких инструментах, какНагиос, но я думаю, что это немного перебор в моей ситуации.
Кто-нибудь знает, как мне начать?
Легко. Посмотрите, как настроить конфигурации мониторинга с помощьюМонит. Это легкий и простой в настройке инструмент мониторинга системы, который очень полезен для настройки в сценариях, которые вы описываете: служба выходит из строя, перезапускаю ее и оповещаю меня об этом.
Я в основном использую его для веб-серверов Apache, но есть имножество примеров того, что можно сделать для других программ/софтатакие как MySQL и т.п.
Настройка Монитора.
Я настроил это так. Сначала установите саму программу Monit следующим образом:
sudo apt-get install monit
После установки отредактируйте конфигурацию здесь; я предпочитаю использовать , nano
но вы можете использовать любой текстовый редактор, который вам больше нравится:
sudo nano /etc/monit/monitrc
Измените значения демона по умолчанию для проверки служб каждые 60 секунд с задержкой запуска 120:
set daemon 60
with start delay 60
Затем найдите mailserver
область monitrc
и добавьте следующую строку. Для работы этого необходимо активировать Postfix или SMTP. Обычно на моих серверах установлен Postfix, поэтому я использую следующую настройку:
set mailserver localhost
Затем я убеждаюсь, что каталог конфигурации Monit настроен следующим образом:
sudo mkdir -p /etc/monit/conf.d
Настройка набора правил мониторинга Monit Apache2.
Теперь — как я уже сказал — я в основном использую Monit для мониторинга Apache, поэтому это простая конфигурация, которую мне нравится использовать, но основная концепция похожа для MySQL, MongoDB или других вещей. Я бы сохранил ее в этом файле:
sudo nano /etc/monit/conf.d/apache2.conf
И вот содержимое этого файла:
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 }
Синтаксис достаточно понятен, но в целом:
- Процесс зависит от
apache2.pid
; обязательно измените его так, чтобы он соответствовал фактическому местоположению вашегоapache2.pid
илиhttpd.pid
в вашей среде. - Затем идут команды, связанные с процессами
start
иstop
. - И имеет логику, которая контролирует веб-сервер на
80
портуlocalhost
(127.0.0.1
) - И только действия сервера недоступны в течение 15 секунд.
- А если ему приходится действовать, он пытается перезапустить.
- А затем отправляет оповещение на указанный адрес электронной почты в случае истечения времени ожидания сервера или его отсутствия.
Настройка набора правил мониторинга Monit MySQL.
На основепримеры, на которые я ссылался выше, я бы предположил, что такая конфигурация будет работать для MySQL. Сначала создайте файл вроде этого:
sudo nano /etc/monit/conf.d/mysql.conf
И я адаптировал пример так, чтобы он, как я предполагаю, вел себя аналогично тому, что я настроил для Apache:
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 }
Конечно, это следует подкорректировать в соответствии с вашей фактической рабочей средой, например, скорректировать местоположение mysqld.pid
, адрес электронной почты и т. д., но в остальном это довольно общие идеи/реализация.
После настройки перезагрузите компьютер, monit
и все должно быть хорошо:
sudo service monit restart
Настройка набора правил мониторинга Monit MongoDB.
Чтобы создать набор правил мониторинга MongoDB, создайте файл следующего вида:
sudo nano /etc/monit/conf.d/mongod.conf
А вот правило мониторинга MongoDB; обратите внимание, что оно соответствует активному демону MongoDB, а не PID (он же: mongod.lock
), поскольку с ним оно, похоже, не работает:
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 }
Конечно, это следует настроить в соответствии с вашей реальной рабочей средой, например, скорректировать фактический путь к /usr/bin/mongod
двоичному файлу, адрес электронной почты и т. д., но в остальном это довольно общие идеи/реализация.
После настройки перезагрузите компьютер, monit
и все должно быть хорошо:
sudo service monit restart
Мониторинг Монит.
Вы можете следить за журналом Monit, чтобы увидеть его в действии:
sudo tail -f -n 200 /var/log/monit.log
И в качестве теста вы можете просто остановить сервер MySQL или MongoDB и посмотреть, что отображается в этом журнале. Если все пройдет хорошо, вы должны увидеть весь процесс мониторинга и перезапуска, включая отправку электронного письма на адрес, который вы указали в конфигурации.
решение2
Для этой работы подойдет простой скрипт bash (или любой другой знакомый вам язык сценариев) (его нужно запустить с помощью 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