Тушим сервера при потере питания, если есть ИБП

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

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

В первую очередь, естественно, нужно после сборки все обработать напильником установить ПО от ИБП, и допустим, если Вы счастливый обладатель APC, то в Ваших руках софт - PowerChute Business Edition, который замечательно настраивается и умеет отключать сервер, а при грамотной настройке и группу серверов, но на сколько я помню, в базовом варианте, т.е. в комплекте с их ИБП идет лицензия на отключение всего пяти серверов. А если их больше, то тогда есть возможность запустить скрипт, программу или батч файл. Вот о нем дальше и пойдет речь.

И так, по умолчанию дается default.cmd следующего содержания:

rem -----------------------------------------------------------------------------
rem
rem   Maximize for best viewing
rem   This command file provides examples of proper command file syntax
rem
rem   Command Files run by PowerChute Business Edition must be placed in this directory.
rem
rem   Use the full path name of executable programs and external command files.
rem
rem   The @START command must be used to run executable programs (see example below).
rem   For the @START command, path names that include spaces must be enclosed in quotes;
rem   arguments for the executable must be outside the quotes.  A double quote must
rem   precede the quoted path name.  For example, to execute a command file in
rem   c:\Program Files\APC\PowerChute Business Edition\agent\cmdfiles called myShut.exe,
rem   the following line should be entered in the command file:
rem
rem   @START "" "c:\Program Files\APC\PowerChute Business Edition\agent\cmdfiles\myShut.exe"
rem
rem -----------------------------------------------------------------------------

Можно сделать следующее (добавить в конец этого файла):

@START "" c:\CMD\psshutdown.exe -k -c -t 5 -u admin@domain.ru -p PaSsWoRd \\@c:\CMD\servlist.txt

При этом используется одна из утилит набора PsTools, который можно свободно скачать с сайта technet.microsoft.com, в комплекте идет очень подробный манул, по работе с утилитой.

В файле servlist.txt может быть сколько угодно серверов, нужно помнить только одно, при таком воздействии отключение серверов будет происходить последовательно, и стоит задуматься о параллельном отключении серверов. Что же можно для этого сделать?

Можно сделать множественный вызов как в самом default.cmd файле, так и через другие батч файлы. Точнее, команда @START по своей сути вызывает еще один процесс, за пределами среды батч файла в котором она была запущена. Т.е. можно выполнить следующее:

@START "" c:\CMD\psshutdown.exe -k -c -t 5 -u admin@domain.ru -p PaSsWoRd \\@c:\CMD\servlist1.txt
@START "" c:\CMD\psshutdown.exe -k -c -t 5 -u admin@domain.ru -p PaSsWoRd \\@c:\CMD\servlist2.txt

В этом случае одновременно будет происходить процесс завершения работы по двум спискам.

В качестве примера, вот коды трех файлов, можете поиграться на досуге, параллельные процессы:

main.cmd

echo off
cls
@START cmd /C slave1.cmd
@START cmd /C slave2.cmd
pause

slave1.cmd

echo off
cls
echo SLAVE 1
pause

slave2.cmd

echo off
cls
echo SLAVE 2
pause

Надеюсь, Вам пригодится.

P.S.
У всех производителей ИБП свой софт, и в каждом случае серверное и клиентское ПО настраивается по своему.
Comments