Como posso hibernar automaticamente os servidores de armazenamento em nuvem?

13

Tenho data centers de armazenamento em nuvem executando o Ubuntu 16.04 lts e o 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. Os servidores são o Dell PowerEdge 1950 Gen II e o Dell PowerEdge 2950 Gen II

Objetivo geral

Os servidores de armazenamento em nuvem do Hibernate passaram um tempo ocioso, por exemplo, 20 minutos e desibernaram com o WOL para reduzir 6272,09 quilos de dióxido de carbono por ano, sendo 6680kw apenas do nosso data center, métricas alcançadas durante uma auditoria energética detalhada.

Solução ineficaz tentada

Panorama

Os trabalhos de paisagem no local / cron oferecem apenas inicialização e desligamentos programados, portanto ineficazes para o nosso alcance.

Powernap

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

XXXXXXX ~ $ status do powernap do serviço sudo
● powernap.service - PowerNap
   Carregado: carregado (/lib/systemd/system/powernap.service; desativado; predefinição de fornecedor
   Ativo: inativo (morto)

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 hibernateesudo systemctl hibernate-sleep

  1. powernap - Estou preenchendo 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

Atualizei as CPUs do Dell 1950 Gen II dual Xeon E5335 com as CPUs Xeon X5365. O X5365 permite o gerenciamento de energia e define o gerenciamento de energia a partir do BIOS. Honestamente, eu não era a favor de uma atualização como o X5365 consome 70 watts por CPU mais que o E5335, mas fiz isso a favor dos testes de hibernação.

Atualização 1

Neste momento, pm-utilsé a única maneira de separar wolo nicho. Atualmente, estou explorando a configuração ideal para criar um gancho de energia para as configurações de CA durante o tempo ocioso.

Quaisquer recomendações, por favor.

Fab
fonte
1
Bem-vindo ao Ask Ubuntu. Por favor, qual é a sua pergunta? Por favor, seja mais específico .
MadMike 21/02
Os servidores em nuvem do Hibernate passaram um tempo inativo e desibernaram com o WOL. O detalhe extra é dar um exemplo de cenário de trabalho.
21417 Fab
1
Eu não conseguia entender bem qual é a sua pedra de tropeço. O que você tentou que não está funcionando e / ou o que especificamente precisa de ajuda para entender?
Zanna
3
A hibernação não é prática? Dependendo do tamanho da RAM e da velocidade de leitura / gravação do disco, a hibernação e a retomada podem levar alguns minutos. Como as solicitações são tratadas durante esse período? Seus usuários vão querer esperar tanto tempo? Simplesmente suspender pode ser um compromisso melhor para economizar energia e permanecer mais ágil. E talvez virtualizar seus servidores e hospedá-los em uma máquina poderosa ou em um cluster que permita suspender / retomar peças enquanto equilibra a carga em outras pessoas, também pode ajudar a economizar energia. Observe que eu não tenho experiência com sistemas de servidores em larga escala, apenas supondo.
Byte Commander
1
Eu concordo com o Byte Commander. Para informações de pessoas com experiência real na operação do data center, você provavelmente deve perguntar sobre a falha do servidor .
David Foerster

Respostas:

0

Eu montei um pequeno script que você pode executar em um cronjob a cada 15 minutos ou 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

Primeiro, obtém o número de usuários que efetuaram login no sistema e a carga média durante os últimos 15 minutos. Você deve conseguir descobrir a carga média ociosa do sistema usando cat /proc/loadavg. O terceiro número de ponto flutuante fornece a média nos últimos 15 minutos. Este valor é útil para definir um limite definido na variável AvgLoadThresh. Isso certamente precisará de ajuste. A outra coisa que você pode definir é quanto usuários podem fazer login e o sistema entra em hibernação de qualquer maneira. Está definido ActiveUsersThresh. Apenas para garantir que o sistema nem sempre esteja hibernando quando você estiver fazendo manutenção ou algo assim.

Eu acho que alguém poderia criar verificações mais inteligentes, então veja isso como uma primeira abordagem simples. Por exemplo, eu não sei qual banco de dados ou servidor da web é usado na instalação do owncloud, mas você pode tentar pará-los normalmente antes do comando hibernate, para que ninguém perca a conexão repentinamente.

romed
fonte