Вопрос обеспечения бесперебойного энергоснабжения серверов стоит достаточно остро в любой организации – будь то небольшая контора или датацентр с сотнями стоек. Если во втором случае в чрезвычайных ситуациях с подачей электроэнергии из внешних источников в работу включаются генераторы, которые могут обеспечить в некоторых вариантах несколько суток автономной работы (в зависимости от запаса топлива) без вмешательства из вне, то в первом варианте вся нагрузка при отключении электричества ложится на источники бесперебойного питания. Все бы ничего, но вот только основные задачи ИБП – выравнивание напряжения и обеспечение времени работы от батареи в минимальном представлении чуть больше времени выключения самого медленного сервера. Кто-то может поспорить, но все же ИБП не предназначены для обеспечения долговременной (несколько часов и более) работы серверов в ситуации отсутствия электричества, для этого придумали генераторы. Однако покупка генератора, оборудование для него отдельной площадки, прокладка электросети для большинства организаций является неподъемным сценарием, да и, надо признать, абсолютно не нужным.
В таком случае возникает необходимость автоматического отключения серверов до того момента, когда батареи ИБП разрядятся полностью. Теоретически это можно сделать вручную, но даже если у вас всего несколько серверов, это будет не очень удобно и быстро. Ситуация станет серьезной проблемой, если у вас много серверов или ИБП загружены до уровня, близкого к своему максимальному (в этом случае обычно они проработают не более 5-7 минут, если брать в расчет среднестатистический ИБП без дополнительных батарейных блоков). Да и при ручном выключении кто-то должен мониторить ситуацию 24/7, что тоже нереально.
На помощь приходит PowerChute Network Shutdown 1 от APC (далее по тексту PCNS). Эта утилита предназначена для выполнения различных сценариев (чаще всего обычное корректное выключение серверов) при возникновении каких-либо событий в цепи электропитания. Работает она совместно с UPS Network Management Card 2 2 (далее по тексту UPS NMC), которая по сути является платой расширения для различных ИБП. Решение, конечно же, применимо только для ИБП от APC.
В статье я планирую рассказать о своем личном опыте при работе с оборудованием, описанным выше. Большинство моментов касательно установки и настройки оборудования я опущу, поскольку считаю их описание лишим – в сети очень много подробных любительских инструкций, кроме того, сопроводительная литература ко всем продуктам APC доступна в полном объеме и все моменты эксплуатации расписаны крайне подробно.
Итак, к моменту конфигурирования автоматического отключения серверов у меня было следующее оборудование:
1) ИБП Smart-UPS 3000 RM XL 3;
2) Установленная и настроенная плата сетевого управления к ИБП: AP9630 4;
3) Локальная сеть, в которой находятся плата сетевого управления и целевые серверы.
Задача: настроить PCNS на серверах виртуализации Microsoft Hyper-V 2008 R2 – 2012 R2. Процесс установки PCNS и начального конфигурирования через веб-интерфейс я, как и обещал ранее, намерен пропустить. Если у кого-то с этим возникают сложности, рекомендую обратиться к официальной документации 5 6.
Основная сложность настройки заключается в том, что нужно точно себе представлять как будет работать система. Больше всего вопросов возникает на сценарии завершения работы серверов, в официальном руководстве рассматриваются различные варианты отключения и в конечном счете они представляются как красивые диаграммы. Много раз прочитав эти примеры, я выработал для себя следующий алгоритм настройки всей системы:
1) Определите максимальное время работы ИБП при отключенном питании и полной нагрузке. У меня оно равнялось 12-14 минутам, поскольку нагрузка была неполная;
2) Разделите все серверы на два списка (можно и на 3, да хоть на 10, но это усложнит конфигурацию) – критически важные для организации серверы (хотя бы один контроллер домена, почтовый сервер, файловое хранилище и т.п.) и серверы, которые можно безболезненно отключить (обкаточные серверы, WSUS, доп. контроллеры домена и т.п., у каждого свое);
3) Для каждой группы серверов определите время их работы после отключения входного питания ИБП. Для важных серверов постарайтесь максимально продлить время работы, то есть отключайте их в самую последнюю очередь (у меня это 5 минут). Обеспечить это можно только отключением маловажных серверов как можно раньше (я остановился на 30 секундах).
Дальше остается только перейти к настройкам установленных агентов PCNS. Для физических серверов и хостов виртуализации настройки будут немного отличаться – на хостах виртуализации нужно установить время задержки для выключения или миграции виртуальных машин:
В остальном все идентичное, остальные настройки я оставил по умолчанию.
Переходим в пункт меню Configure Events, нам нужно первое событие – UPS On Battery (ИБП работает от батареи, то есть входное напряжение либо упало до нуля, либо слишком низкое для нормальной работы), сразу справа от него в столбце Shutdown нажимаем на значок шестеренки (у меня отображается галочка, поскольку я уже настроил действие при работе от батареи). Выставляем нужное вам значение в секундах. Для себя я определил его в 300 секунд. То есть по истечении этого времени система начнет выключаться, но виртуальным машинам будет предоставлено дополнительное время для завершения работы (его мы указали в настройках Shutdown Settings).
После этого самое время протестировать как все работает на реальной ситуации. Для этого я отдельно сымитировал отключение питания – просто выдернул кабель питания из ИБП. Через 30 секунд у меня начали выключаться второстепенные хосты виртуализации и физические серверы, через 5 минут начали заглушаться виртуальные машины на важных инфраструктурных серверах, когда они выключились, хосты виртуализации заглохли и в серверной воцарилась тишина…
На текущий момент я могу дать несколько рекомендаций по настройке. Они могут показаться очевидными, но все же я их опишу. Кто знает, может быть через некоторое время из головы их вытеснит другая информация, а опыт все же полезный.
1) Спланируйте установку CPNS на ваших серверах: далеко не каждая операционная система поддерживается. Нужно также решить что делать с виртуальными машинами на базе unix-систем, возможно придется писать вручную скрипты, чтобы заглушить их корректным образом. С малораспространенными дистрибутивами и, например, системами для NAS (тот же Openfiler) могут быть серьезные проблемы в виду полного отсутствия их поддержки;
2) Не пожалейте дополнительного времени для выключения виртуальных машин. Вы должны понимать, что когда все виртуалки начнут обращаться к жестким дискам, их быстродействие резко снизится и время завершения работы значительно увеличится;
3) Не старайтесь выжать из вашего старичка ИБП полный максимум. Пусть ваши виртуальные машины и серверы завершат работу немного раньше, чем ИБП разрядится полностью. Да даже если он разрядится всего лишь на 50%, что тут такого? Ваша основная задача не продержать серверы включенными как можно дольше, а корректным образом завершить их работу, в конце концов. Также учтите, что со временем ваш ИБП на батареях будет работать все меньше и меньше в виду их износа, а это уже серьезная причина, чтобы оставить достаточный “запас прочности” по времени;
4) Обязательно протестируйте сценарий отключения. Не пожалейте одного выходного и проведите тестирование отключения серверов и виртуальных машин при реальном отключении электричества. Я проводил это ранним субботним утром с секундомеров в руке;
5) Наверно это надо было написать первым пунктом, но все же: купите уже себе плату управления для ИБП, если у вас её все ещё нет (это не реклама). Не жалейте денег, даже если у вас всего пара серверов в стойке и отключение электричества за свою карьеру вы не видели, ведь перебои питания самым худшим образом сказываются на работе приложений, СУБД особенно.
На этом все. Можете упрекать меня за большое количество “воды”, но в этой статье я постарался максимально подробно описать мысли и логику принятия решений, ведь мануалы сможет прочитать любой, а личный опыт на дороге не валяется.