Das Herunterfahren von VMware ESXi wird von einer über USB angeschlossenen APC-USV ausgelöst


18

Ich versende eine Reihe von ESXi 5.1-Servern an Remotestandorte, wo sie über APC UPS mit Strom versorgt werden.

Ich möchte, dass die USV das Herunterfahren des verbundenen Servers auslöst. Ich würde mich dann auf die ESXi-Konfiguration verlassen, um das Herunterfahren / Suspendieren der auf ihr gehosteten VMs zu gewährleisten.

Ich kann sehen, dass APC über eine Lösung verfügt , die mithilfe des PowerChute-Netzwerk-Shutdowns dokumentiert wurde. Hierzu ist jedoch die Einrichtung eines zusätzlichen Servers pro Büro erforderlich. Für jede USV sind Netzwerkkarten erforderlich. In der Regel verwenden wir UPS ohne Netzwerkkarte (z. B. Back-UPS Pro). Sie werden mit einem USB-Anschluss geliefert und sind an den Standorten, an denen sich unsere Büros befinden, problemlos verfügbar.

Wie kann ich eine USV über USB an einen ESXi-Host anschließen, damit ESXi einen Stromausfall erkennt und entsprechend vorgeht? Hat das jemand geschafft?


1
Haben Sie das Herunterfahren der VMs über das Herunterfahren des Hosts geplant? Kann der Akku für diesen Zeitraum lange genug halten?
Ewwhite

Vielen Dank für den Hinweis. Noch nicht - zum jetzigen Zeitpunkt werden nur die ESXi-Server für die Ausführung eines Domänencontrollers ausgeliefert, aber ich bin sicher, dass wir, sobald die Ressource eingerichtet ist, einige weitere Server hinzufügen werden, wobei sich das Timing möglicherweise ändert.
Dunxd

Die Richtlinie zum Herunterfahren ist standardmäßig ziemlich lang. Um ehrlich zu sein, fahre ich meine ESXi-Hosts oder -Cluster nicht mit UPS herunter. Scheint kontraintuitiv, war aber noch nie ein Problem.
ewwhite

Warum sollten Sie sich dann überhaupt die Mühe machen, UPS auf Ihren ESXi-Hosts zu haben? Wenn die Stromversorgung aufgrund eines Stromausfalls unterbrochen wird oder der Akku leer ist, erhalten Sie dasselbe Ergebnis.
dunxd

Um kurze Ausfälle zu überstehen. An größeren Standorten stehen mir jedoch 2 bis 4 Stunden USV-Strom für VMWare-Cluster, -Speicher und -Netzwerke zur Verfügung.
ewwhite

Antworten:


5

Laut APC ist dies nicht möglich und Sie müssen das Powerchute-Netzwerk herunterfahren. Wir haben dies einige Male mit USB versucht und keine Lösung gefunden.

VMWare bietet hier Informationen zur Verwendung der von APC genehmigten Lösung.

Würde auch denken, dass SmartUPS eine bessere Wahl wäre und Sie mit Netzwerkkarte passen können. Natürlich mehr Geld, aber wenn Ihre Server überhaupt wichtig sind, sollten sich diese Kosten lohnen. Darüber hinaus erhalten Sie mehr Überwachungs- und Warnfunktionen, die an einem Remotestandort hilfreich sein können. Sie müssen auch eine ausreichende Laufzeit sicherstellen, damit alle VMs ordnungsgemäß heruntergefahren und anschließend der Host heruntergefahren werden kann


1
Dies scheint die sinnvollste Antwort zu sein, die von beiden Anbietern unterstützt wird. Leider hat VMware nicht daran gedacht, irgendetwas in ESX / ESXi zu integrieren, das dies von Haus aus tut. Die Netzwerklösung erfordert, dass mindestens ein Netzwerk-Switch auch über die USV mit Strom versorgt wird.
Dunxd

2
Es würde nicht viel Sinn machen, nicht Stromnetz via UPS schaltet ... sie verbrauchen sehr wenig corrent und sind entscheidend für jeden Netzwerkbetrieb.
Massimo

21

Ja es ist möglich. Hier sind Details meiner ähnlichen Einrichtung.

Hardwarekonfiguration: Die APC Smart-UPS 1500 ist über USB mit dem ESXi 5.1-Host verbunden. Eine virtuelle Linux-Maschine, die auf diesem ESXi-Host ausgeführt wird. Die USV ist über die ESXi-USB-Pass-Through-Option mit dieser VM verbunden.

Softwarekonfiguration: NUT-Master (Network UPS Tools), der auf der VM ausgeführt wird, und nativer ESXi-NUT-Slave, der auf dem ESXi-Host ausgeführt wird.

Shutdown-Logik: VM führt die USB- Treiber aus, die für die Kommunikation mit der USV über USB verantwortlich sind. Der Upsd- Prozess stellt über den USB-Treiber eine Verbindung zur USV her und überwacht den USV-Status. Der auf demselben Computer ausgeführte upsmon- Master-Prozess stellt eine Verbindung zum upsd her und leitet das Herunterfahren ein. Auf dem ESXi-Host wird die zweite Instanz von upsmon ausgeführt, die auch über ein internes Netzwerk eine Verbindung zu derselben VM herstellt .

Bei Stromausfall erfolgt folgende Abfolge:

  1. UPS meldet über usbhid-ups einen Stromausfall an upsd.
  2. (Optional, nützlich, wenn Sie das System in wenigen Minuten herunterfahren möchten, anstatt den Akku zu entladen.) upsmon auf der VM leitet den 5-Minuten-Timer für das Hochfahren ein . Der Timer wird abgebrochen, wenn die Stromversorgung wiederhergestellt wird.
  3. Wenn der Timer ausgelöst wird oder wenn die USV einen niedrigen Batteriestand meldet, setzt der Upsmon das FSD-Flag (Forced Shutdown) auf upsd.
  4. In einer eigenständigen NUT-Konfiguration würde das FSD-Flag die Maschine herunterfahren. Hier wird der Befehl zum Herunterfahren jedoch durch eine einfache Protokollierung wie "Ich sollte jetzt herunterfahren, aber ich warte stattdessen auf den Host" ersetzt. Und macht nichts.
  5. Das FSD-Flag wird auch von ESXi-upsmon gelesen, wodurch das Herunterfahren des ESXi-Hosts eingeleitet wird.
  6. Der ESXi-Host fährt alle virtuellen Maschinen nacheinander herunter. Wichtig ist, dass die VM, auf der der Upsd ausgeführt wird, zuletzt heruntergefahren wird (mithilfe der Sequenzkonfiguration für das Starten / Herunterfahren von ESXi).
  7. Wichtig: Auf dieser VM müssen VMware-Tools installiert sein. Wenn der Befehl guest shutdown vom Host empfangen wird, wird das Shutdown-Skript von vmware-tools gestartet. Dieses Skript sucht nach dem Flag / etc / killpower . Wenn kein Flag vorhanden ist, wird nichts ausgeführt (dies bedeutet, dass der Benutzer das Herunterfahren von Linux aktiviert hat, nicht das UPS-Ereignis). Wenn das Flag jedoch vorhanden ist (FSD aktiv), sendet dieses Skript den Befehl zum verzögerten Herunterfahren an UPS (z. B. in 3 Minuten).
  8. Nach dem Ausführen des Skripts vmware-tools wird die Gast-VM heruntergefahren.
  9. ESXi erkennt den letzten VM-Ausschaltzustand und geht von selbst aus (dies dauert ca. 1 Minute, da derzeit keine anderen Computer ausgeführt werden).
  10. In den verbleibenden 2 Minuten schaltet die USV den Strom ab.
  11. Wenn die Stromversorgung wiederhergestellt ist, wird ESXi gestartet und schaltet alle VMs ein. Die USV-Überwachungsmaschine muss zuerst gestartet werden (dieselbe Konfiguration wie für die Reihenfolge des Herunterfahrens).

Downloads:

Der NUT für Linux kann aus dem Paket installiert werden.

Der native NUT-Client für ESXi-Server kann über den letzten Link auf dieser Seite heruntergeladen werden: http://www.networkupstools.org/download.html

Einige meiner Skripte und Conf-Dateien sind hier (nur geänderte Zeilen werden angezeigt): http://pastebin.com/KkEeanK1

Anmerkungen:

Natürlich gibt es weitere Details, und es hat einige Zeit gedauert, bis ich das so hinbekommen habe, wie es sollte. Aber jetzt läuft es sehr gut. Dieses System berücksichtigt die Fälle, in denen Sie die Überwachungs-VM nur von innen herunterfahren (das Skript vmware-tools wird nicht ausgeführt) oder wenn es sich um ein vom ESXi-Host initiiertes Herunterfahren der VM handelt (kein Flag / etc / killpower, also keine UPS-Auslastung) Wenn es sich um ein ESXi-Herunterfahren handelt (dasselbe). Das einzig Wichtige ist, dass diese VM nach dem Hochfahren des Hosts so schnell wie möglich ausgeführt und zuletzt heruntergefahren wird (so dass die Ausfallzeit des Hosts vorhersehbar ist - wie oben erwähnt, beträgt sie ungefähr 1 Minute für mich und 2 weitere Minuten, die ich für alle Fälle reserviere).

Meine UPS-Überwachungs-Linux-VM ist auch ein Samba / NFS-Freigabeserver für die Sicherungsspeicherung, der NAT / DHCP-Server für VMs und einige andere leichte Dienste. Im Leerlauf werden etwa 22 MHz ESXi-CPU-Freigaben und etwa 10 MB aktiver RAM benötigt. Durch die Verwendung des NUT können Sie bei Bedarf mehr Geräte von derselben USV mit Strom versorgen und alle können ordnungsgemäß heruntergefahren werden. PowerChute und / oder teure Netzwerkmonitorkarten sind nicht erforderlich.


14

Super Frage. Das ist eigentlich ganz gut möglich - zumindest bei einigen Setups. Ich habe das folgende Rezept auf einer Reihe von ESXi 5.5-Hosts ausprobiert. Grundsätzlich sieht die Lösung so aus:

  1. Aktivieren Sie den SSH-Zugriff auf Ihrem ESXi-Host
  2. Erstellen Sie eine Linux-VM - Ich benutze Ubuntu. Sie brauchen nur ein sehr minimales Setup - keine GUI oder so.
  3. Verbinden Sie Ihr APC-Gerät über USB mit dem ESXi-Host und leiten Sie es an die Linux-VM weiter.
    • Stellen Sie sicher, dass der USB-Controller, den Sie der VM hinzufügen, mit dem tatsächlichen physischen USB-Controller übereinstimmt, an den das APC-Gerät angeschlossen ist. Fügen Sie also nur dann einen XHCI-Controller hinzu, wenn es sich bei dem physischen Gerät um ein USB3-Gerät handelt. Fehlanpassungen scheinen seltsame Probleme im Linux-USB-Gerätetreiber zu verursachen.
    • Wenn die Dinge nicht funktionieren und Fehler wie ctrl urb status -62in dmesgangezeigt werden, stimmt der physische Controller möglicherweise nicht mit dem in Ihrer VM überein. Wenn sie zusammenpassen, ist das ein Problem. Ich habe ein Setup mit dieser Art von Problem und keine echte Lösung dafür.
  4. Installieren Sie apcupsdauf dem Linux - VM - in Ubuntu, können Sie sudo apt-get install apcupsddie neueste Version zu installieren. Das NUT-Projekt ist auch schön, aber ich bin ein Traditionalist.
  5. Installieren Sie das Dienstprogramm plink auf diese Weise sudo apt-get install putty-tools
  6. Stellen Sie auf diese Weise eine Verbindung zu Ihrem ESXI-Host her plink root@<your ESXi host IP>. Sie können die Verbindung sofort beenden. Das Ziel ist es, den Host-Schlüssel zu speichern, damit plink ihn nicht erneut auffordert, wenn wir ihn über ein Skript ausführen
  7. Bearbeiten /etc/apcupsd/apcupsd.confund ändern Sie die Elemente unten, damit sie übereinstimmen: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE Stellen Sie auch sicher, dass /etc/default/apcupsdhatISCONFIGURED=yes
  8. Bearbeiten /etc/apcupsd/apccontrolund blättern Sie zum doshutdownFall. Lass es so aussehen: doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # Shut down indirectly by triggering the ESXi host to do the # shutdown via VMWare tools /usr/bin/plink root@< your ESXi host IP > -pw < your root pw > "/sbin/shutdown.sh && /sbin/poweroff" ;;
  9. Starten Sie apcupsd mit neu sudo service apcupsd restartund prüfen Sie, ob die Dinge funktionieren, indem Sie sie aufrufen apcaccess. Wenn nicht, überprüfen Sie die Protokolle und dmesg
  10. Stellen Sie sicher, dass auf allen VMs, die bei einem Stromausfall ordnungsgemäß heruntergefahren werden müssen, VMWare Tools installiert sind. Stellen Sie außerdem sicher, dass sie Teil der Liste zum Starten / Herunterfahren von VMs sind (wechseln Sie im vSphere Web Client zu:) vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown. Stellen Sie sicher, dass beim Herunterfahren das Gastbetriebssystem heruntergefahren wird.

Sobald Sie diese Dinge ausgeführt haben, wird das doshutdownScriptlet aus Schritt 8 bei einem Stromausfall aufgerufen. Dies ruft wiederum das Skript shutdown.sh auf dem ESXi-Host auf, das dem VMWare Tools-Paket in jeder VM auf Ihrem Host signalisiert, über das Gastbetriebssystem ein sauberes Herunterfahren durchzuführen. Nach meiner Erfahrung funktioniert es besser als die PowerChute-Software von APC.

Wenn Sie Dinge von Ihren VMs aus überwachen möchten, können Sie darauf Slave-Apcupsd-Instanzen einrichten, die eine Verbindung zur Master-UPS-Steuerungs-Linux-VM herstellen. Ihre Slave-apcupsd.conf-Dateien sollten einen Eintrag wie diesen haben:
UPSTYPE net < your UPS control VM IP >:3551
Einträge wie UPSCABLEund solche spielen in diesem Fall keine Rolle. Dies funktioniert auch mit der Windows-Version von apcupsd( hier verfügbar ). Sie können den enthaltenen verwenden apctray.exe, um den aktuellen Status der Dinge zu überprüfen.

Das deckt es ziemlich gut ab, denke ich.


+1 hat wie ein Zauber gewirkt. Erstes Mal!
Morten Kristensen

Diese Antwort hat perfekt funktioniert, obwohl wir bei meinem Kunden die doshutdownReihenfolge ein wenig anpassen mussten . Wir haben ${APCUPSD} --killpowerdirekt vor dem /usr/bin/plinkTeil hinzugefügt, damit die USV nach einer Weile herunterfährt und automatisch neu startet, wenn die Stromversorgung wieder hergestellt ist. Es ist auch erwähnenswert, dass Schritt 6 so ausgeführt werden sollte, wie er rootüber suoder erworben wurde sudo su, aber nicht sudo -s .
Andrea Lazzarotto

4

Sie können die Passthrough-Funktion für USB-Geräte auch für einen Gast verwenden, auf dem PowerChute oder eine andere Software ausgeführt wird, die den Zustand der USV überwachen und ein Herunterfahren auf dem ESXi-Host auslösen kann (z . B. apcupsd ). ESXi unterstützt offiziell nur eine sehr begrenzte Anzahl von USB-Geräten für das Passthrough , aber die Benutzer haben bereits seit einiger Zeit mit unterschiedlichem Erfolg verschiedene Geräteklassen angeschlossen und durchlaufen, aber die APC UPS USB scheint für eine Windows-VM gemäß dieser exemplarischen Vorgehensweise zu funktionieren oder dieses für eine CentOS Linux VM .


2

Schauen Sie sich von hier aus den vSphere Management Assistant (vMA) an. Wir verwenden ihn in meinem Büro, um das zu tun, was Sie versuchen, jedoch mit einer über USB angeschlossenen Smart-UPS anstelle einer Back-UPS.


Bitte fügen Sie weitere Details hinzu, da dies ein undokumentiertes Setup für APC oder VMware ist.
Dunxd

1

Obwohl dies möglich ist (wahrscheinlich / allgemein), halte ich ein automatisiertes Herunterfahren eines Computers im Akkubetrieb nicht für eine gute Idee. Wenn Sie dies tun, sollten Sie sich aus praktischen Gründen wahrscheinlich nur das Geld einer batteriegepufferten USV sparen und sich vom Stromausfall ausschalten lassen. (Zugegeben, ein sauberes Herunterfahren ist immer einem Stromausfall vorzuziehen, aber es scheint, als würden Sie eine Akkulaufzeit von mehr als ein paar Minuten verpassen, wenn Sie jedes Gerät automatisch herunterfahren, wenn Sie die Stromversorgung verlieren. )

Ich habe es immer so gehandhabt, dass die Überwachung die SAs alarmiert, wenn der Strom ausfällt, sodass die SAs anhand ihrer grauen Zellen entscheiden können, wann (oder sogar wenn) sie die Server herunterfahren. Wenn es sich um einen kurzen Ausfall handelt, ist es möglicherweise keine gute Idee, die Server herunterzufahren, oder Sie möchten einige Server so lange wie möglich in Betrieb lassen und sie erst herunterfahren, bevor der Akku leer ist. Es scheint mir wirklich eine Entscheidungsaufgabe zu sein, die eher für einen Menschen als für eine einfache Regel geeignet ist.


Sie müssen Ihre USV nicht so konfigurieren, dass sie sofort eine Abschaltung auslöst. Sie möchten jedoch, dass sie sich abschaltet, bevor die Batterien vollständig entladen sind. Andernfalls müssen Sie mehr Batterien kaufen, insbesondere an einigen Orten, an denen ich arbeite und der Strom ausfällt Täglich. Es ist natürlich großartig, Menschen mit einzubeziehen, aber Sie haben nicht immer einen Systemadministrator in einem Remote-Büro.
dunxd

@dunxd Guter Punkt - Ich bin eher an HA-Umgebungen gewöhnt, in denen zumindest einige der Server aufbleiben müssen, aus der Hölle kommen oder Hochwasser haben Geräte ausschalten), um die geringstmögliche Auswirkung auf den Service zu erzielen, die nicht im Mittelpunkt oder Anwendungsfall aller steht.
HopelessN00b

1

In den alten Tagen der Baremetal-Installation war APC PowerChute Plus ein wesentlicher Bestandteil meines Installationsprozesses. Mit dem einfachen seriellen Signalkabel und der reinen Red Hat-Binärdatei konnten Regeln zur Steuerung eines lokal angeschlossenen Servers einfach eingerichtet werden. Grundlegende E-Mail-Benachrichtigungen für UPC-Batterieereignisse, Netzstromereignisse und Abschaltaktionen waren verfügbar:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

und

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

oder

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Plus eine vernünftige Schnittstelle, um zu sehen, was passiert ist ...

Bildbeschreibung hier eingeben

Diese Software wurde schließlich kommerziell (oder auf der APC-Website vergraben). Es gab einige Open-Source-Ansätze, um etwas Ähnliches bereitzustellen. Bei einzelnen VMWare ESXi-Hosts wird dies jedoch kompliziert.

Anscheinend sollte VMWare dies in den Basishypervisor integrieren. Es ist grundlegend und könnte ein angemessenes Maß an Schutz für Benutzer bieten. Die häufigsten Abhilfemaßnahmen, die ich jetzt sehe, sind USB-Passthrough zu einer dedizierten VM, ein Netzwerk-Daemon-Ansatz oder das, was ich tue. keine automatische Abschaltung oder Batterieabschaltung konfigurieren ...

Zugegeben, ich setze normalerweise eine USV ein, die die Systemlast mindestens eine Stunde lang unterstützt, es kommt jedoch zu längeren Ausfällen. Möglicherweise besteht eine Alternative darin, ein paar kostengünstige oder generalüberholte Netzwerkkarten zu sammeln und mindestens SmartUPS-Geräte zu kaufen ...


0

Überprüfen Sie den folgenden Link . Nicht die eleganteste Lösung, aber eine sehr praktische, sehr einfache Lösung. Es gibt mögliche Sicherheitsmängel (abhängig von Ihrem speziellen Netzwerkdesign, den auf den Hosts geladenen Gästen und den Zugriffsrechten der Benutzer auf diese Gäste, aber Sie können diesen Anruf tätigen.


0

Ich habe die MrMajestyk-Lösung verwendet und nur den SSH-Zugriff über plink mit SSH-Zugriff ohne Kennwort mit dem öffentlichen RSA-Schlüssel geändert. Der in der apcupsd-VM generierte RSA-Schlüssel muss in / etc / ssh / keys-root / authorized_keys des VMware-Hosts enthalten sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.