在多个OpenSuSE 10.3服务器上使用网络UPS工具(NUT)2.2.0监控UPS电源状态

在多个OpenSuSE 10.3服务器上使用网络UPS工具(NUT)2.2.0监控UPS电源状态 网络UPS工具是一个程序的集合

使用多个OpenSuSE 10.3服务器上的网络UPS工具(NUT)2.2.0监控UPS电源状态

网络UPS工具是一系列程序,为监控和管理UPS硬件提供了一个通用接口。

网络UPS工具(NUT)项目的主要目标是提供对UPS硬件的可靠监控,并确保连接的系统的安全关闭。

这是一个监控大量UPS硬件的开发项目。 许多型号的背面都有端口,以允许其他设备检查状态。 如果它提供有关电源和电池状态的基本信息,则可能无需太多困难就可以支持。 还支持高端型号的更高级功能,以便随时间跟踪温度和电压等值。

使用网络通信,使得多个系统可以监视单个物理UPS并且必要时关闭,而UPS本身没有任何特殊的“共享硬件”。

预安装

在服务器上安装并运行之前,将UPS插入电源socket,并将信号电缆(串行或USB)连接到将运行upsd的服务器。 不要将任何服务器电源线连接到UPS上的socket,直到您对NUT的工作以及其硬件的运行情况有信心。 通常建议您在测试UPS时使用虚拟负载(如灯)。 这也将告诉您UPS何时发电,何时关机,让您有机会安全地进行实验,并以一种将生产服务器连接到UPS后无法做到的命令获得信心。

安装

安装螺母 RPM包。 如果您使用YaST2,将自动添加所需的软件包。 从命令行可以使用

yast2 -i nut

作为根。

在OpenSuSE 10.3中,您将获得2.2.0的安装螺母

这将将所有必需的二进制文件放在您的路径和一组骨架配置文件中。 您将必须以root用户身份编辑文件才能定义您的UPS硬件

组态

配置本地连接的UPS

打开根shell,或者使用eg

sudo vi

编辑配置文件。

在文件/etc/ups/ups.conf中,您有一个带有默认值的虚拟部分,如下所示:

[myups]
       driver = undefined
       port = /dev/undefined
       desc = "Local UPS"

编辑文件,并将驱动程序设置为指向您的UPS的正确驱动程序,连接信号电缆的端口,并添加说明。 有关支持的Branded和型号的列表,请参阅/usr/share/nut/driver.list

这是连接到串行端口的APC SmartUPS 1400的条目。

[apc_smartups_1400]
       driver = apcsmart
       port = /dev/ttyS0
       desc = "APC SmartUPS 1400"

您必须修改/etc/ups/upsd.users文件才能配置用户和权限。 密码在安装过程中自动生成,因此如果您愿意,可以将它们设置为这些随机值。 如果要使用可以记住的密码,请编辑该文件。 默认文件中有两个条目,我还添加了一个管理员用户,以便我可以从命令行校准和测试UPS。

请注意,这些用户只能从localhost连接,所以现在安全性不是一个大问题。 使用远程从站,您应该使用比我在这些示例中更高级的密码。

以下是/etc/ups/upsd.users文件中定义的三个用户。

[upsmaster]
        password = masterpass123
        allowfrom = localhost
        upsmon master
[upsslave]
        password = slavepass123
        allowfrom = localhost
        upsmon slave
[upsadmin]
        password = upspass
        allowfrom = localhost
        actions = SET
        instcmds = ALL

upsd守护进程仅对UPS进行轮询,您需要其他程序来检查状态。 编辑其配置文件以反映UPS的新名称以及登录名和密码。

/etc/ups/upsmon.conf

# MONITOR myups@localhost 1 upsmaster 67fc9377aa master
MONITOR apc_smartups_1400@localhost 1 upsmaster masterpass123 master

如果我远程工作,并且电源电力短路,电源恢复时,我也宁愿收到一个“墙”通知。 换行:

NOTIFYFLAG ONLINE   SYSLOG

NOTIFYFLAG ONLINE   SYSLOG+WALL

/etc/ups/upsmon.conf文件中。

/etc/ups/hosts.conf仅用于附带的CGI程序,但您也可以在此处添加正确的信息

/etc/ups/hosts.conf

# MONITOR myups@localhost "Local UPS"
MONITOR apc_smartups_1400@localhost "APC SmartUPS 1400"

现在我们终于可以开始所有这些程序了:

rcupsd start

linux:~ # rcupsd start
Starting NUT UPS drivers                                             done
Starting NUT UPS server                                              done
Starting NUT UPS monitor                                             done

检查您是否正在运行,您可以从UPS读取存储的值。 首先列出可用的设备

upsc -l

...然后读取所有值:

upsc <ups_name>

linux:~ # upsc -l
apc_smartups_1400
linux:~ # upsc apc_smartups_1400
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 00
[...]

测试

在将服务器连接到电源之前,请测试一个真实的电源故障,将电源线拔下到UPS单元。 它应该故障转移到电池,你会收到一个警告信息。 如果您登录并运行KDE,您可以从KWrited获取一个弹出窗口,其中包含以下消息:

Broadcast Message from upsd@linux
        (somewhere) at 22:51
UPS apc_smartups_1400@localhost on battery

将电缆重新插入,并观察已恢复供电的令人放心的信息。

Broadcast Message from upsd@linux
        (somewhere) at 22:51
UPS apc_smartups_1400@localhost on line power

如果这样,您可以关闭服务器并将电源线连接到UPS。 在电源故障的情况下,您将收到测试过程中看到的消息。 一旦电池电量过低,UPS发送“低电量”信号,NUT将关闭服务器。 您可能可以在UPS寄存器中设置此阈值,否则您必须对脚本执行一些操作

shutdown -h -t<minutes>

(系统在<分钟之后暂停),一旦UPS处于电池状态,然后执行

shutdown -c

(取消关机)当UPS返回在线电源。 不是所有的UPS设备都会发送此“恢复”消息。 这是您只需要测试和自定义的地方。

在UPS上运行设备

所以您的服务器现在正在使用电池供电,直到电池耗尽。 您可能想要一次实际运行服务器,直到电池出现故障,只是想知道您有多少电池时间。 大多数UPS设备可以显示负载和电池充电百分比。 当您处理真正重要的事情并且电源短路或掉电时,UPS是非常好的,如果长时间停电,您可以在电池电量不足时暂停,休眠或关机。

如果您将BIOS设置为自动启动机器,当它开始接收电源时,它会在电源恢复时自动启动。 在出现电源故障的情况下,您不想让服务器运行并耗尽电池。 只需将UPS视为一个可以防止电源浪涌和尖峰的单元,并且可以在电源故障时为您提供干净的关机。 不要因为可以而在电池上运行服务器。 UPS中的电池并不意味着被耗尽,并且在电源恢复时通常需要几个小时才能恢复充满电。 停电后,您不希望在没有安全网络的情况下运行服务器 - 关闭服务器,并且在电源恢复之后,在整个城市的每个设备同时启动时,将其保存在电源恢复后的粗略时间内,开始动力。 出于同样的原因,将您对UPS的所有内容限制在重要的服务器上。 不要忘记在电源故障期间添加必要的支持硬件,如网络设备,KVM和监视器来操作服务器。 避免在UPS电源下运行打印机和大多数工作站。 将应急灯放在服务器机房中,以便在正常灯熄灭时可以在那里工作。 如果您使用自己的电源(例如Generators)将服务器运行一段时间,甚至可能要保持HVAC处于相同的电源以避免房间过热。

还要记住,当所有设备开始一次抽取poewr时,服务器和工作站都会同时启动,所有的监视器和指示灯亮起,激光打印机开始预热,您必须要打一两个保险丝。 然后延长您的停电。 确保所有非关键设备在电源故障期间被关闭,然后再手动接通。

远程客户端

允许远程客户端

现在你知道当地的UPS正在工作 - 应该保持服务器的运行状态并通过串行端口或USB通知操作系统 - 您可能希望将更多的服务器连接到其他电源socket。 但是,只有一个USB或串行电缆。 这是当您使用串行电缆在机器上需要NUT upsd守护程序时,通过网络通知其他服务器。

首先编辑/etc/ups/upsd.conf以允许客户端。 这里允许整个子网,您可能希望使其更细致,并且只包括特定的IP。

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL upsnet  192.168.1.0/24
ACCEPT localhost
ACCEPT upsnet
REJECT all

现在允许从站从/etc/ups/upsd.users中的这个网络连接:

[upsslave]
        password = slavepass123
        allowfrom = localhost upsnet
        upsmon slave

再次重新启动upsd daemond以接收更改。

rcupsd restart

linux:~ # rcupsd restart
Shutting down NUT UPS monitor                                        done
Shutting down NUT UPS server                                         done
Shutting down NUT UPS drivers.                                       done
Starting NUT UPS drivers                                             done
Starting NUT UPS server                                              done
Starting NUT UPS monitor                                             done

或者更好的是,重新加载配置,这比重新启动守护程序要快得多,只需要重新配置任何设置,除了需要如上所述重新启动服务的驱动程序设置。

rcupsd reload

linux:~ # rcupsd reload
Reload service NUT UPS (excluding upsdrvctl)                         done

并允许客户端通过防火墙(OpenSuSE默认运行一个称为SuSEfirewall的iptables防火墙)。 upst监听TCP端口3493,默认监听所有接口。

创建SuSEfirewall2服务定义,因为RPM没有包含一个。 制作一个名为/etc/sysconfig/SuSEfirewall2.d/services/upsd的新文件。 与此内容:

# Service description for upsd, the UPS daemon from NUT
# (Network UPS Tools)
#
## Name: NUT upsd
## Description: Allows remote monitoring of UPS power status
# space separated list of allowed TCP ports
TCP="3493"
# space separated list of allowed UDP ports
UDP=""
# space separated list of allowed RPC services
RPC=""
# space separated list of allowed IP protocols
IP=""
# space separated list of allowed UDP broadcast ports
BROADCAST=""

现在开始

YaST

作为根,选择“安全和用户” - >“防火墙”。 选择正确的网络,然后在下拉列表中选择NUT upsd。 添加服务,然后单击下一步按钮。 这在/ etc / sysconfig / SuSEfirewall2配置脚本中的FW_CONFIGURATIONS_EXT变量中将upsd添加到允许的服务列表中。 端口3493现在允许通过iptables防火墙。

配置远程客户端

在远程机器上安装螺母,这个称为linux64。

注释掉/etc/ups/ups.conf中的所有内容,因为我们没有附加本地UPS:

#[myups]
#       driver = undefined
#       port = /dev/undefined
#       desc = "Local UPS"

编辑/etc/ups/upsmon.conf来监视连接UPS的服务器:

#MONITOR myups@localhost 1 upsmaster 04fb251a3f master
MONITOR apc_smartups_1400@linux 1 upsslave slavepass123 slave

将UPS服务器添加到/etc/ups/hosts.conf中

#MONITOR myups@localhost "Local UPS"
MONITOR apc_smartups_1400@linux "APC SmartUPS 1400"

现在启动upsd服务,这将忽略实际的upsd和UPS驱动程序,因为它们是未配置的,只能启动upmon。

rcupsd start

linux64:~ # rcupsd start
Starting NUT UPS monitor                                             done

检查连接是否正常,并且可以读取远程UPS服务器的状态值。

upsc apc_smartups_1400@linux

linux64:~ # upsc apc_smartups_1400@linux
battery.alarm.threshold: 0
battery.charge: 094.0
battery.charge.restart: 00
       [...]

再次测试UPS,并检查新客户端是否也收到该消息

Broadcast Message from upsd@linux64
        (somewhere) at 0:13 ...
UPS apc_smartups_1400@linux on battery

将此服务器的电源线连接到UPS,您现在有两台服务器受到中断保护,同时它们都是监控电源状态。

参考文献