如何自动休眠云存储服务器?

Fab*_*Fab 15 server hibernate power-management pm-utils 16.04

我有运行 Ubuntu 16.04 LTS 和 NextCloud/OwnCloud 的云存储数据中心,它们不需要 24/7 可用并且需要电源管理解决方案。服务器为 Dell PowerEdge 1950 Gen II 和 Dell PowerEdge 2950 Gen II

总体目标

Hibernate 云存储服务器超过空闲时间(例如 20 分钟)并通过 WOL 进行这种解除休眠,以每年减少 6272.09 公斤的二氧化碳,仅从我们的数据中心就减少了 6680 千瓦,这些指标是通过详细的能源审计实现的。

尝试了无效的解决方案

风景

本地/cron 作业的环境仅提供计划的启动和关闭,因此对我们的可实现目标无效。

小睡

powernap 似乎是要走的路,但该服务未在 Ubuntu 16.04 上启动

XXXXXXX~$ sudo 服务 powernap 状态
? powernap.service - PowerNap
   加载:加载(/lib/systemd/system/powernap.service;禁用;供应商预设
   活动:不活动(死)

powernap 似乎使用了折旧的服务,例如 Ubuntu 16.04 中不再可用的 network.service

可实现的目标

局域网唤醒 (WOL)

按照此链接上的手动设置启用 WOL 非常简单。或使用电源唤醒

服务器休眠

到目前为止,我只能使用sudo systemctl hibernatesudo systemctl hibernate-sleep

  1. powernap - 我正在提交错误报告以删除耗尽的依赖项
  2. systemctl - 可能导致某处
  3. pm-utils - 也可能导致某个地方

硬件升级

我已经使用 Xeon X5365 CPU 升级了 Dell 1950 Gen II 双 Xeon E5335 的 CPU。X5365 启用电源管理并从 BIOS 设置电源管理。老实说,我不赞成这种升级,因为 X5365 每个 CPU 比 E5335 多消耗 70 瓦,但这样做是为了支持休眠测试。

更新 1

此时此刻pm-utils是唯一的出路,而不是wol在 nic 上设置。目前,我正在探索最佳配置,以便为空闲时间的交流设置创建一个强大的挂钩。

任何建议,请。

小智 0

我编写了一个小脚本,您可以每 15 分钟在 cronjob 中运行一次或使用 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
Run Code Online (Sandbox Code Playgroud)

它首先获取登录系统的用户数以及最近15分钟内的平均负载。您应该能够使用 找出您的空闲平均系统负载cat /proc/loadavg。第三个浮点数给出了过去 15 分钟的平均值。该值有助于定义变量中设置的阈值AvgLoadThresh。这肯定需要调整。您可以定义的另一件事是允许多少用户登录以及系统无论如何都会进入休眠状态。这是设置在ActiveUsersThresh. 只是为了确保当您进行维护或其他操作时系统不会始终处于休眠状态。

我想人们可以想出更智能的检查,所以将其视为第一个简单的方法。例如,我不知道您自己的云安装中使用了哪个数据库或网络服务器,但您可以尝试在 hibernate 命令之前优雅地停止它们,这样就没有人会突然失去连接。


fra*_*ce1 0

要简单地为 Ubuntu <21 休眠,您可以使用 hibernate 命令 (sudo apt install hibernate)。其他事情就行不通了。从某处窃取:将resume=path-to-your-swap放入GRUB_CMDLINE_DEFAULT

我使用苹果笔记本电脑对此进行了测试。效果很好。使用 UUID 不起作用 - 有时会发生某种变化