Как я могу автоматически переводить серверы облачного хранилища в спящий режим?

13

У меня есть дата-центры облачного хранилища под управлением Ubuntu 16.04 lts и NextCloud / OwnCloud, которые не требуют круглосуточной работы и нуждаются в решениях по управлению питанием. Серверы Dell PowerEdge 1950 Gen II и Dell PowerEdge 2950 Gen II

Общая цель

Серверы облачных хранилищ Hibernate превышают время простоя, например, на 20 минут, и имеют такую ​​де-спячку с WOL, чтобы сократить 6272,09 килограмма углекислого газа в год, что составляет 6680 кВт только от нашего центра обработки данных, что было достигнуто за счет подробного энергетического аудита.

Неэффективное решение попыталось

Пейзаж

Ландшафтные работы в помещениях / cron предлагают только запланированные запуск и выключение, что неэффективно для нашего достижимого.

PowerNap

powernap, кажется, подходит, но служба не запускается в Ubuntu 16.04

XXXXXXX ~ $ sudo service powernap status
● powernap.service - PowerNap
   Загружен: загружен (/lib/systemd/system/powernap.service; отключен; предустановка поставщика
   Активный: неактивный (мертвый)

ponwernap, похоже, использует устаревшие сервисы, такие как network.service, которые больше не доступны в Ubuntu 16.04

Достижимые цели

Wake on LAN (WOL)

Включить WOL легко, следуя ручной настройке по этой ссылке . или с использованием Powewake

Спящий режим сервера

До сих пор мне удавалось только переводить серверы в спящий режим, используя sudo systemctl hibernateиsudo systemctl hibernate-sleep

  1. powernap - я подаю отчеты об ошибках, чтобы удалить истощенные зависимости
  2. systemctl - может привести куда-то
  3. pm-utils - может привести к чему-то тоже

Модернизация оборудования

Я обновил процессоры Dell 1950 Gen II dual Xeon E5335 с процессорами Xeon X5365. X5365 обеспечивает управление питанием и настройку управления питанием из BIOS. Честно говоря, я не был сторонником такого обновления, поскольку X5365 потребляет на 70 Вт на процессор больше, чем E5335, но сделал это в пользу тестирования гибернации.

Обновление 1

На данный момент pm-utilsэто единственный способ отделиться от wolсуеты. В настоящее время я изучаю оптимальную конфигурацию для создания перемычки питания для настроек переменного тока для простоя.

Любые рекомендации, пожалуйста.

потрясающий
источник
1
Добро пожаловать в Спросите Ubuntu. Пожалуйста, какой у вас вопрос? Пожалуйста, будьте более конкретны .
MadMike
Облачные серверы Hibernate миновали время простоя и стали такими бездействующими с WOL. Дополнительная деталь - привести пример рабочего сценария.
Фаб
1
Я не мог понять, какой у вас камень преткновения. Что вы пробовали, что не работает и / или что конкретно вам нужно для понимания?
Занна
3
Разве гибернация не практична? В зависимости от объема ОЗУ и скорости чтения / записи диска, спящий режим и возобновление могут занимать до нескольких минут. Как обрабатываются запросы в течение этого времени? Ваши пользователи захотят так долго ждать? Простое приостановление может быть лучшим компромиссом для экономии энергии, оставаясь при этом более гибким. И, возможно, виртуализация ваших серверов и размещение их на одной мощной машине или в кластере, который позволяет приостанавливать / возобновлять части, в то же время балансируя нагрузку на другие, также может помочь в экономии энергии. Обратите внимание, что у меня нет опыта работы с крупномасштабными серверными системами, я просто догадываюсь.
Byte Commander
1
Я согласен с Byte Commander. Для получения информации от людей, имеющих реальный опыт работы центра обработки данных, вам, вероятно, следует спросить об отказе сервера .
Дэвид Фёрстер

Ответы:

0

Я собрал небольшой скрипт, который вы можете запускать в cronjob каждые 15 минут или используя таймеры 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

Сначала он получает количество пользователей, вошедших в систему, и среднюю загрузку за последние 15 минут. Вы должны быть в состоянии узнать среднюю загрузку системы в режиме ожидания, используя cat /proc/loadavg. Третье число с плавающей запятой дает среднее значение за последние 15 минут. Это значение полезно для определения порога, установленного в переменной AvgLoadThresh. Это, безусловно, потребуется тюнинг. Другая вещь, которую вы можете определить, это то, сколько пользователей может войти в систему, и система все равно перейдет в спящий режим. Это установлено в ActiveUsersThresh. Просто чтобы убедиться, что система не всегда находится в спящем режиме, когда вы выполняете техническое обслуживание или что-то еще.

Я думаю, можно было бы придумать более разумные проверки, так что воспринимайте это как первый простой подход. Например, я не знаю, какая база данных или веб-сервер используется в вашей собственной установке облака, но вы можете попытаться остановить их изящно перед командой hibernate, чтобы никто не потерял соединение.

Romed
источник