Korrekt lukning af hypervisoren VMWare ESXi ved kritisk niveau af APC UPS-batterioplading

Der er mange artikler om, hvordan man konfigurerer PowerChute Business Edition og hvordan man opretter forbindelse til VMWare fra PowerShell, men jeg har ikke set alt dette samlet et sted med beskrivelse af de fine detaljer. Og der er nogle.

1. Introduktion

Selvom vi har en vis tilknytning til energi, opstår der nogle gange problemer med elektriciteten. Her kommer UPS'en ind i billedet, men desværre er dens batterier ikke holdbare. Hvad skal man gøre? Slukke!

Da alle servere var fysiske, gik tingene fint, og vi blev reddet af PowerChute Business Edition. Den er gratis og til 5 servere, hvilket var mere end tilstrækkeligt. På én maskine var agenten, serveren og konsollen installeret. Da deadline nærmede sig, udførte agenten blot et batchscript, hvori shutdown.exe /s /m blev sendt til naboserverne, og derefter slukkede den for sin egen OS. Alle er i live.
Derefter kom tiden virtual machines.

2. Data og overvejelser

Så hvad har vi? Næsten ingenting – én fysisk server med Windows Server 2008 R2 og én hypervisor med flere virtuelle maskiner, herunder Windows Server 2019, Windows Server 2003 og CentOS. Og også en UPS – APC Smart-UPS.

Vi har hørt om NUT, men vi har endnu ikke nået at studere det, vi har kun brugt det, der var tilgængeligt, nemlig PowerChute Business Edition.

Hypervisoren kan selv afslutte sine virtuelle maskiner, det eneste der er tilbage, er at informere den om, at det er tid. Der er et nyttigt værktøj kaldet VMWare.PowerCLI, som er en udvidelse til Windows Powershell, der netop tillader at oprette forbindelse til hypervisoren og informere den om alt, hvad der er nødvendigt. Der er også mange artikler om konfigureringen af PowerCLI.

3. Processen

UPS'en blev fysisk tilsluttet COM-porten på serveren 2008, heldigvis var den der. Selvom det ikke er essentielt – man kunne have tilsluttet sig via en interfaceconverter (MOXA) til enhver virtuel Windows-server. Herefter udføres alle handlinger på den maskine, som UPS'en er tilsluttet – Windows Server 2008, medmindre andet specifikt er angivet. Her blev agenten PowerChute Business Edition installeret. Her er den første fine detalje: agenttjenesten skal køres ikke af systemet, men af brugeren, ellers kan agenten ikke udføre cmd-filen.

Derefter installerede vi .Net Framework 4.7. Her kræves der en genstart, selvom frameworket ikke tydeligt beder om det efter installationen, ellers går det ikke videre. Derefter kan der også komme opdateringer, som også skal installeres.

Derefter installerede vi PowerShell 5.1. Også her kræves der en genstart, selvom det ikke beder om det.
Derefter installer vi PowerCLI 11.5. Det er en ret ny version, hvilket også indebærer de tidligere krav. Det kan gøres via internettet, der er mange artikler om det, men vi havde det allerede downloadet, så vi kopierede blot alle filer til mappen Modules.

Vi har kontrolleret:

Get-Module -ListAvailable

Okay, vi ser, at vi har installeret:

Import-Module VMWare.PowerCLI

Ja, Powershell-konsollen er selvfølgelig kørt som Administrator.

Powershell-indstillinger.

  • Tilladelse til at køre alle scripts:

Set-ExecutionPolicy Unrestricted

  • Eller tillad kun at ignorere certifikatfejl i scripts:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 

  • Tillad PowerCLI at oprette forbindelse til servere med ugyldige (udløbne) certifikater:

Set-PowerCLIConfiguration -InvalidCertificateAction ignore -confirm:$false

  • Undertrykke PowerCLI's meddelelse om deltagelse i brugernes erfaringer, ellers kan der være meget unødvendigt i loggen:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false

  • Gem brugerens legitimationsoplysninger til login på VMWare-værten, så de ikke bliver afsløret i scriptet:

New-VICredentialStoreItem -Host address -User user -Password 'password'

Tjek vil vise, hvem vi har gemt:

Get-VICredentialStoreItem

Også forbindelsen kan testes: Connect-VIServer address.

Selve scriptet, for eksempel: forbinde, slukke, for en sikkerheds skyld hurtigt afbryde, der er flere muligheder:


    Connect-VIserver -Server $vmhost 
    Stop-VMHost $vmhost -force -Confirm:$false 
    Disconnect-VIserver $vmhost -Confirm:$false

4. Default.cmd

Den kommandofil, der kører af APC-agenten. Ligger i “C:Program Files[(x86)]APCPowerChute Business Editionagentcmdfiles”, og indeni:

«C:Windowssystem32WindowsPowerShellv1.0powershell.exe» -File «C:…shutdown_hosts.ps1»
Det ser ud til, at vi har konfigureret og kontrolleret alt, vi har endda kørt cmd – det fungerer korrekt, slukker.

Vi kører en test af kommandoen fra APC-konsollen (der er en Test-knap) – det virker ikke.

Her er den akavede situation, hvor alt det arbejde vi har gjort, ikke har ført nogen vegne.

5. Katarsis

Vi ser på Task Manager, ser – cmd blinkede forbi, powershell blinkede forbi. Vi ser nærmere efter – cmd *32 og, selvfølgelig, powershell *32. Vi forstår, at APC-agentens tjeneste er 32-bit, og derfor starter den den tilsvarende konsol.

Vi åbner powershell x86 som administrator, gentager installationen og konfigurationen af PowerCLI fra punkt 3.

Og vi ændrer linjen, der kalder powershell:

"C:Windows<b>SysWOW64</b>WindowsPowerShellv1.0powershell.exe…

6. Happy end!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster