Предохранение сервера от перегрева

Все о Windows, Linux, MacOS, Novell NetWare, DOS и т.д. Сетевые службы, http, ftp, ssh, браузеры, почтовые клиенты и многое другое. Установить, настроить, объединить в сеть, заставить эффективно работать.

Модератор: xdsl

Предохранение сервера от перегрева

Сообщение xdsl 09 окт 2013, 13:29

На днях понял, что не стоит ждать милостей от природы и спасение утопающих дело рук самих утопающих. История такова: серверное помещение Вычислительного центра охлаждается кондиционером, функционирующим 24*7*365. Ночные отключения света у нас в вузе - дело в порядке вещей, перепады напряжения - еще более частое явление. В результате таких пертурбаций, а также из-за некоторых других, не менее печальных форсмажоров, иногда возникает ситуация, при которой сервера начинают или продолжают работать, а кондиционер - не функционирует (выбило фазу, сгорел пускатель, хладогент испарился и т.п.). Следствие - в течении часа температура в серверной поднимается до уровня парилки, сервера перегреваются и аварийно выключаются, что во первых - никак не удлиняет их срок службы, а во вторых - приводит к потерям данных.

Ситуацию может помочь разрешить датчик температуры серверного помещения, контролируемый с серверов по сети или через COM/USB. Устройство заказано, жду уже долго. Дополнительно заказан зимний пакет для нового кондиционера (старый как раз скончался во время одного из перепадов напряжения), обещают поставить буквально на днях. Однако на дворе середина октября, морозы могут брякнуть в любой момент, а после остановки кондиционера без зимнего пакета его уже будет не запустить. Да и остальные форсмажоры никто не отменял.

На вопрос "что делать" ответ один - извернуться и минимизировать потери. Извернуться я решил с помощью встроенных датчиков температуры процессора и жестких дисков. Минимизировать потери - с помощью определения высоких и критических значений температуры (ниже аппаратно-критических, при которых система аварийно останавливается) и штатного завершения работы, если хотя-бы один из датчиков покажет превышение критического значения. В планах - генерировать отправку мне на электронную почту соответствующего сообщения, если датчики покажут превышение высокого значения.

Конечно, датчики процессора и жестких дисков не покажут точной картины, мало того, анализ датчиков температуры процессора может стать причиной остановки сервера, загруженного серьезной работой. Здесь главное найти баланс.

Теперь - инструментарий.
lm_sensors + драйвера для датчиков процессора. У меня это драйвера k8temp на одном из серверов и coretemp на остальных.
smartctl для получения значения температуры жесткого диска (более простой в использовании hddtemp оказался неработоспособен для моих RAID-контроллеров)
bash
cron

Практический анализ применимости инструментария показал, что все сервера, кроме одного старинного HP ProLiant DL380 G4, имеют датчики температуры процессора. Последний их то-же имеет, однако доступны они только через проприетарные драйвера, выпуск которых HP прекратил на ядре Linux 2.4. К счастью этот-же сервер имеет доступный датчик температуры на RAID-контроллере, в то время как остальные сервера такой радости не имеют. В целом получается удачно: на пролианте контролируем жесткие диски, на остальных серверах - процессоры.

Вот что получилось:
Скрипт /opt/sns/sns.sh, вариант для RAID на HP ProLiant DL380 G4.
Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка bash
!/bin/bash

high=40
critical=60
((hcount=ccount=0))

sns=`smartctl -A -d cciss,0 /dev/cciss/c0d0`

for f in `echo "$sns" | sed -nr 's/(Current Drive Temperature.*)([0-9][0-9])(.*)/\2/p'`
do
 if ((f>high))
 then
  ((hcount++))
 fi
 if ((f>critical))
 then
  ((ccount++))
 fi
done

if ((ccount>0))
then
    poweroff
fi


Скрипт /opt/sns/sns.sh, вариант для остальных серверов:
Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка bash
#!/bin/bash

high=55
critical=75
((hcount=ccount=0))

sns=`sensors`

for f in `echo "$sns" | sed -nr 's/(Core[^+]*[+])([0-9][0-9])(.*)/\2/p'`
do
 if ((f>high))
 then
  ((hcount++))
 fi
 if ((f>critical))
 then
  ((ccount++))
 fi
done

if ((ccount>0))
then
    poweroff
fi


Далее в /etc/crontab добавляем строку
Код: Выделить всё
* * * * * root /opt/sns/sns.sh

Теперь скрипт будет запускаться раз в минуту, мониторить температуру и штатно отключать сервер при перегреве.

Все. Спокойно ждем формажора, страховка куплена ;)
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Предохранение сервера от перегрева

Сообщение xdsl 11 окт 2013, 07:37

О! поставили зимний пакет, вероятность форсмажора значительно упала.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.


Вернуться в Операционные системы и сетевое программное обеспечение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5