Страницы

Сохранить статью у себя в соцсети:

понедельник, 11 ноября 2013 г.

§ QEMU WatchDog.

qemu watchdog.

Бывает такое, что сервер завис... да бывает. И не отвечает. Если причина зависания кроется в возросшей нагрузке, есть шанс что нагрузка упадет и вы сможете попасть на сервер. Но бывает и так что сервер приходится перезагружать. Можно делать это вручную, а можно настроить чтобы перезагрузка выполнялась средствами WatchDog
qemu watchdog
Существуют специальные устройства которые отслеживают состояние сервера и в случае наступления определенных событий выполняют перезагрузку (или любое другое действие в зависимости от настроек). Называются эти устройства Watchdog.
В Qemu есть поддержка эмуляции watchdog-устройств, поэтому можно настроить виртуальную машину таким образом что в случае краха ядра, пика нагрузки, отсутствия сети будет выполнено определенное действие. На самом деле проверок еще больше и действие которое будет выполнено тоже не ограничивается перезагрузкой. Вы можете написать свой скрипт который будет выполняться при наступлении плохих событий.
Для того чтобы система поддерживала watchdog-устройства, будь то виртуальная или физическая машина, в ядре должна быть поддержка этих устройств. Здесь мы рассматриваем Qemu, поэтому в ядрах виртуальных машин должна быть включена поддержка одного из двух устройств Intel 6300ESB или IB700 SBC.
Device Drivers ->
 [*] Watchdog Timer Support ->
   [*]   WatchDog Timer Driver Core
   <M>   Intel 6300ESB Timer/Watchdog
   <M>   IB700 SBC Watchdog Timer

Большинство дистрибутивов имеют встроенную поддержку этих устройств, поэтому как правило к пересборке ядра прибегать не приходится.
Запускаем виртуальную машину с параметрами -watchdog и -watchdog-action. Первый параметр определяет модель используемого устройства, здесь доступны i6300esb и ib700. Второй параметр определяет поведение - reset, shutdown, poweroff, pause, debug и none.
# qemu ... -watchdog i6300esb -watchdog-action reset

Загрузив операционную систему, наличие watchdog проверяется через dmesg
# dmesg |grep WatchDog
[    3.644386] i6300esb: Intel 6300ESB WatchDog Timer Driver v0.05

Теперь осталось установить и запустить watchdog службу. В моем случае используется Gentoo Linux, поэтому установка выполняется через paludis. Однако пакет watchdog не является экзотикой и его можно найти во всех стандартных репозиториях. Служба Watchdog позволяет очень гибко настроить отслеживание условий при которых будет выполнена перезагрузка, это и паника ядра, отсутствие трафика на интерфейсе, отсутствие пинга до узла, высокий load average и многое другое.
# cave resolve watchdog -x

Выполняем минимально необходимую настройку, запускаем сервис и добавляем его в автозагрузку.
# vi /etc/watchdog.conf
watchdog-device = /dev/watchdog
realtime                = yes
priority                = 1
# rc-service watchdog start && rc-update add watchdog default

Теперь когда сервис запущен (статус запуска можно увидеть в /var/log/messages). Можно провести эксперимент, вызвав крах ядра через SysRq интерфейс. Внимание, не делайте этого на критически важных серверах. Во всех случаях (за очень редким исключением когда SysRq не собран в ядре) сервер остановит работу и в лучшем случае будет перезагружен watchdog'ом, в худшем придется делать это вручную. Итак рекомендуется открыть запасную VNC/SPICE консоль, через которую можно будет наблюдать за процессом. И послать команду для SysRq.
# echo c > /proc/sysrq-trigger

Если все настроено правильно, сервис запущен, а модуль загружен, в течение минуты будет выполнена перезагрузка, или то действие которое было указано в -watchdog-action. Все просто.

На главную "Virtualizing Linux"

4 комментария:

  1. Попробовал оба watchdog'a (i6300esb и ib700) на CentOS гипервизоре (гостевые ОС - CentOS 6.4) - не работает =( Хотя задумка хорошая =)

    ОтветитьУдалить
    Ответы
    1. Нужно проверить по шагам и ответить на вопросы:
      1. А в выводе dmesg они обнаруживаются?
      2. Есть ли модуль в выводе lsmod ?
      3. Есть ли /dev/watchdog ?
      4. Запущена ли служба
      Если везде "да" значит надо плясать от того что в логах сервиса.

      Удалить
    2. Алексей, спасибо за помощь! Оказалось, что строчка

      watchdog-device = /dev/watchdog

      по-умолчания закомментирована.

      Все работает как надо теперь.

      Удалить
    3. Да, там механизм простой как палка, проблем с настройкой быть не должно.

      Удалить

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика