24

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

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

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

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

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

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

3 ответа3

33

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

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

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

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

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

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

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

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

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

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

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 или что-то подобное.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .