¿Cómo puedo hibernar automáticamente los servidores de almacenamiento en la nube?

13

Tengo centros de datos de almacenamiento en la nube que ejecutan Ubuntu 16.04 lts y NextCloud / OwnCloud que no necesitan estar disponibles las 24 horas, los 7 días de la semana, y necesitan soluciones de administración de energía. Los servidores son Dell PowerEdge 1950 Gen II y Dell PowerEdge 2950 Gen II

Objetivo general

Los servidores de almacenamiento en la nube de Hibernate pasaron un tiempo de inactividad, por ejemplo, 20 minutos y se deshibernaron con WOL para reducir 6272.09 kilos de dióxido de carbono por año, 6680kw solo desde nuestro centro de datos, métricas logradas en una auditoría energética detallada.

Solución ineficaz probada

Paisaje

Los trabajos horizontales en el entorno / cron solo ofrecen arranques y paradas programadas, por lo tanto, no son efectivos para nuestro logro.

Siesta de poder

powernap parece el camino a seguir, pero el servicio no se inicia en Ubuntu 16.04

XXXXXXX ~ estado de powernap del servicio $ sudo
● powernap.service - PowerNap
   Cargado: cargado (/lib/systemd/system/powernap.service; deshabilitado; proveedor preestablecido
   Activo: inactivo (muerto)

ponwernap parece usar servicios depreciados como network.service que ya no están disponibles en Ubuntu 16.04

Objetivos alcanzables

Wake on LAN (WOL)

Habilitar WOL es sencillo siguiendo la configuración manual en este enlace . o con el uso de Powewake

Servidor Hibernación

Hasta ahora, solo he logrado hibernar los servidores usando sudo systemctl hibernateysudo systemctl hibernate-sleep

  1. powernap: estoy presentando informes de errores para eliminar dependencias agotadas
  2. systemctl - podría conducir a algún lugar
  3. pm-utils - podría llevar a algún lugar

Actualizaciones de hardware

He actualizado las CPU de la Dell 1950 Gen II dual Xeon E5335 con las CPU Xeon X5365. El X5365 permite la administración de energía y establece la administración de energía desde el BIOS. Honestamente, no estaba a favor de tal actualización, ya que el X5365 consume 70 vatios por CPU más que el E5335, pero lo hice a favor de las pruebas de hibernación.

Actualización 1

En este momento pm-utilses la única forma de separarse de la configuración woldel nic. Actualmente estoy explorando la configuración óptima para crear un enlace de alimentación para la configuración de CA durante el tiempo de inactividad.

Cualquier recomendación por favor.

Fabuloso
fuente
1
Bienvenido a Ask Ubuntu. Por favor, ¿cuál es tu pregunta? Por favor sea ​​más específico .
MadMike
Los servidores en la nube de Hibernate han pasado un tiempo inactivo y se han desibernado con WOL. El detalle adicional es dar un ejemplo de escenario de trabajo.
Fabuloso
1
No pude entender cuáles son tus escollos. ¿Qué has intentado que no funciona y / o qué necesitas específicamente para entender?
Zanna
3
¿No está hibernando poco práctico? Dependiendo del tamaño de su RAM y la velocidad de lectura / escritura del disco, la hibernación y la reanudación pueden demorar algunos minutos. ¿Cómo se manejan las solicitudes durante ese tiempo? ¿Tus usuarios querrán esperar tanto? Simplemente suspender podría ser un mejor compromiso para ahorrar energía mientras se mantiene más ágil. Y tal vez virtualizar sus servidores y alojarlos en una máquina poderosa o un clúster que le permita suspender / reanudar partes mientras equilibra la carga en otros también podría ayudar a ahorrar energía. Sin embargo, tenga en cuenta que no tengo experiencia con sistemas de servidor a gran escala, solo adivinando.
Byte Commander
1
Estoy de acuerdo con Byte Commander. Para obtener información de personas con experiencia real en la operación del centro de datos, probablemente debería preguntar sobre la falla del servidor .
David Foerster

Respuestas:

0

Arme un pequeño script que puedes ejecutar en un cronjob cada 15 minutos o usando temporizadores systemd:

#/bin/bash

NActiveUsers=$(who -q | awk -F'#' '{printf $2}' | awk -F'=' '{printf $2}')
AvgLoad15Min=$(cat /proc/loadavg | awk -F' ' '{print $3}')

ActiveUsersThresh=2
AvgLoadThresh=0.15

if [ "$NActiveUsers" -lt "$ActiveUsersThresh" ]
then
    LoadBelowThresh=$(echo $AvgLoad15Min'<'$AvgLoadThresh | bc -l)
    if [ "$LoadBelowThresh" -eq 1 ]
    then
        systemctl hibernate
    fi
fi

Primero obtiene el número de usuarios que han iniciado sesión en el sistema y la carga promedio durante los últimos 15 minutos. Debería poder averiguar su carga de sistema promedio inactiva usando cat /proc/loadavg. El tercer número de coma flotante da el promedio de los últimos 15 minutos. Este valor es útil para definir un umbral establecido en la variable AvgLoadThresh. Esto sin duda necesitará ser ajustado. La otra cosa que puede definir es cuántos usuarios pueden iniciar sesión y el sistema va a hibernar de todos modos. Esto se establece en ActiveUsersThresh. Solo para asegurarse de que el sistema no siempre esté hibernando cuando realice tareas de mantenimiento o algo así.

Supongo que uno podría tener más controles inteligentes, así que míralo como un primer enfoque simple. Por ejemplo, no sé qué base de datos o servidor web se utiliza en su propia instalación de la nube, pero podría intentar detenerlos con gracia antes del comando de hibernación, para que nadie pierda de repente la conexión.

romed
fuente