Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Автоматический рестарт сервера при зависании
Бывает что сервер упал, и нету никого рядом чтобы его поднять. Особенно обидно, когда это ваш сервер, и никто кроме вас не может его перезагрузить.
Причины могут быть разные, по какой-то причине упал апач, либо возрасла нагрузка и завис процесс, или еще что-то, разбираться кто прав кто виноват нужно потом, главное, быстро ребутнуть сервер, чтобы возобновить работу сайта, а потом уже смотреть логи и графики.
Сервер может упасть ночью, когда вы спите, или вы можете находиться далеко от компьютера, и быть не в состоянии вовремя его перезагрузить, а во время простоя вам будут звонить на телефон недовольные клиенты.
Чтобы этого избежать, для Битрикс веб-окружения я использую дополнительную бесплатную прогу - monit, которая все это дело отслеживает, и легко настраивается через один конфигурационный файл.
Теоретически, все это может делать встроенный в BitrixEnv модуль Nagios, но он мне показался слишком сложным для освоения начинающим LInux-специалистом вроде меня.
Итак, ставим на ваш Centos прогу monit:
yum install monit
После чего заходим в конфигурационный файл /etc/monit.conf и настраиваем в нем свои правила:
Указываем время одного цикла проверки - 60 секунд. То есть, каждые 60 секунд система будет делать проверку на соответствие тех или иных параметров.
# set daemon mode timeout to 1 minute
set daemon 60
Указываем почтовый ящик и почтовый сервер для уведомлений об алертах
set mailserver localhost
set alert my-email@gmail.com
Теперь настраиваем сами уведомления. На всякий случай - будем слать себе письма, если на протяжении последних 60-ти проверок (последнего часа) было занято более 80% дискового пространства на сервере:
check device maindisk with path /dev/xvda3
if space usage > 80% for 5 times within 60 cycles then alert
Ну и конечно - настраиваем мониторинг сервера apache: если нагрузка на процессор на протяжении последних двух минут составляла более 90% - отправляем себе письмо-алерт, если на протяжении последних 5-ти минут нагрузка на процессор держится на уровне более 90% - то рестартуем апач если средняя нагрузка на сервер (load average) за последние 5 минут больше трех - шлем алерт, если больше 5-ти - то рестартуем.
check process httpd with pidfile "/var/run/httpd/httpd.pid"
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if totalcpu > 90% for 2 cycles then alert
if totalcpu > 90% for 5 cycles then restart
if loadavg(5min) greater than 3 then alert
if loadavg(5min) greater than 5 then restart
Обычно этого достаточно, чтобы побороть зависшие процессы (когда один процесс занимает 99% процессорного времени и не умирает). Кроме того, данное правило отслеживает, запущен ли процесс апач, и автоматически его запускает.
После установки правил - стартуем монит:
service monit start
и добавляем его в автозагрузку:
chkconfig monit on
Все, теперь можно наслаждаться автовосстановлением апача после падения. Например, вы можете написать в консоли:
service httpd stop
и наблюдать, как через минуту ваш сервер опять оживет.
Или можете попробовать создать на нем повышенную нагрзурку, и увидеть, как индеец рестартанется.
Вот ссылка на полный вариант конфига, в нем кроме описанного выше, есть системные комментарии и примеры для реализации более сложных проверок.
Конечно, это больше похоже на "Экстренную реанимацию", и если ночью зависание произошло - нужно, проснувшись утром, обязательно разобраться в проблемах (исследуя логи и данные программ для мониторинга), засесть за гугль, найти причину сбоя, и устанить её, а не надеяться что данная проблема сама по себе пройдет. Как правило, если сервер часто зависает - то чем далье, чем больше будут происходить подобные сбои и нужно искать причину, а не лечить последствия.