Apagado VMware ESXi activado por UPS APC conectado a través de USB

18

Estoy enviando un montón de servidores ESXi 5.1 a oficinas remotas donde serán alimentados a través de APC UPS.

Me gustaría que el UPS activara el apagado del servidor conectado; luego confiaría en la configuración de ESXi para encargarme del apagado / suspensión de las máquinas virtuales alojadas en él.

Puedo ver que APC tiene una solución documentada utilizando su apagado de red PowerChute , pero esto implica configurar un servidor adicional por oficina y requiere tarjetas de red en cada UPS. Generalmente estamos usando UPS sin una tarjeta de red (por ejemplo, Back-UPS Pro): vienen con un conector USB y están disponibles en los lugares donde se encuentran nuestras oficinas.

¿Cómo puedo conectar un UPS a un host ESXi a través de USB, luego hacer que ESXi detecte un corte de energía y luego actuar en consecuencia? ¿Alguien ha logrado hacer esto?

dunxd
fuente
1
¿Ha programado el proceso de apagado de las máquinas virtuales a través del apagado del host? ¿Puede la batería aguantar lo suficiente durante ese período?
ewwhite
Gracias por señalar esto. Todavía no: en esta etapa solo envío los servidores ESXi para ejecutar un controlador de dominio, pero estoy seguro de que una vez que tengamos los recursos en su lugar, agregaremos algunos servidores más, momento en el cual el tiempo puede cambiar.
dunxd
La política de apagado es bastante larga por defecto. Pero, para ser sincero, no ejecuto el apagado de UPS en mis hosts o clústeres ESXi. Parece contrario a la intuición, pero nunca ha sido un problema.
ewwhite
¿Por qué molestarse en tener UPS en sus hosts ESXi? Si se corta la energía debido a un corte de energía o porque la batería se agotó, obtendrá el mismo resultado.
dunxd
Para capear breves interrupciones. Pero en mis sitios más grandes, tengo de 2 a 4 horas de energía UPS disponible para el clúster VMWare, el almacenamiento y las redes.
Ewwhite

Respuestas:

5

Según APC, esto no es posible y requiere el apagado de la red Powerchute. Lo intentamos varias veces con USB y no encontramos solución.

VMWare tiene información aquí sobre el uso de la solución aprobada por APC.

También pensaría que SmartUPS sería una mejor opción y que puede caber con una tarjeta de red. Naturalmente más dinero, pero si sus servidores son importantes, ese costo debería valer la pena. También le brinda más monitoreo y alertas que podrían ser útiles en un sitio remoto. También debe garantizar un tiempo de ejecución suficiente para que todas las máquinas virtuales se apaguen limpiamente y luego apaguen el host

Dave M
fuente
1
Esta parece ser la respuesta más sensata respaldada por ambos proveedores. Desafortunadamente, VMware no ha pensado en construir nada en ESX / ESXi que lo haga de forma nativa. La solución de red requiere que al menos un conmutador de red esté alimentado a través de UPS también.
dunxd
2
No tendría mucho sentido no alimentar los conmutadores de red a través de UPS ... consumen muy poca cantidad de corriente y son críticos para cualquier operación de red.
Massimo
21

Si es posible. Aquí hay detalles de mi configuración similar.

Configuración de hardware: APC Smart-UPS 1500 conectado al host ESXi 5.1 a través de USB. Una máquina virtual Linux que se ejecuta en este host ESXi. El UPS está conectado a esta VM utilizando la opción de transferencia USB ESXi.

Configuración del software: maestro NUT (Network UPS Tools) que se ejecuta en la VM y esclavo NUT ESXi nativo que se ejecuta en el host ESXi.

Lógica de apagado: VM está ejecutando los usbhid-ups del controlador de UPS que son responsables de la comunicación con UPS a través de USB. El proceso upsd se conecta al UPS a través del controlador usbhid-ups y monitorea el estado del UPS. El proceso maestro upsmon que se ejecuta en la misma máquina se conecta al upsd e inicia el apagado. El host ESXi ejecuta la segunda instancia de upsmon, que también se conecta a la misma máquina virtual upsd a través de la red interna.

En caso de fallo de alimentación, tiene lugar la siguiente secuencia:

  1. UPS a través de usbhid-ups informa a upsd sobre fallas de energía.
  2. (opcional, útil si desea apagar en pocos minutos en lugar de batería baja) upsmon en la VM inicia el temporizador de 5 minutos. El temporizador se cancela si se restablece la energía.
  3. Cuando se dispara el temporizador o cuando el UPS informa batería baja, el upsmon levanta el indicador FSD (apagado forzado) a upsd.
  4. En una configuración NUT independiente, el indicador FSD apagaría la máquina. Pero aquí el comando de apagado se reemplaza por un registro simple como "Debería apagar ahora pero estoy esperando al host". Y no hace nada.
  5. El indicador FSD también lo lee ESXi upsmon, que inicia el apagado del host ESXi.
  6. El host ESXi apaga todas las máquinas virtuales una por una. Lo importante es que la VM que ejecuta el upsd debería cerrarse en último lugar (usando la configuración de secuencia de inicio / apagado de ESXi).
  7. Importante: esta VM debe tener instaladas herramientas de vmware. Cuando recibe el comando de apagado de invitado del host, se inicia el script de apagado de vmware-tools. Este script comprueba el indicador / etc / killpower . Si no hay bandera, no hace nada (esto significa que el usuario activó el apagado de Linux, no el evento UPS). Pero si el indicador existe (FSD activo), entonces este script envía al UPS el comando de apagado retardado (digamos, en 3 minutos).
  8. Después de ejecutar el script vmware-tools, la máquina virtual invitada se apaga.
  9. ESXi ve el último estado de apagado de VM y se cae solo (toma alrededor de 1 minuto porque no hay otras máquinas ejecutándose ahora).
  10. En 2 minutos restantes, el UPS corta la energía.
  11. Cuando se restablece la energía, ESXi se inicia y enciende todas las máquinas virtuales. La máquina de monitoreo del UPS debe iniciarse primero (la misma configuración que para el orden de apagado).

Descargas:

NUT para Linux podría instalarse desde el paquete.

El cliente NUT nativo para el servidor ESXi se puede descargar usando el último enlace de esta página: http://www.networkupstools.org/download.html

Algunos de mis scripts y archivos conf están aquí (solo se muestran las líneas modificadas): http://pastebin.com/KkEeanK1

Notas:

Por supuesto, hay más detalles, y me llevó algo de tiempo hacer que funcionara como debería. Pero ahora funciona muy bien. Este sistema tiene en cuenta los casos en los que simplemente apaga la VM de monitoreo desde adentro (el script de vmware-tools no se ejecuta), o si se trata de un apagado de VM iniciado por el host ESXi (sin indicador / etc / killpower, por lo que no se apaga el UPS), o si es un apagado de ESXi (lo mismo). Lo único importante es hacer que esta máquina virtual se ejecute lo antes posible después del arranque del host y apagarla por última vez (por lo que el tiempo de inactividad del host es predecible, como se dijo anteriormente, es alrededor de 1 minuto para mí y 2 minutos más que reservo por si acaso).

Mi UPS que monitorea Linux VM también es un servidor de intercambio Samba / NFS para almacenamiento de respaldo, el servidor NAT / DHCP para VM y algunos otros servicios livianos. Se necesitan alrededor de 22MHz de recursos compartidos de CPU ESXi y alrededor de 10MB de RAM activa cuando está inactivo. Debido al uso de la NUT, puede alimentar más dispositivos desde el mismo UPS si es necesario, y todos pueden apagarse con gracia. No se requiere PowerChute ni una costosa tarjeta de monitor de red.

Oleg Semyonov
fuente
14

Súper pregunta En realidad, es posible hacerlo bastante bien, al menos en algunas configuraciones. He probado la siguiente receta en varios hosts ESXi 5.5. Básicamente, la solución es la siguiente:

  1. Habilite el acceso SSH en su host ESXi
  2. Crear una máquina virtual Linux: uso Ubuntu. Solo necesita una configuración mínima, sin GUI ni nada.
  3. Conecte su dispositivo APC por USB al host ESXi y páselo a la VM Linux.
    • Asegúrese de que el controlador USB que agregue a la VM coincida con el controlador USB físico real al que está conectado el dispositivo APC, es decir, solo agregue un controlador XHCI si el dispositivo físico es un dispositivo USB3. Los desajustes parecen causar problemas extraños en el controlador de dispositivo USB de Linux.
    • Si las cosas no están funcionando y ver los errores como ctrl urb status -62en dmesg, es probable que el controlador físico no coincide con el de la máquina virtual. Si coinciden, bueno, entonces es un problema. Tengo una configuración con este tipo de problema y no tengo una solución real.
  4. Instalar apcupsden la máquina virtual Linux: en Ubuntu, puede hacer sudo apt-get install apcupsdpara instalar la última versión. El proyecto NUT también es bueno pero soy tradicionalista.
  5. Instale la utilidad plink haciendo sudo apt-get install putty-tools
  6. Conéctese a su host ESXI haciendo plink root@<your ESXi host IP>. Puede cerrar la conexión de inmediato. El objetivo es guardar la clave de host para que Plink no la solicite nuevamente cuando la ejecutamos a través de un script
  7. Edite /etc/apcupsd/apcupsd.confy cambie los siguientes elementos para que coincidan: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE también asegúrese de que /etc/default/apcupsdtengaISCONFIGURED=yes
  8. Edite /etc/apcupsd/apccontroly desplácese hasta el doshutdowncaso. Haz que se vea así: 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. Reinicie apcupsd usando sudo service apcupsd restarty vea si las cosas funcionan invocando apcaccess. Si no, revise los registros y dmesg
  10. Asegúrese de que todas las máquinas virtuales que necesiten cerrarse bien en caso de una falla de energía tengan instaladas VMWare Tools. También asegúrese de que formen parte de la lista de inicio / apagado de VM (en vSphere Web Client, vaya a:) vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown. Asegúrese de que la acción de apagado sea apagar el sistema operativo invitado.

Una vez que tiene estas cosas en ejecución, el doshutdownscriptlet del paso 8 se invoca en un fallo de alimentación. Este es el turno que invoca el script shutdown.sh en el host ESXi, que le indica al paquete VMWare Tools en cada VM en su host que realice un apagado limpio a través del SO huésped. En mi experiencia, funciona mejor que el software PowerChute de APC.

Si desea monitorear cosas desde sus máquinas virtuales, puede configurar instancias de apcupsd esclavas en ellas que se conectan al control maestro de UPS Linux VM. Sus archivos esclavos apcupsd.conf deben tener una entrada como esta: las
UPSTYPE net < your UPS control VM IP >:3551
entradas como UPSCABLEy tal no importan en este caso. Esto funciona con la versión de Windows de apcupsd(disponible aquí ) también. Puede utilizar el incluido apctray.exepara verificar el estado actual de las cosas.

Eso prácticamente lo cubre, creo.

MrMajestyk
fuente
+1 funcionó a las mil maravillas. ¡Primera vez!
Morten Kristensen
Esta respuesta funcionó perfectamente, aunque en la oficina de mi cliente tuvimos que modificar doshutdownun poco la secuencia. Agregamos ${APCUPSD} --killpowerjusto antes de la /usr/bin/plinkparte para que el UPS se apague después de un tiempo y se reinicie automáticamente cuando vuelva la energía. Además, vale la pena señalar que el paso 6 debe hacerse como rootadquirido a través de suo sudo su, pero no sudo -s .
Andrea Lazzarotto
4

Puede considerar usar la funcionalidad de transferencia de dispositivos USB a un invitado que ejecute PowerChute u otro software capaz de monitorear el estado del UPS y capaz de provocar un apagado en el host ESXi (por ejemplo, apcupsd ). Oficialmente, ESXi solo admite un número muy limitado de dispositivos USB para el paso , pero las personas han estado conectando y pasando a través de diferentes clases de dispositivos durante un tiempo con un éxito variable, pero el APC UPS USB parece funcionar de acuerdo con este tutorial para una VM de Windows o este para una VM Linux CentOS .

el wabbit
fuente
2

Eche un vistazo a vSphere Management Assistant (vMA) desde aquí. Lo usamos en mi oficina para hacer lo que está intentando, sin embargo, con Smart-UPS conectado a través de USB en lugar de Back-UPS.

