Como posso automaticamente hibernar servidores de armazenamento em nuvem?

11

Tenho datacenters de armazenamento em nuvem executando o Ubuntu 16.04 lts e NextCloud / OwnCloud que não precisam estar disponíveis 24 horas por dia, 7 dias por semana e precisam de soluções de gerenciamento de energia. Servidores são Dell PowerEdge 1950 Gen II e Dell PowerEdge 2950 Gen II

Objetivo geral

Os servidores de armazenamento em nuvem do Hibernate ultrapassaram um tempo ocioso por exemplo 20 minutos e reduziram a hibernação com o WOL para reduzir 6272,09 quilos de dióxido de carbono por ano, sendo 6680kw apenas do nosso data center, métricas obtidas durante uma auditoria de energia detalhada.

Solução ineficaz testada

Paisagem

O uso de tarefas locais / agendadas no cronograma apenas oferece inicialização e desligamentos agendados, sendo, portanto, ineficaz para a nossa realização.

Powernap

powernap parece ser o caminho a percorrer, mas o serviço não está iniciando no Ubuntu 16.04

XXXXXXX~$ sudo service powernap status
● powernap.service - PowerNap
   Loaded: loaded (/lib/systemd/system/powernap.service; disabled; vendor preset
   Active: inactive (dead)

O ponwernap parece usar serviços depreciados, como network.service, que não estão mais disponíveis no Ubuntu 16.04

Objetivos alcançáveis

Wake on LAN (WOL)

A ativação do WOL é simples, seguindo a configuração manual neste link . ou com o uso de powewake

Hibernação do servidor

Até agora, só consegui hibernar os servidores usando sudo systemctl hibernate e sudo systemctl hibernate-sleep

  1. powernap - Estou arquivando relatórios de erros para remover dependências esgotadas
  2. systemctl - pode levar a algum lugar
  3. pm-utils - pode levar a algum lugar também

Atualizações de hardware

Eu atualizei os processadores da Dell 1950 Gen II dual Xeon E5335 com Xeon X5365. O X5365 ativa o gerenciamento de energia e define o gerenciamento de energia do BIOS. Sinceramente, não fui a favor de tal atualização, pois o X5365 consome 70 watts por cpu mais do que o E5335, mas fez isso a favor do teste de hibernação.

Atualização 1

Neste momento, pm-utils é a única maneira de se afastar da configuração de wol no nic. Atualmente estou explorando a configuração ideal para criar um gancho de energia para configurações de CA para tempo ocioso.

Qualquer recomendação, por favor.

    
por Fab 21.02.2017 / 11:05

1 resposta

0

Eu montei um pequeno script que você poderia executar em um cronjob a cada 15 minutos ou usando temporizadores systemd:

#/bin/bash

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

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

Primeiro, obtém o número de usuários que estão conectados ao sistema e a carga média durante os últimos 15 minutos. Você deve ser capaz de descobrir sua carga de sistema médio inativa usando cat /proc/loadavg . O terceiro número de ponto flutuante indica a média nos últimos 15 minutos. Esse valor é útil para definir um limite definido na variável AvgLoadThresh . Isso certamente precisará de ajuste. A outra coisa que você pode definir é quanto os usuários têm permissão para efetuar login e o sistema vai para a hibernação de qualquer maneira. Isso é definido em ActiveUsersThresh . Apenas para garantir que o sistema nem sempre esteja em hibernação quando você estiver fazendo manutenção ou algo assim.

Eu acho que alguém poderia chegar a verificações mais inteligentes, então veja isso como uma primeira abordagem simplista. Por exemplo, não sei qual banco de dados ou servidor da Web é usado em sua instalação do owncloud, mas você pode tentar interrompê-los normalmente antes do comando de hibernação, para que ninguém perca a conexão de repente.

    
por romed 12.07.2017 / 16:30