检测服务器何时使用 UPS 电池运行

Wil*_*aft 25 raid ups power home-server

我有一个家庭服务器(HP Proliant ML310 G4),是一个月前从我的雇主那里购买的。该服务器运行 Debian Linux,我几乎将它用于所有事情。我可以避免这样做,因为我的需求并不那么苛刻,因此在任何给定时间服务器很少承受重负载。这台服务器有一个由 mdadm 管理的 2 TB RAID1 阵列(带有一个热备用),我使用它通过 Samba 在我的网络上共享文件。我正在一个不属于阵列的较小硬盘驱动器上运行操作系统。

我让服务器通过一个 255 瓦的小型 UPS 供电,因为我需要它承受轻微的电源波动而不会停机。这非常重要,因为突然不正常关机(由断电或停电引起)可能会搞砸 RAID 阵列,这种情况已经发生过一次。

如果发生电源故障,我估计 UPS 只有 10-15 分钟的电力。可能还有更多,但我不想自动假设有。这足以解决持续几分钟或更短时间的停电。但是,如果电源关闭几个小时,我需要服务器在 UPS 电源出现故障之前自动正确关闭。这有望防止 RAID 完整性在这些情况下受到影响。

这种事情在笔记本电脑上很容易 b/c 它有内置传感器来确定它何时使用电池供电,但这个服务器没有(据我所知)。我有一个不寻常的网络设置,其中我的 DSL 调制解调器与我的路由器分开。路由器也在 UPS 上,它允许我通过我的笔记本电脑通过 SSH 进入并在发生电源故障时关闭服务器。不幸的是,这只有在我当时在场时才有效。我需要一个始终有效的解决方案,无论我是否在那里进行干预。

由于我的 DSL 调制解调器不在 UPS 上,如果电源出现故障,它会与其他所有设备一起停机。我故意这样设置它,因为我对如何解决这个问题有了一个想法:我正在考虑编写一个脚本来 ping google.com 或其他一些高流量/高可用性站点。如果 ping 成功完成,服务器将继续运行。如果 ping 失败(因为调制解调器已关闭),脚本会认为电源已关闭并告诉服务器关闭。我会将脚本添加到 Cron 并让它每 5 分钟运行一次。这有望让服务器有足够的时间在 UPS 电量耗尽之前关闭。

在我开始编写脚本的麻烦之前,我想知道是否有更好的方法来做我需要的。在此先感谢您的帮助。

Eug*_*eck 34

有一种古老但行之有效的方法:使用旧的模拟调制解调器。这是如何

  • 通过串口(例如 ttyS0)将调制解调器连接到服务器
  • 不将调制解调器的电源插入 UPS,而是直接插入主电源
  • 不要在调制解调器的电话线上插入任何东西

现在每隔几秒钟轮询一次调制解调器发送ATZ[Enter]并期待OK[Enter]- 如果调制解调器没有应答,您可能认为它没有电源,这意味着 UPS 使用电池。

编辑

主要的一点是,如果您的 Internet 连接因某些其他原因断开,服务器将不会关闭,因为它应该是。

编辑 2

来自评论:

  • 当然,你应该在一次检查和下一次检查之间保持某种状态,只有在 N 次检查失败后才关闭。我没有提到这一点,因为它适用于所有可能的检查,不仅是调制解调器
  • 使用调制解调器和使用任何与网络有关的东西之间的区别在于,会发生网络连接的暂时丢失:如果您重新启动交换机,您不想被“登录已禁用,服务器在 USV 上”所困扰或者重新配置VLAN。根据我的经验,串行线路非常坚固。


LPC*_*hip 22

UPS 通常带有 USB 或 COM1 连接器。当您将它连接到您的服务器时,您就可以开始监控 UPS。

在windows环境下,不安装软件,消息就已经注册了,它会为你关闭服务器。我不知道这在 linux 上是如何工作的,但我敢打赌有一些软件包可用于与您的 UPS 连接。

  • 然后找个可以和电脑通讯的UPS。 (27认同)