oss

UPS 仪表盘无法检验最后一步

10 条来源 6 条一手来源 已翻译 2026年8月28号

正文
NERSC 数据中心内,一台 UPS 电源管理机柜立在一排排网络机架和蓝色线缆旁。

2011 年 NERSC 网络机架旁的 UPS 电源管理模块。照片呈现了 NUT 部署必须理清的依赖关系:电力、状态通信与关机控制共处一室,却不会自动共享故障边界。摄影:Derrick Coetzee。[10]

视频模式

本文包含 1 个可跳转的视频片段。

  1. 1 Techno Tim 演示 Network UPS Tools 服务器、远程客户端与受控停电测试 YouTube 视频

UPS 仪表盘即使显示电池状态健康,到了真正要紧的时刻,也无法保证整架设备能够妥善关机。读取电量走的是最容易的一段。市电消失后,艰难的一段才开始:适配具体硬件的驱动必须识别状态,服务必须保存并共享状态,每台受保护主机必须判断何时停止,UPS 则要等文件系统和工作负载全部关闭后才能切断插座输出。Network UPS Tools(NUT)的核心就是这条链,漂亮的电池电量表只占其中一小段。[2][3]

Techno Tim 这份 49 分钟的 NUT 指南值得观看,因为它把抽象概念重新放回线缆旁。视频从 UPS 和一台小型 Linux 主机讲起,依次走过驱动、配置文件、远程客户端、仪表盘、告警,最后做了一次真实的停电测试。NUT 项目还在自己的文档页中链接了这份指南;对于第三方操作讲解,这是一项少见且很有用的认可。[1][3]

观看时可以始终追问:每一步由哪个组件掌握权限? 驱动负责报告电源设备给出的信息,数据库何时能够安全停止则由别处决定。upsd 负责发布状态,主机停机要交给监控进程和操作系统。upsmon 能够让主机进入已确定的关机流程,然而干净地停止操作系统,与命令 UPS 切断输出电源,仍是两件事。看清这些职责后,视频中的命令会更容易理解。

继续照着视频操作之前,需要先划清一道日期界线。视频发布于 2021 年,使用旧称 masterslave;NUT 当前文档采用 primarysecondary。这段录像适合作为硬件与运行行为的具体导览,名称、权限、服务集成和网络暴露方式则应以现行手册为准。[1][3][6]

5:50 左右,驱动成为一份硬件契约

视频里第一项真正影响后续的配置,是选择 UPS 驱动。从这里开始很合适,因为 NUT 把不同电源设备的差异收进驱动层。

ups.conf 中的一条配置会命名设备、选择驱动,并指定端口或网络端点。驱动使用厂商或协议自己的方言,再把取得的信息映射成 NUT 的通用变量:OL 表示市电供电、OB 表示电池供电、LB 表示低电量;硬件若能提供,还会有 battery.chargebattery.runtimeups.load 等读数。标准化后的状态经本地套接字送出。upsd 接收并缓存这些状态,再提供给客户端;USB 线缆的轮询留在驱动一侧。[2][3]

这层分工也让每类故障留下不同的特征。设备节点或权限出错时,驱动无法与硬件建立通信。驱动运行正常,而 upsc myups@localhost 读不到状态时,应检查 upsd、状态文件路径或访问控制。两者都正常,主机却在临界状态下继续运行时,排查范围便落到 upsmon 和操作系统集成上。“NUT 坏了”还称不上诊断。

统一的变量名与测量质量是两回事。有的 UPS 根据负载和电池状况估算续航,有的只暴露粗略的低电量标志,也有设备完全省略某项数值。因此,生产策略应从现场使用的具体设备、驱动、固件和连接方式出发,不能照搬另一型号的配置。项目的硬件兼容性数据可作为起点;现场证据来自放电演练。

11:07 左右,四份文件划分权限

随后,指南依次处理 upsmon.confupsd.conf、安装运行模式与 upsd.users,乍看像是一批散落的配置。实际每份文件回答的问题各不相同。

ups.conf 说明怎样连接并解释电源设备upsd.conf 说明标准化状态服务监听在哪里upsd.users 说明哪些已认证客户端有权管理设备或承担 upsmon 角色;普通只读状态查询不受它控制。upsmon.conf 说明本机依赖哪些电源,以及电源已无法维持供电时,本机应该做什么。软件包还会加入模式设置,常见选项是 standalone、network server 或 network client,用来决定服务管理器启动哪些部分。[2][3][7]

权限划分也能从网络通信中看见。保持默认配置时,upsd 监听回环地址并使用 TCP 端口 3493;远程监控需要明确设置 LISTEN 地址,同时开放合适的防火墙通道。NUT 手册提醒,单独绑定网络接口只解决监听位置,不能充当安全控制。[6] 只要能够访问服务,客户端即使没有监控账户也能查询状态,因此合理的部署只向受保护的管理网络开放 upsd,只读应用不应取得管理权限,upsmon.conf 中的监控凭据也应按秘密信息管理,不能当成无害的遥测配置。[7]

仪表盘因此位于链路下游。它可以查询同一份 upsd 状态,绘出很出色的历史曲线,但图表在关机协议中没有特殊权限。仪表盘离线时,upsmon 仍应照常行动;反过来,一张绿色图表也无法证明监控凭据有效,或本机关机命令拥有足够权限。

33:21 左右,客户端身在远端,电力仍在本地

视频配置远程 NUT 客户端时,项目名称有了字面意义。连接 UPS 的 USB、串口或网络管理界面的那台系统运行驱动和 upsd。由同一台 UPS 供电的主机可以按 secondary 角色运行 upsmon,经网络读取状态。primary upsmon 通常位于能够管理所连 UPS 的系统上,负责协调最后的负载断电。TrueNAS 为一台 UPS 向多台计算机供电的情况记录了同样的部署方式:一台机器掌握数据连接,再把状态发布给其余机器。[8]

危险之处在于把“远程”等同于“独立”。secondary 主机可以正常由电池供电,却会因为中间的交换机、Wi-Fi 接入点、DNS 服务或 NUT primary 插在未受保护的插座上,而失去状态信息通道。题图让这个问题变得具体:UPS 硬件、网络机架和线缆彼此相邻,但相邻只说明物理位置;状态通道能否比市电故障存续得更久,仍取决于实际供电关系。[10]

配置角色之前,先画两张图。供电图标明每台服务器、存储架、交换机和 NUT 主机由哪个 UPS 插座及电路供电。控制图标明驱动怎样连接 UPS,以及每个 upsmon 怎样连接 upsd。控制图必须持续可用,直到供电图中的设备完成关机。对于小型机架,可以把调制解调器或管理交换机与低功耗 NUT 主机接到同一套受保护电源上。大型环境还要如实记录冗余电源,并在 MONITOR 中填写真实的 power 值,不能假定每根电源线都提供等量且互相独立的供电。[4][5]

45:00 左右,测试改变状态,不只采集读数

视频末尾的生产测试最有分量。停电包含一系列不可逆的状态变化,单靠观察证明不了这些变化能够顺利完成。

在正常流程中,驱动首先报告 UPS 已转入电池供电。这时通常尚未下达关机令,毕竟 UPS 的用途之一就是撑过短时停电。当供电状况进入临界点——常见条件是电池供电与低电量同时出现,也可以由操作人员触发强制关机——primary 监控端会设置 NUT 的 FSD 状态。secondary 监控端看到这项决定后发出通知,等待各自配置的 FINALDELAY,调用 SHUTDOWNCMD,随后断开连接。primary 最多等待这些 secondary HOSTSYNC 所设的时长,然后开始自己的关机流程。断开连接只是一项有时限的协调信号,无法证明每台 secondary 已经物理停机。[3][4][5]

把控制权交给操作系统之前,primary 会创建 POWERDOWNFLAG 指定的文件。进入停机流程后段,服务已经停止、文件系统已经安全,此时集成钩子检查这个标记,并调用驱动的关机通道,常见命令是 upsdrvctl shutdown。到了这一步,UPS 才会切断负载供电。硬件配置合适时,市电恢复后插座重新上电,设置为交流电恢复后启动的主机也会随之开机。[3][4]

这个文件连接着两套权限。系统仍在完整运行时,upsmon 确定关机已经进入执行阶段;操作系统完成自身工作后,后期关机钩子才通知硬件断电。过早切断负载会危及数据。只停机而没有切断负载也会带来同样严重的后果:如果市电在机器已经停止但仍保持通电时恢复,系统就不会经历一次从断电到上电的转换,自然也无法借此重新启动。

