Detectar cuando un servidor está funcionando con batería UPS

24

Tengo un servidor doméstico (HP Proliant ML310 G4) que compré a mi empleador hace aproximadamente un mes. El servidor ejecuta Debian Linux y lo uso para casi todo. Puedo salir adelante haciendo esto porque mis necesidades no son tan exigentes, por lo que el servidor rara vez está bajo cargas pesadas en un momento dado. Este servidor tiene una matriz RAID1 de 2 TB (con un repuesto dinámico) administrado por mdadm que uso para compartir archivos en mi red a través de Samba. Estoy ejecutando el sistema operativo desde un disco duro más pequeño que no es parte de la matriz.

Tengo el servidor alimentado a través de un pequeño UPS de 255 vatios porque lo necesito para soportar pequeñas fluctuaciones de energía sin caer. Esto es muy importante porque un apagado repentino y sucio (causado por un corte de energía o un apagón) puede arruinar la matriz RAID, lo que ya sucedió en una ocasión.

En caso de una falla de energía, estoy estimando que el UPS tiene solo 10-15 minutos de energía. Puede haber más, pero no quiero suponer automáticamente que la hay. Esto es suficiente para superar los apagones que duran unos minutos o menos. Sin embargo, si la alimentación se apaga durante varias horas, necesito que el servidor se apague automáticamente antes de que falle la alimentación del UPS. Con suerte, esto evitará que la integridad de RAID se mangue en esas situaciones.

Este tipo de cosas es fácil en una computadora portátil b / c, tiene sensores incorporados para determinar cuándo funciona con batería, pero este servidor no (por lo que sé). Tengo una configuración de red inusual donde mi módem DSL está separado de mi enrutador. El enrutador también está en el UPS, lo que me permite ingresar SSH a través de mi computadora portátil y apagar el servidor en caso de una falla de energía. Desafortunadamente, esto solo funciona si estoy allí en el momento de hacerlo. Necesito una solución que siempre funcione si estoy allí para intervenir o no.

Como mi módem DSL no está en el UPS, se apagaría con todo lo demás si falla la alimentación. Lo configuré así deliberadamente porque tengo una idea sobre cómo resolver este problema: estaba pensando en escribir un script que hiciera ping a google.com o algún otro sitio de alto tráfico / alta disponibilidad. Si el ping se completa con éxito, el servidor seguirá ejecutándose. Si el ping falla (porque el módem está apagado), la secuencia de comandos pensaría que está apagado y le indicará al servidor que se apague. Agregaría el script a Cron y lo ejecutaría cada 5 minutos. Con suerte, eso le daría al servidor suficiente tiempo para apagarse antes de que el UPS se quede sin energía.

Antes de tomar la molestia de escribir el guión, me gustaría saber si hay una mejor manera de hacer lo que necesito. Gracias de antemano por cualquier ayuda.

Will Kraft
fuente
15
No debe hacer ping a un sitio externo, sino a la IP de su módem DSL.
LawrenceC
1
@ultrasawblade ... suena como una respuesta, huele como una respuesta ... ¡es una respuesta!
Pureferret
1
Como @ultrasawblade menciona, NUNCA confíe en fuentes externas para una configuración interna. Por ejemplo, si su Internet falla repentinamente, pierde conectividad y su servidor se cae. Si Google.com decide cambiar su nombre por cualquier razón, su servidor se cae. Si los hace ping con IP y esa granja de servidores en particular se cae, su servidor también se cae. Este es el caso de cualquier fuente externa. A menos que esté 100% seguro de que su servidor DEBE estar ENCENDIDO SOLAMENTE cuando ese otro servidor esté disponible, no desea confiar en ese otro servidor por ningún motivo.
Nzall
¿Ninguna de estas respuestas funciona para usted?
Dave

Respuestas:

34

Hay una forma antigua pero probada: utilice un módem analógico antiguo. Aquí es cómo

  • Conecte el módem al servidor a través del puerto serie (por ejemplo, ttyS0)
  • Conecte la fuente de alimentación del módem no a la UPS, sino directamente a la red eléctrica.
  • NO conecte nada a la línea telefónica del módem

Ahora sondee el módem cada pocos segundos ATZ[Enter]y espere que OK[Enter]si el módem no responde, puede suponer que no tiene energía, lo que significa que el UPS está con batería.

Editar

El punto principal es que si su conexión a Internet se cae por alguna otra razón, el servidor no se apagará, como debería ser.

Editar 2

De los comentarios:

  • Por supuesto, debe mantener algún estado de una verificación a la siguiente, solo cerrándose después de que fallan N verificaciones. No mencioné esto, ya que es válido para todas las comprobaciones posibles, no solo para el módem
  • La diferencia entre usar el módem y usar cualquier cosa que tenga que ver con la red es que sucederá una pérdida transitoria de la conectividad de la red: no desea que le moleste "Iniciar sesión deshabilitado, servidor en USV", si reinicia un interruptor o reconfigurar una VLAN. En mi experiencia, la línea serial es tan robusta como se pone.
Eugen Rieck
fuente
1
Buena respuesta, pero sugeriría agregar un dispositivo de seguridad donde se verifica varias veces antes de que realmente se apague. (por lo que no tendrá que apagar durante un apagado de 5 minutos) Y creo que hacer ping a un swich también sería suficiente (simplemente nada fuera de su red).
HTDutchy
@HTDutchy ¡Mira mi edición!
Eugen Rieck
Lo sé, pero como podría no tener una conexión en serie o un viejo módem dando vueltas haciendo ping en el hardware de la casa, sería la mejor opción. y si el conmutador dejara de funcionar, el servidor aparecería inactivo de todos modos.
HTDutchy
22

Un ups generalmente viene con un conector USB o COM1. Cuando conecta esto a su servidor, puede comenzar a monitorear el UPS.

En un entorno Windows, sin instalar el software, los mensajes ya están registrados y cerrará el servidor por usted. No sé cómo funciona esto en Linux, pero apuesto a que hay algunos paquetes de software disponibles para interactuar con su UPS.

LPChip
fuente
Acabo de revisar mi UPS y desafortunadamente no tiene nada de eso. Solo tiene 8 enchufes de alimentación (4 con batería y 4 sin) y conectores de entrada y salida de línea para cables telefónicos.
Will Kraft
27
Luego obtenga un UPS que pueda comunicarse con la computadora.
Ramhound
@Ramhound Eso puede no ser una opción, los UPS pueden ser bastante caros y hay formas más baratas.
Vality
No estoy de acuerdo con que haya otras formas de detectar que está funcionando con una batería de ups que ni siquiera puede detectar en este nivel
Ramhound
1

Si está utilizando Debian, intente usar NUT (herramientas de UPS de red). Utilizo NUT para hacer exactamente lo que usted describe en mi Synology NAS (que ejecuta busybox) y en un servidor web hogareño que ejecuta Ubuntu 12.04 LTS. Tengo el NAS conectado a través de USB al UPS por la misma razón que usted, la pérdida potencial de todos mis archivos.

Creo que el demonio loco consulta el UPS cada segundo para determinar el estado. Cuando el UPS está en modo de batería, se puede configurar para que se apague correctamente o espere X minutos primero, etc. También puede tener múltiples clientes configurados para conectarse al demonio loco que ejecuta en su servidor. Por lo tanto, su servidor también puede indicarle a varias PC en su red que se apaguen correctamente. Para la ejecución del apagado, puede proporcionar su propio script para cerrar los servicios de una manera específica, o puede usar el script incorporado que solo llama a shutdown -h, si recuerdo correctamente.

Sitio web de NUT

Había mejores sitios para encontrar información, pero no puedo recordarlos en este momento. La configuración puede ser difícil, pero si estás hablando de perder potencialmente tu RAID, ¡échale un vistazo! Dependiendo de sus necesidades, es posible que no necesite el conjunto completo de NUT, es posible que pueda sobrevivir solo con la porción UPSMON. Creo que puede obtener esto en el paquete de Ubuntu "nut-client".

También hay un cliente NUT para Windows, pero en Windows podría ser mejor usar algo como PowerChute o algo similar.

zako42
fuente
Como se dijo antes, parece que el UPS del OP no tiene forma de comunicarse con la computadora, ni USB ni red.