Использование watchdog I6300ESB в виртуальных машинах в Cloud2

Сегодня мы расскажем о полезной возможности Cloud2, которая позволяет повысить доступность виртуальных машин за счет использования виртуального устройства watchdog, которое доступно внутри VPS.

Сначала несколько слов о том, что такое watchdog. В апаратных серверах промышленного класса всегда есть специальная микросхема, которая работает автономно от всего и представляет собой обычный таймер с действием при достижении нуля. По умолчанию, таймер отключен и действие не установлено, но с помощью специального программного обеспечения, например, ipmitool, можно это изменить и задать определенное поведение — например, перезапуск сервера через reset при достижении нулевого значения, а начальное значение, например, установить в 360 секунд. Далее, в системе запускается специальная программа, которая просто обновляет таймер, не давая ему достигнуть нулевой отметки. Таким образом, пока система работает и процессы выполняются, таймер обновляется и watchdog не срабатывает, однако, как только операционная система зависла, программа, обновляющая таймер перестает работать тоже. В течение максимум 360 секунд счетчик достигнет нулевой отметки, и система перезагрузится с помощью виртуального нажатия на кнопку «reset».  Механизм абсолютно надежный, поскольку работает на уровне аппаратного обеспечения, позволяя администраторам в большинстве случаев значительно уменьшить время недоступности систем при возникновении ошибочных ситуаций.

Реализация для виртуальных машин. Для виртуальных машин тоже существуют реализации watchdog, которые внутри виртуальной машины воспринимаются как аппаратные, при этом виртуализация этой микросхемы производится самим гипервизором и работает отдельно от виртуальной машины. Таким образом, если виртуальная машина зависнет, гипервизор сможет выполнить заданное действие для нее, если watchdog настроен и запущен.

Реализация в Cloud2. В Cloud2 используется гипервизор KVM, который поддерживает watchdog на базе микросхемы Intel i6300esb, эмуляция которой и осуществляется гипервизором. Мы задали действие для watchdog как reset, таким образом при зависании машина будет перезапускаться.

Использование watchdog в Cloud2. Использование i6300ESB в ОС Linux не представляет труда. Для начала использования необходимо выполнить следующие действия (Ubuntu Linux 16.04):

Установить ПО watchdog:

# apt-get update && apt install watchdog

Узнать как собрана поддержка устройства I6300ESB для вашей ОС:

# grep I6300ESB /boot/config-$(uname -r)
CONFIG_I6300ESB_WDT=m

Если «m», значит, модуль необходимо загрузить. Если «y», значит, что поддержка встроена в ядро, если «n», требуется пересборка ядра. Скорее всего, у вас будет «m», если это так, необходимо установить дополнительные компоненты ядра:

# apt install linux-image-extra-$(uname -r)

Теперь можно загрузить модуль:

# modprobe i6300esb
# lsmod | grep i6300esb
i6300esb 16384 1

Видим, что все отлично — модуль загружен. Теперь необходимо добавить его для автоматической загрузки. Пакет watchdog в Ubuntu позволяет сделать это через добавление параметра в настройки запуска сервиса watchdog:

# cat /etc/default/watchdog 
run_watchdog=1
run_wd_keepalive=1
watchdog_module="i6300esb"

Последняя строка как раз указывает, что надо сделать такую загрузку. Теперь выполним настройку сервиса watchdog. В самом простом варианте необходимо раскомментировать строку:

# cat /etc/watchdog.conf
watchdog-device = /dev/watchdog

Выполним запуск сервиса watchdog:

# service watchdog start

Если запуск прошел успешно, то в журнале /var/log/syslog, Вы увидите следующие записи:

Oct 2 03:55:08 sop watchdog[22526]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no
Oct 2 03:55:08 sop watchdog[22526]: watchdog now set to 60 seconds
Oct 2 03:55:08 sop watchdog[22526]: hardware watchdog identity: i6300ESB timer

Если система зависнет, то в течение 60 секунд для нее будет выполнено действие «reset». Убедитесь, что сервис watchdog корректно стартует после перезапуска системы.

Проверить работоспособность можно посредством генерации состояния Kernel Panic:

echo c > /proc/sysrq-trigger

Не более чем через 60 секунд система должна перезагрузиться.

В статье приведена настройка только для Ubuntu Linux. Для Debian, CentOS и других ОС семейства Linux настройка будет похожа. Настройка для других операционных систем (MS Windows, *BSD и других) осуществляется посредством интерфейсов и приложений, которые в них предоставляются для взаимодействия с таймером i6300esb и в этой статье не рассматриваются.