deveneyi
fuente
Agregue más detalles ya que esta es una configuración no documentada en lo que respecta a APC o vmware.
dunxd
1

Si bien es posible (probablemente / en general), no creo que sea buena idea apagar automáticamente una computadora con la batería. Si va a hacer eso, entonces, para la intención y propósitos más prácticos, probablemente debería ahorrarse el dinero de un UPS con batería y dejar que la pérdida de energía apague su máquina por usted. (Por supuesto, un apagado limpio siempre es preferible a una pérdida de energía, pero parece que se está perdiendo el tiempo de tener una batería de más de un par de minutos si apaga automáticamente todo cuando pierde la alimentación de energía. )

La forma en que siempre lo he manejado es tener alertas de monitoreo de las SA cuando se corta la energía, para que las SA puedan usar su materia gris para decidir cuándo (o incluso si) apagar los servidores. Si se trata de una breve interrupción, puede que no sea una buena idea apagar los servidores en absoluto, o es posible que desee dejar algunos servidores en funcionamiento el mayor tiempo posible, y solo apagarlos antes de que la batería esté a punto de agotarse. Realmente me parece una tarea de toma de decisiones más adecuada para un ser humano que una simple regla.

HopelessN00b
fuente
No tiene que configurar su UPS para que se apague de inmediato, pero sí quiere que se apague antes de que las baterías se agoten por completo, de lo contrario tendrá que comprar más baterías, particularmente en algunos de los lugares donde trabajo y se va la luz. diario. Es genial involucrar a los humanos, por supuesto, pero no siempre tienes un administrador del sistema en una oficina remota.
dunxd
@dunxd Buen punto: estoy más acostumbrado a los entornos de alta disponibilidad en los que al menos algunos de los servidores tienen que permanecer despiertos, en el infierno o en aguas altas, por lo que el nombre del juego es descubrir la mejor forma de racionar la energía (cierre selectivo dispositivos inactivos) para crear el menor impacto posible en el servicio, que no será el enfoque de todos o el caso de uso.
HopelessN00b
1

En los viejos tiempos de las instalaciones de metal desnudo , APC PowerChute Plus fue una parte esencial de mi proceso de instalación. Usando el cable de señalización serial simple y su binario solo de Red Hat , fue fácil configurar reglas para gobernar un servidor conectado localmente. Notificaciones básicas por correo electrónico para eventos de batería UPC, eventos de alimentación de línea y acciones de apagado disponibles:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

y

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

o

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Además de una interfaz razonable para ver lo que estaba sucediendo ...

ingrese la descripción de la imagen aquí

Ese software finalmente se comercializó (o fue enterrado en el sitio web de APC). Hubo algunos enfoques de código abierto para proporcionar algo similar. Pero todo esto se complica con los hosts VMWare ESXi individuales.

Parece que esto es algo que VMWare debería haber incorporado en el hipervisor base. Es básico y podría ofrecer un nivel de protección decente para los usuarios. Los remedios más comunes que veo ahora son el paso de USB a una VM dedicada, un enfoque de demonio de red o hacer lo que hago; no configurar ningún apagado automático o de batería ...

Por supuesto, normalmente utilizo un UPS que puede soportar la carga del sistema durante una hora o más, pero ocurren interrupciones prolongadas. Tal vez una alternativa es recopilar algunas tarjetas de interfaz de red de bajo costo o renovadas y planear comprar dispositivos SmartUPS como mínimo ...

ewwhite
fuente
0

Mira el siguiente enlace . No es la solución más elegante, sino una solución muy práctica y muy sencilla. Existen posibles inconvenientes en términos de seguridad (dependiendo del diseño particular de su red, los invitados cargados en los Hosts y el acceso que los usuarios tienen a esos invitados, pero usted puede hacer esa llamada.

usuario207685
fuente
0

Utilicé la solución MrMajestyk y solo cambié el acceso ssh a través de plink con acceso ssh sin contraseña usando la clave pública rsa. La clave rsa generada en la máquina virtual apcupsd debe incluirse en / etc / ssh / keys-root / optional_keys del host vmware.

Norberto Altalef
fuente