如何在低负载期间关闭(关闭电源)集群节点?

如何在低负载期间关闭(关闭电源)集群节点?

我正在为能源咨询业务开发软件,在监控数据中心的能源使用情况时,我注意到数据中心的典型电力负载“模式”只是一条直线,因为所有设备全天候运行。如果您将其与实际使用模式(网络负载、CPU 使用率等)进行比较(我们就是这样做的),您经常会发现很长一段时间内使用率很低,但可用容量却很充足。

这些模式在很多情况下都是可以预测的,为了节省能源,定期或在低负荷条件下关闭部分设备(服务器、交换机、存储)会很好。然而,我认为有几个方面需要考虑,包括

  • 处理峰值负载或突发峰值
  • 节点间数据一致性
  • 与节点的平均正常运行时间相比,启动时间(以及可能的同步时间)较长

可能还有更多。有没有软件可以处理这种情况,还应该注意什么?这是一个可行的建议吗?

就我的目的而言,集群并不一定意味着在操作系统级别对机器进行集群,通过负载平衡器接收请求的相同主机(即应用程序级别集群)也算在内。我不确定 MySQL 集群或类似集群是如何工作的,但我可能也会将它们计算在内。

我正在寻找有关任何操作系统的建议。

另请参阅我的关于能源效率的帖子在 Stack Overflow 上提出了这个问题。

答案1

力量

使用交换式 PDU这样您就可以在带外打开和关闭服务器和交换机。这独立于操作系统和设备,这将大大简化打开和关闭设备的配置和逻辑。如果您的服务器都具有支持网络的 IPMI 接口,则可以改用这些接口。我建议不要尝试使用更高级别的功能(如 LAN 唤醒)来打开和关闭设备。

上电/断电逻辑

这可以有多种形式。一些集群软件(如摩押) 内置了一个解决方案。否则,你可以用以下伪代码编写一些脚本:

  1. 检查整体集群负载
  2. 如果集群负载>阈值1,开启一些节点
  3. 如果集群负载<阈值2,则关闭一些节点

将其放入 cron 并让其每半小时运行一次。

集群软件堆栈

显然,您需要确保您的集群软件堆栈能够处理这些设备一直处于启动和关闭状态的情况。在这里进行大量测试,考虑模糊的计时问题(启动需要时间)以及您使用的开机/关机逻辑中可能出现的任何竞争条件。

答案2

VMware

其企业产品 VSphere 4 的最新版本可以关闭不需要满足容量要求的主机,并通过实时分配虚拟机在需要时将其唤醒。结合将硬件整合到虚拟化平台上所带来的电力/能源节省,您可以获得显著的电力节省。

答案3

今天 Planet Ubuntu 上刚刚提到了这一点。该帖子可以在这里. 它讨论了使用云按需启动/关闭机器的实用解决方案的开发午睡

答案4

嗯,对于服务器,可以使用 SHUTDOWN.EXE 命令远程关闭 Windows 机器。在 Unix 上,使用 telnet/ssh 脚本可以轻松完成相同的操作。

更大的问题是如何重新启动它们。你需要网络唤醒或者类似的东西。

执行此操作的难点在于验证您关闭的机器是否真的在执行重要任务。例如,没有人真正确定 cron 作业应该去哪里,所以他们只是将其放在集群 Web 服务器上。现在您关闭了该机器,作业不再按预期运行。

如果环境受到严格控制,并且您确切知道每台机器在做什么,那么这将非常有意义。

相关内容