Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

Network Shutdown (z.B. APC)

Moderatoren: Dayworker, irix

Member
Beiträge: 110
Registriert: 08.09.2008, 11:16

Network Shutdown (z.B. APC)

Beitragvon Titanstaub » 03.02.2014, 18:02

Hallo, ich habe diese Thema bis dato immer ignoriert ,,, nun habe ich aber eine APC USV mit Management Card und habe mal die OVF-Vorlage von Schneider Electric importiert und anschließend konfiguriert ... jetzt wollte ich Euch mal Fragen wir Ihr das Thema "kontrolliertes herunterfahren der VMs + des Hosts" handhabt... ich habe bisher immer nur darauf geachtet, dass der Host zwei Netzteile hat und diese an zwei voneinander unabhängigen Stromquellen angeschlossen sind, dann möchte man ja eigentlich gar nicht, dass die VMs heruntergefahren werden nur weil ein Netzteil kein Strom mehr hat ... insofern stelle ich mir gerade in meiner Konstellation die Sinnfrage ... oder gibt es noch andere Aspekte?

Danke für den Austausch!

Nico

Member
Beiträge: 149
Registriert: 21.02.2004, 22:33
Wohnort: Müggelheim
Kontaktdaten:

Beitragvon Rene_Mhm » 16.03.2014, 22:08

Um vor meiner eignen Frage erst einmal mit einer Antwort für Dich zu beginnen:
Viele Systeme haben ja eher nur 'ein Bein' an einer USV, oder eben beide an der selben. Wirklich mit redundanten USVs ausgelegt ist es bei und nur bei einem Kunden, bei dem der Strom aber auch wirklich fast einmal die Woche ausfällt. Und da im Zweifel lieber ein ShutDown zu viel, als eines zu wenig, fahren die Hütten dann bei Ausfall an einer USV halt runter. Damit ist nur nicht der Fall eines USV-Defektes der steuernden USV abgefangen, wo der bzw. die Server dann ja oben bleiben könnten.

Habe momentan das Problem, dass ich erstmalig einen ESXi von einer APC-USV per vMA herunter fahren lassen will.
Soweit ich es sehe, ist alles eingerichtet und per listserver sichtbar, dass der Host eingetragen ist.
Muss noch mehr eingerichtet werden?
Habe ich eine Möglichkeit, dies remote zu testen? (an der USV hängen noch weitere Server)

Besten Dank schon mal vorab!

PS: Sorry Titanstaub, dass ich Deinen Fred gleich etwas mit gekapert habe. Aber im 5,5er Bereich habe ich zu vMA/APC nichts weiter gefunden gehabt.

Member
Beiträge: 152
Registriert: 27.02.2008, 15:10

Beitragvon monster900 » 17.03.2014, 08:59

Moin,
zu dem Thema APC und VM gibt es schon einige Fred's hier im Forum.
Ich habe das mit der APC-vMA hier im Unternehmen nicht hinbekommen und habe daher eine eigene etwas andere Lösung für uns gefunden (Achtung: Hat noch Betastatus!!!).

Grundsätzlich ist für uns absolut wichtig, dass im Falle des Falles die VM's in geregelter Reihenfolge herunter gefahren werden.
Wir überwachen unser Netzwerk mit Zabbix. Grundsätzlich lässt sich die Lösung aber auch mit z.B. Nagios realisieren.

Unsere 3 VM Hosts hängen jeweils an einer APC3000 und einer APC2200 (HA-Cluster). Beide APC's sind mit einer Netzwerkmanagementkarte ausgestattet. Zabbix überwacht beide APC's per SNMP.
Bei einem Stromausfall der APC (egal welcher) gibt es eine entsprechende Warnung durch Zabbix per Email und SMS.
Melden beide APC's einen Stromausfall und sinkt die Batteriekapazität einer APC unter 45% startet Zabbix ein externes Script (Python) das mit Hilfe des Projekte 'pysphere' auf die VM-Umgebung zugreift.

1. Das Python-Skript ermittelt alle Hosts des HA-Clusters
2. Das Script ermittelt auf welchem Host der VC-Server läuft
3. Es kann eine Liste der VM's vorgegeben werden, die in genau der Reihenfolge herunter gefahren werden
4. Es werden alle übrigen VM's heruntergefahren (unabhängig von der Liste)
5. Die VM-Hosts werden herunter gefahren, so Bald die VM's heruntergefahren sind (der auf dem der VC-Server lauft als Letzter).

Der Code ist 100%ig noch deutlich verbesserungsfähig, aber ich bin nur Hobbyprogrammierer (Hauptsache es läuft... ;) ) :roll:
Nehme aber gerne jeden Verbesserungsvorschlag an!!!

Bisher konnte ich das Ganze nur mit max. 2 Hosts und ausgewählten VM's testen, da wir hier im Augenblick auch am WE arbeiten.
Ich hoffe, dass ich über Ostern mal den kompletten Shutdown testen kann. Evtl. gibt es ja vorher noch einen Stromausfall und ich kann Euch das Ergebnis mitteilen. :D

Gruß
Dirk


Code: Alles auswählen

#!/usr/bin/python

from pysphere import VIServer, VIProperty, VIMor, VITask
from pysphere.vi_virtual_machine import VIVirtualMachine
from pysphere.resources import VimService_services as VI

import sys
import string
import time

### Reihenfolge der VMS die durch das Script heruntergefahren werden
### VMx = Name der virtuellen Maschine unter den VC-Optionen
vmlist = ["VM1", "VM2", "VM3", "VM4", "VM5", "VM6"]

### Name des vCenter Servers
### VMx = Name der virtuellen Maschine unter den VC-Optionen
vcserver = "VMx"

server = VIServer()
### Anmeldedaten fuer VCenter bzw. VM-Host
server.connect("xxx.xxx.xxx.xxx.", "USER", "PASSWORD")

def shutdown_vm(vms):
   # Wenn VM eingeschaltet herunterfahren
   if vms.get_status() == "POWERED ON":
      i = 1
      # Pruefung, ob VMTOOLS auf VM laufen
      try:
         vm_tools_status = vms.wait_for_tools(timeout=5)
         # Wenn VMTOOLS laufen, dann VM Shutdown
         vms.shutdown_guest()
         # Warten bis VM heruntergefahren
         while vms.get_status() == "POWERED ON":
            # 10 sek. warten
            time.sleep(10)
            # Wenn nach 120 sek. VM nicht heruntergefahren ist abbrechen
            i = i + 1
            if i == 12:
               break
      # VMTOOLS laufen nicht, VM ausschalten
      except:
         vms.power_off()
         i = i + 1
         while vms.get_status() == "POWERED ON":
            # 10 sek. warten
            time.sleep(10)
            # Wenn nach 60 sek. VM nicht im Status ausgeschaltet ist abbrechen
            i = i + 1
            if i == 6:
               break
      return 0
   else:
      return -1

def host_mor(mor):
        if not VIMor.is_mor(mor):
                return VIMor(mor, "HostSystem")
        return mor

def enter_maintenance_mode(host, timeout, evacuate_powered_off_vms=None):
        host = host_mor(host)
        request = VI.EnterMaintenanceMode_TaskRequestMsg()
        _this = request.new__this(host)
        _this.set_attribute_type(host.get_attribute_type())
        request.set_element__this(_this)
        request.set_element_timeout(timeout)
        if evacuate_powered_off_vms in [False, True]:
                request.set_element_evacuatePoweredOffVms(evacuate_powered_off_vms)
        task = server._proxy.EnterMaintenanceMode_Task(request)._returnval
        return VITask(task, server)

def shutdown_host(host, force):
        host = host_mor(host)
        request = VI.ShutdownHost_TaskRequestMsg()
        _this = request.new__this(host)
        _this.set_attribute_type(host.get_attribute_type())
        request.set_element__this(_this)
        request.set_element_force(force)
        task = server._proxy.ShutdownHost_Task(request)._returnval
        return VITask(task, server)
      
### Hosts herausfinden MOR und in Liste schreiben
hostlist = server.get_hosts().keys()

### Host herausfinden auf dem VCServer laeuft
vm = server.get_vm_by_name(vcserver)
host_vc = vm.properties.runtime.host._obj

### VMS in geplanter Reihenfolge herunterfahren
for x in vmlist:
   vm = server.get_vm_by_name(x)
   nRes = shutdown_vm(vm)

### alle uebrigen laufenden VMS herunterfahren, ausser VCServer!
vmlist = server.get_registered_vms(status='poweredOn')
for x in vmlist:
   vm = server.get_vm_by_path(x)
   # Nur wenn VM Name <> vCenter shutdown durchfuehren
   if vm.get_property('name', from_cache=False) <> vcserver:
      print vm.get_property('name', from_cache=False)
      nRes = shutdown_vm(vm)

### Hosts in den Maintenancemode schalten (Host, Timeout in Sekunden, Evakuierung (True/False))
for x in hostlist:
   if x <> host_vc:
      enter_maintenance_mode(x, 0, 0)
     
### Host ausschalten (Host, Force (True/False))
for x in hostlist:
   if x <> host_vc:
      shutdown_host(x, -1)

### Host auf dem vCenter laeuft herunterfahren
shutdown_host (host_vc, -1)

server.disconnect()

Member
Beiträge: 149
Registriert: 21.02.2004, 22:33
Wohnort: Müggelheim
Kontaktdaten:

Beitragvon Rene_Mhm » 17.03.2014, 09:11

monster900 hat geschrieben:... zu dem Thema APC und VM gibt es schon einige Fred's hier im Forum.
Aber doch eher bei 5.0/5.1, oder? Bei 5.5 habe ich nicht wirklich etwas gefunden.
monster900 hat geschrieben:Ich habe das mit der APC-vMA hier im Unternehmen nicht hinbekommen und habe daher eine eigene etwas andere Lösung für uns gefunden (Achtung: Hat noch Betastatus!!!).

Grundsätzlich ist für uns absolut wichtig, dass im Falle des Falles die VM's in geregelter Reihenfolge herunter gefahren werden.
Da die Reihenfolge hierbei für mich keine Rolle spielt, würde ich doch gern bei der vMA bleiben.

Member
Beiträge: 319
Registriert: 26.04.2009, 15:59
Wohnort: Laatzen

Beitragvon PatrickW » 18.03.2014, 08:48

Moin,

wir haben das Thema bei uns über einen PowerCLI Skript bzw. mehrere PowerCLI Skripte gelöst, die auf einem Windows Server ausgeführt werden. Testen durfte ich die Skripte leider noch nicht.

Bei uns hängen alle Server mit beiden Netzteilen auf einer USV.

Member
Beiträge: 149
Registriert: 21.02.2004, 22:33
Wohnort: Müggelheim
Kontaktdaten:

Beitragvon Rene_Mhm » 18.03.2014, 10:06

Von der vMA auf hat das Herunterfahren des ESXi-Servers per "sudo ./bin/shutdown" nun schon funktioniert. Jetzt fehlt mir 'nur noch' der Test von der USV aus.

Da ich a) nicht vor Ort bin und b) weitere (produktive!) Server daran hängen, habe ich da leider noch keine Idee zu.


Zurück zu „vSphere 5.5 / ESXi 5.5“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste