3

Я использую простой сервер разработки (Ubuntu), на котором иногда происходит сбой MySQL и MongoDB. Я всегда перезапускаю их с помощью sudo service mysql restart .

Хотя я знаю, что мне нужно выяснить, почему они терпят крах - и я буду - я в настоящее время ищу способ автоматически перезапустить их после того, как они потерпели крах. Я думаю, мне нужен какой-то демон, который пингует их и перезапускает, если они больше не реагируют, но я не уверен, как это сделать.

Я читал об инструментах, таких как Nagios, но я думаю, что это немного излишне для моей ситуации.

Кто-нибудь знает, как я могу начать?

2 ответа2

10

Я читал об инструментах, таких как Nagios, но я думаю, что это немного излишне для моей ситуации.

Кто-нибудь знает, как я могу начать?

Легко. Посмотрите на настройку конфигурации мониторинга с Monit. Это легкий и простой в настройке инструмент мониторинга системы, который очень полезен для настройки в сценариях точно так же, как вы описываете; сервис отключается, перезапустите его и предупредите меня об этом.

Я в основном использую его для веб-серверов Apache, но есть много примеров того, что можно сделать для других программ / программ, таких как MySQL и тому подобное.

Настройка Monit.

То, как я это настроил, это так. Сначала установите саму программу 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_address@example.com 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_address@example.com 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 (aka: 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_address@example.com only on { timeout, nonexist }

Конечно, это должно быть настроено в соответствии с вашей реальной рабочей средой, такой как настройка фактического пути двоичного /usr/bin/mongod , адреса электронной почты и т.д., Но в прошлом это довольно общее в идеях / реализации.

Как только это будет установлено, перезапустите monit и все должно быть хорошо:

sudo service monit restart

Мониторинг Монит.

Вы можете следить за журналом Monit, чтобы увидеть его в действии:

sudo tail -f -n 200 /var/log/monit.log

И в качестве теста вы можете просто остановить сервер MySQL или MongoDB, а затем посмотреть, что отображается в этом журнале. Если все идет хорошо, вы должны увидеть весь процесс мониторинга и перезапуск, включая отправку электронного письма на адрес, который вы указали в конфигурации.

3

Простой 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .