RozarioAgro wrote:
Я видел ваше руководство, в общем то по его мотивам и начал создавать свое, правда акцентировался на
платной версии.
По поводу тушения СХД, в моем случае, при использования NetApp в качестве хранилища, я стремился корректно завершить
работу виртуальных машин, а установленная в NetApp батарея nvram должна обеспечить сохранность не сброшенных из кеша данных.
А как вы контролируете чтобы СХД выключилась последней? Ведь если СХД выключится первым , то бесполезно
корректно завершать работу виртуальных машин.
Сечас я реализовал такую схему.
UPS ippon 1K (online)
Первый UPS держит Storage, 2-й UPS держит 2 хоста. Т.е 2й Ups в 2 раза быстрее сдохнет . что гарантирует выключение storage последним.
Storage(Freenas) сам мониторит свой UPS через com-port. (через usb не захотел)
2-й ups мониторит VM через проброшенный USB-port. на Battary Low запускается скрипт:
start c:\wprog\UPS\plink.exe root@192.168.11.23 -pw xxx "nohup /vmfs/volumes/vol1/my/esxi-off.sh &"
start c:\wprog\UPS\plink.exe root@192.168.11.24 -pw xxx "nohup /vmfs/volumes/vol1/my/esxi-off.sh &"
esxi-off.sh:
#!/bin/sh -
PATH=$PATH:/bin:/usr/bin:/usr/sbin
LOG_FILE=/vmfs/volumes/vol1/my/shutdown.log
Host1=$(vim-cmd hostsvc/net/info |grep ipAddress |grep 192.168.11|awk '{print $3}')
echo -e `date "+%Y-%m-%d %H:%M:%S"` "Esxi $Host1 Shutdown begin ...-4 hours in date" >> $LOG_FILE
# start for loop to grab VMIDs then send power.shutdown requests using vim 3 seconds apart
for i in `vim-cmd vmsvc/getallvms | sed '1d' | awk '{print $1}'`
do
STATE=$(vim-cmd vmsvc/power.getstate $i | grep -v 'runtime')
if [ "$STATE" = "Powered on" ]
then
VMNAME=$(vim-cmd vmsvc/get.summary $i |grep 'name =' |awk '{print $3}')
len1=${#VMNAME}
len1=$(($len1-3))
VMNAME=${VMNAME:1:$len1}
if [ $VMNAME != "Avers" ]
then
# Avers has UPS and started it script , exclude it
echo -e `date "+%Y-%m-%d %H:%M:%S"` "VM $VMNAME is: $STATE, trying guest shutdown..." >> $LOG_FILE
vim-cmd vmsvc/power.shutdown $i
sleep 2
fi
fi
done
echo "Successfully sent shutdown sequence to Virtual Machines on the host"
echo -e `date "+%Y-%m-%d %H:%M:%S"` "Esxi $Host1 poweroff..." >> $LOG_FILE
poweroff
----------------------------
Это срипт намного быстрее всё выключает, чем просто poweroff. т.к. poweroff последовательно выключает VM и не начинает выключение второй VM пока не выключилась первая... UPS дано сдохнет при такой логике.
А это скрипт сразу выключает все запущенные VM... время очень ценно. UPS после Battry low signal долго держать напругу не сможет.
Плюс Ippon , что они хорошо работают с Power Race. Задал что выключение через 5 мин, и что бы не было он через 5 мин выключит питание серверов.
Минус в том, что VM контролирующая UPS (Avers) не может переехать на другой хост в HA... так как на неё UPS физически завязан.
В скором времени решу этот вопрос.
Попутно написал скрипт гашения всей инфркструктуры:
stop_all.bat:
@Choice /C YN /M "VmWare vShpere Shutdown ? "
@if %ERRORLEVEL% EQU 2 goto Exit1
plink root@192.168.11.23 -pw xxx "nohup /vmfs/volumes/vol1/my/esxi-off.sh &"
plink root@192.168.11.24 -pw xxx "nohup /vmfs/volumes/vol1/my/esxi-off.sh &"
:Again1
@Echo %TIME%:Wait for shutdown Esxi_1
@ping 192.168.11.23 -n 10 -w 100 | find "TTL=" > nul
@if %ERRORLEVEL% EQU 0 goto Again1
:Again2
@Echo %TIME%:Wait for shutdown Esxi_2
@ping 192.168.11.24 -n 10 -w 100 | find "TTL=" > nul
@if %ERRORLEVEL% EQU 0 goto Again2
Rem Shutdown NAS
plink root@192.168.11.21 -pw xxxx "nohup /sbin/shutdown -p now &"
:Again3
@Echo %TIME%:Wait for shutdown NAS
@ping 192.168.11.21 -n 5 -w 100 | find "TTL=" > nul
@if %ERRORLEVEL% EQU 0 goto Again3
@ECHO ------- Done. All Servers DOWN.
@pause
:Exit1