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:
- UPS a través de usbhid-ups informa a upsd sobre fallas de energía.
- (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.
- Cuando se dispara el temporizador o cuando el UPS informa batería baja, el upsmon levanta el indicador FSD (apagado forzado) a upsd.
- 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.
- El indicador FSD también lo lee ESXi upsmon, que inicia el apagado del host ESXi.
- 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).
- 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).
- Después de ejecutar el script vmware-tools, la máquina virtual invitada se apaga.
- 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).
- En 2 minutos restantes, el UPS corta la energía.
- 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.