Обнаружение, когда сервер работает от батареи ИБП


24

У меня есть домашний сервер (HP Proliant ML310 G4), который я купил у своего работодателя около месяца назад. Сервер работает под управлением Debian Linux, и я использую его практически для всего. Я могу справиться с этим, потому что мои потребности не так требовательны, поэтому сервер редко находится под большой нагрузкой в ​​любой момент времени. Этот сервер имеет массив RAID 1 объемом 2 ТБ (с одним горячим резервом), управляемый mdadm, который я использую для обмена файлами по сети через Samba. Я запускаю ОС с меньшего жесткого диска, который не является частью массива.

Я питаю сервер от небольшого ИБП мощностью 255 Вт, потому что он мне нужен, чтобы выдерживать незначительные колебания мощности, не выходя из строя. Это очень важно, потому что внезапное нечистое завершение работы (вызванное падением напряжения или отключением питания) может испортить массив RAID, что уже произошло в одном случае.

Я полагаю, что в случае сбоя питания ИБП будет работать только 10-15 минут. Может быть больше, но я не хочу автоматически предполагать, что есть. Этого достаточно, чтобы пройти через отключения, которые длятся несколько минут или меньше. Однако, если питание отключается в течение нескольких часов, мне нужно, чтобы сервер автоматически отключился, прежде чем отключится питание ИБП. Надеемся, что в таких ситуациях целостность RAID не будет нарушена.

Такого рода вещи очень просты на ноутбуке, поскольку в нем есть встроенные датчики, позволяющие определить, когда он работает от батареи, а на этом сервере - нет (насколько я знаю). У меня необычная настройка сети, в которой мой модем DSL отделен от маршрутизатора. Маршрутизатор также находится на ИБП, что позволяет мне подключаться через SSH через мой ноутбук и выключать сервер в случае сбоя питания. К сожалению, это работает, только если я там в это время, чтобы сделать это. Мне нужно решение, которое всегда работает, независимо от того, вмешиваюсь я или нет.

Так как мой DSL модем не подключен к ИБП, он отключится, если отключится питание. Я настроил это намеренно, потому что у меня есть идея, как решить эту проблему: я думал о написании сценария, который будет пинговать google.com или какой-либо другой сайт с высоким трафиком / высокой доступностью. Если эхо-запрос завершится успешно, сервер продолжит работу. Если сбой проверки связи (из-за того, что модем выключен), сценарий подумает, что питание отключено, и скажет серверу завершить работу. Я бы добавил скрипт в Cron и запускал его каждые 5 минут. Мы надеемся, что это даст серверу достаточно времени для выключения, прежде чем ИБП перестанет работать.

Прежде чем приступить к написанию сценария, я хотел бы узнать, есть ли лучший способ сделать то, что мне нужно. Заранее благодарю за любую помощь.


15
Вы не должны пинговать внешний сайт, а пинговать IP-адрес вашего модема DSL.
LawrenceC

1
@ultrasawblade ... звучит как ответ, пахнет как ответ ... это ответ!
Pureferret

1
Как упоминает @ultrasawblade, НИКОГДА не полагайтесь на внешние источники для внутренней настройки. Например, если ваш интернет внезапно выходит из строя, вы теряете связь, и ваш сервер выходит из строя. Если Google.com решит изменить свое имя по какой-либо причине, ваш сервер отключится. Если вы пингуете их с использованием IP, и эта конкретная ферма серверов отключается, ваш сервер также отключается. это касается любого внешнего источника. Если вы не уверены на 100%, что ваш сервер ДОЛЖЕН быть ТОЛЬКО включен, когда этот другой сервер доступен, вы не хотите полагаться на этот другой сервер по любой причине.
Nzall

Ни один из этих ответов не работает для вас?
Дейв

Ответы:


34

Существует старый, но проверенный способ: использовать старый аналоговый модем. Вот как

  • Подключите модем к серверу через последовательный порт (например, ttyS0)
  • Подключайте источник питания модема не к ИБП, а непосредственно к электросети.
  • НЕ подключайте ничего к телефонной линии модема

Теперь опрашивайте модем каждые несколько секунд, отправляя ATZ[Enter]и ожидайте OK[Enter]- если модем не отвечает, вы можете предположить, что он не имеет питания, то есть ИБП работает от батареи.

редактировать

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

Редактировать 2

Из комментариев:

  • Конечно, вы должны сохранять какое-то состояние от одной проверки к другой, отключаясь только после неудачной проверки N. Я не упомянул об этом, так как это справедливо для всех возможных проверок не только модема
  • Разница между использованием модема и использованием чего-либо , имеющего отношение к сети, заключается в том, что произойдет временная потеря сетевого подключения: вы не хотите беспокоиться о «Вход отключен, сервер на USV», если вы перезагрузите коммутатор или перенастроить VLAN. По моему опыту, последовательная линия настолько надежна, насколько это возможно.

1
Хороший ответ, но я бы посоветовал добавить предохранитель, который проверяет несколько раз, прежде чем он действительно отключается. (так что вам не придется отключаться в течение 5 минут отключения). И я думаю, что pinging swich также будет достаточно (просто ничего за пределами вашей сети).
HTDutchy

@HTDutchy Смотрите мои изменения!
Евгений Рик

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

22

Обычно ups поставляется с разъемом USB или COM1. Когда вы подключите это к своему серверу, вы сможете начать мониторинг ИБП.

В среде Windows, без установки программного обеспечения, сообщения уже зарегистрированы, и он отключит сервер для вас. Я не знаю, как это работает на Linux, но я уверен, что есть несколько пакетов программного обеспечения для взаимодействия с вашим ИБП.


Я только что проверил свой ИБП, и, к сожалению, он не имеет ничего подобного. Он просто имеет 8 разъемов питания (4 на аккумуляторе и 4 без) и линейные и линейные разъемы для телефонных шнуров.
Уилл Крафт

27
Тогда получите ИБП, который может общаться с компьютером.
Ramhound

@Ramhound Это не может быть вариантом, ИБП могут быть довольно дорогими, и есть более дешевые способы.
Vality

Я не согласен с тем, что есть другие способы обнаружить, что вы работаете от батареи ups, которую вы даже не можете обнаружить на том уровне
Ramhound

1

Если вы используете Debian, попробуйте использовать NUT (инструменты сетевого ИБП). Я использую NUT, чтобы делать то, что вы описываете, на моем Synology NAS (на котором запущен busybox) и на домашнем веб-сервере под управлением Ubuntu 12.04 LTS. NAS подключен через USB к ИБП по той же причине, что и вы, потенциальная потеря всех моих файлов.

Я считаю, что ореховый демон каждую секунду запрашивает ИБП для определения статуса. Когда ИБП находится в режиме работы от батареи, его можно настроить на корректное отключение или сначала подождать X минут и т. Д. Вы также можете настроить несколько клиентов для подключения к демону орехов, который вы запускаете на своем сервере. Таким образом, ваш сервер также может корректно отключить несколько компьютеров в вашей сети. Для выполнения завершения работы вы можете предоставить свой собственный сценарий для служб отключения определенным образом или использовать встроенный сценарий, который просто вызывает shutdown -h, если я правильно помню.

Сайт NUT

Были лучшие сайты для поиска информации, но я не могу вспомнить их сейчас. Конфигурация может быть трудной, но если вы говорите о возможной потере RAID, проверьте это! В зависимости от ваших потребностей, вам может не понадобиться весь комплект NUT, вы можете обойтись только с частью UPSMON. Я думаю, вы можете получить это в пакете Ubuntu "Nut-Client".

Существует также NUT-клиент для Windows, но в Windows вам лучше использовать что-то вроде PowerChute или что-то подобное.


Как уже говорилось ранее, похоже, что ИБП OP не имеет никакого способа связи с компьютером, USB или сетью.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.