Ever Sinline RT XL 3000
integracja z VMware
Zima, energetyka, drogo! To słowa, które w 2022 roku słyszmy cały czas. W naszej serwerowni postanowiliśmy przygotować się na sytuacje krótszych i dłuższych blackoutów. Kupiliśmy nowego UPSa od polskiego producenta – Ever, którego jesteśmy parterem. Znamy te rozwiązania i stosujemy je w różnych projektach.
Duża moc, dobra cena i parametry przesądziły o wyborze.
Brakowało nam tylko jednej rzeczy – integracji z VMware tak, aby przy niskim poziomie baterii móc położyć miękko całe środowisko. Wiadomo jak reagują bazy danych na nagłe wyłączenia – kilka razy się uda, ale łatwo o potencjalne problemy. Dodam, że mamy kilka hostów działających z vCenter – wszystko na najnowszej wersji 7.0U3.
Ever nie oferuje natywnego wsparcia takiej funkcjonalności – ma ją za to zachodnia konkurencja. Tyle że taki sam UPS kosztowałby dokładnie tyle samo tylko ze znaczkiem EUR zamiast PLN na końcu.
Koledzy z Evera podpowiedzieli kilka rzeczy i postanowiłem to zrobić sam.
[br]
Jak możecie zrobić to sami?
Na początku oczywiście zainstalowałem PowerSoft na naszym serwerze Windows Server 2016 oraz doinstalowałem PowerCli.
Install-Module VMware.PowerCLI -Scope CurrentUser
> Connect-VIServer -Server vcenter -User ups-shutdown@vsphere.local -Password tajnehaslo
Name Port User
—- —- —-
vcenter 443 VSPHERE.LOCAL\ups-shutdown
PS C:\Users\Administrator.WIN-9EAP947T44V> GET-VM
Name PowerState Num CPUs MemoryGB
—- ———- ——– ——–
mz-test PoweredOff 8 16.000
………..
Działa bez zarzutu!
[br]
Pora zabrać się za PowerSoft. To oprogramowanie ma monitorować UPS i wywoływać nasz skrypt.
Ponieważ nie chcemy składać środowiska, jak nam zniknie napięcie, to na kilka minut musimy posłużyć się obsługą zaawansowanych zdarzeń w PowerSoft. Oprogramowanie skomplikowane nie jest, ale pozwoli nam zrobić wszystko, co chcemy.
Wchodzimy w event configuration. Mamy tam co prawda gotowe zdarzenia, jednak nie mamy nic co odnosiłoby się do czasu autonomii. Ja chciałbym, aby środowisko wirtualne złożyło się w sytuacji, gdy będziemy mieć mniej niż 15 minut czasu pracy na bateriach. Dzięki pomocy kolegom z IT Evera mamy następujące warunki do spełnienia:
Warunki początkowe:
((stateBatteryBackup==ON)&&(paramAutonomyTime<=10))
Warunki końcowe:
((stateNormal==ON)||(stateAvrActive==ON))
PS C:\Users\Administrator.WIN-9EAP947T44V> Shutdown-VMGuest -VM CSR1000V -Confirm:$False
Shutdown-VMGuest : 11-Oct-22 1:53:50 PM Stop-VMGuest Operation “Shutdown VM guest.” failed for VM “CSR1000v” for the following reason: Cannot complete operation
because VMware Tools is not running in this virtual machine.
At line:1 char:1
+ Shutdown-VMGuest -VM CSR1000V -Confirm:$False
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Stop-VMGuest], VimException
+ FullyQualifiedErrorId : Client20_VmGuestServiceImpl_ShutdownVmGuest_ViError,VMware.VimAutomation.ViCore.Cmdlets.Commands.StopVmGuest
No tak – brak VMware Tools.
Spróbujmy więc maszynę VM Tools
Działa. Maszyna grzecznie i miękko się wyłączyła.
No to czas na skrypt. Tutaj spora uwaga – skrypt odpalany przez PowerSoft należy umieścić w katalogu C:\Program Files\PowerSoft Professional. Zdarzenia odpalające skrypt działają z poziomu usługi, a więc Local Service. Na naszym Windows Server 2016 było z tym sporo zamieszania i straciłem kilka godzin na walkę z uprawnieniami. Jak zrobimy to we wskazanym katalogu, to będzie prosto i szybko ?
PowerSoft uruchamia jeden plik – aby nie bawić się z przekazywaniem parametrów, stworzyłem plik .bat, który uruchamia skrypt:
shutdown_ups.bat
powershell -NoProfile -ExecutionPolicy Bypass “. .\shutdown_script.ps1” > logi.txt
Proste uruchomienie powershell’owego skryptu z logiem do pliku logi.txt.
Pora na nasz główny skrypt. Chcę zalogować się na vCenter (działamy na vCnter 7.0U3) i położyć wszystkie maszyny, które są podniesione – na początku OPRÓCZ vCenter (w końcu skrypt działa na vCenter). Na końcu kładziemy vCenter.
Niestety skrypt nie złoży w ładny sposób systemów operacyjnych bez VMWARE Tools (!!!) – komendy Stop-VMGuest zrzucą błąd. Dopiero kolejna komenda zrobi PowerOff maszyn bez zainstalowanych VMware Tools – trochę brutalne ale cóż… U nas wszystkie ważne maszyny mają VMware Tools – ale zawsze się trafi kilka maszynek demo gdzie vmtools nie ma.
Dodatkowo na razie stwierdziłem, że nie będziemy kłaść hostów. Na razie. Musielibyśmy dodatkowo wprowadzić hosty w maintenance mode i potem je położyć. ESXi powinien braki prądu przeżyć bez większych problemów.
[br]
Nasz skrypt wygląda następująco:
shutdown_script.ps1
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
Connect-VIServer -Server vcenter -User ups-shutdown@vsphere.local -Password xyz
Get-VM | Where-object { $_.PowerState -eq ‘PoweredOn’ -and $_.name -notlike ‘VMware vCenter Server*’ } | Stop-VMGuest -Confirm:$false
Sleep 10
Get-VM | Where-object { $_.PowerState -eq ‘PoweredOn’ -and $_.name -notlike ‘VMware vCenter Server*’ } | Stop-VM -Confirm:$false
Sleep 30
Get-VM | Where-object { $_.PowerState -eq ‘PoweredOn’ -and $_.name -like ‘VMware vCenter Server*’ } | Stop-VMGuest -Confirm:$false
Dzięki takiemu rozwiązaniu możemy nie bać się dłuższych przerw w zasilaniu!
autorem artykułu jest:
Piotr Szafran Dyrektor – techniczny/CEO w Network Experts Sp. z o.o. sp. k.
Posiada ponad 15 lat doświadczenia w dużych sieciach operatorskich jak i enterprise. Realizował projekty jako inżynier w Citibank oraz Główny Architekt sieci Exatela, zrealizował projekty za ponad 10M USD.
Masz pytania? Napisz
To również może Cię zainteresować