NUT 自带直接演练协调流程的办法,这条命令的性质必须写清:upsmon -c fsd 会启动真实的强制关机序列,应视为破坏性操作。正式中断业务之前,可以在隔离的测试系统上演练,也可以使用一个只记录日志的 SHUTDOWNCMD 查看预期动作。手册明确警告,FSD 状态会锁存在 upsd 中;模拟结束后,操作人员应检查是否需要重启服务器、是否需要清除残留的断电标记,再确认系统已经重新进入待命状态。[4] Dan Langille 记录的一次 FreeBSD 多主机演练,也在这里留下了有用的旁证:各主机的日志和实际关机耗时,比监控画面更重要。[9]

后续还应安排一次维护窗口测试,在能够访问控制台的条件下,真正检验停机与负载断电。测试要测量最慢工作负载的耗时,确认 secondary 断开连接,检查后期断电钩子,并验证市电恢复后的启动。只看 battery.charge 下降,完成不了这项验证。

电池续航预算划出界线

NUT 能够协调关机顺序,却无法凭空增加续航时间,也无法让含糊的设备信号变得精确。HOSTSYNC 默认为 15 秒,单纯增大这个值并不会自动给缓慢的 secondary 留出更多关机时间。默认配置下,secondary upsmon 可以在调用 SHUTDOWNCMD 后退出;primary 看到连接断开时,数据库或虚拟机仍在停止。若切断负载必须等待,服务停止顺序就要让 upsmon 保持连接,直至这些工作负载安全结束;另一种做法是在 SHUTDOWNEXIT 中写入经过设计的延时,同时让 HOSTSYNC 大于实测时长。如果电池覆盖不了这段时间,重型工作负载就要借助 upssched 或其他策略提前开始停止,不能等到硬件最终报告低电量。[5]

通信中断也需要同样务实的处理。DEADTIME 让监控端决定,状态数据陈旧多久便应视为不可用;它分辨不了交换机故障与 primary 故障,也无法证明还剩多少电量。每次短暂通信间隙都立即按停电处理,会造成误关机。状态通道已经断开,却一直拖到电池耗尽,则会造成硬关机。计时器应依据实测轮询表现、真实网络拓扑、工作负载停止耗时和 UPS 放电曲线设定。

一台 Linux 主机配一台受支持的 USB UPS 时,一位操作人员即可负责整套系统。机器数量增加后,职责范围也随之扩大:稳定的设备标识、受限的网络暴露、软件包版本控制、凭据、服务顺序、状态陈旧告警,以及经过演练的恢复步骤,都会成为供电系统的一部分。如果没人说得清最后一条硬件命令由哪个进程发出,部署工作就还没有完成。

这段视频最终离开屏幕,检验了物理世界里的承诺,它的价值也正在这里。NUT 更深一层的启示同样具体:一个电池读数定义不了优雅停机。它来自一份共同约定,参与者包括驱动、状态服务器、监控角色、操作系统、始终保持可用的网络,以及储能足以让每一步走完的 UPS。最后一步尤其值得测试,因为任何仪表盘都无法代替操作人员完成它。

来源

  1. Techno Tim,《Network UPS Tools (NUT Server) Ultimate Guide》——本文嵌入的安装、远程客户端、监控与真实停电操作指南。
  2. Network UPS Tools 项目,《Network UPS Tools Overview》——分层的驱动、upsd、客户端、访问控制与共享关机体系。
  3. Network UPS Tools 项目,Network UPS Tools User Manual——部署拓扑、配置职责、硬件兼容性与完整关机流程。
  4. Network UPS Tools 项目,upsmon(8)——监控角色、power 值、FSD 模拟、关机流程与测试后的清理。
  5. Network UPS Tools 项目,upsmon.conf(5)——MONITORMINSUPPLIESHOSTSYNCFINALDELAYPOWERDOWNFLAG 与缓慢工作负载的时间界线。
  6. Network UPS Tools 项目,upsd.conf(5)——状态套接字路径、默认回环地址、TCP 端口 3493LISTEN 与网络暴露注意事项。
  7. Network UPS Tools 项目,upsd.users(5)——经过认证的管理操作、即时命令与 primary/secondary 监控角色。
  8. TrueNAS Documentation Hub,《Configuring UPS Service》——一台 primary 掌握数据连接、多台 secondary 经网络接收状态的独立部署案例。
  9. Dan Langille,《nut — testing the shutdown mechanism》——真实多主机 FSD 演练、日志、空运行测试与实测停止耗时的独立记录。
  10. Derrick Coetzee,《UPS Power Management Module, racks with network cabling in NERSC data center》——2011 年纪实照片,来自 Wikimedia Commons。
Previous 没有最快的 malloc,只有你测量过的工作负载

Recommended In oss

Matched by subject and format