使用 nut 代替 UPS 管理软件 WinPower 实现 ESXi 自动关机
实现方案
小打小闹方案,一般是一个 UPS,串口(或者转USB)线连接主机,主机上跑 ESXi,希望断电时自动关机。 由于 ESXi 本身基本上没啥 UPS 驱动功能(企业级环境下似乎也不怎么需要 ESXi 主机自己管理), 一般是单独拿一个虚拟机跑管理软件,必要时给 ESXi 发送关机信号。
这个时候,如果厂家给的管理软件用不起来,就十分闹心了。 参加本文第二节,“WinPower 加山特厂家坑我两次的历史”。
最终,发现使用开源的nut
管理软件,理论上可以实现全部功能,并且很有可能比厂家给的软件还稳定。 因为这玩意儿可以配置为一个 Linux Systemd 服务,可以自己编脚本控制和监控, 并且有人为 ESXi 专门编写了客户端。
基本架构是这样的:
- 通过一个USB转接器,把UPS通讯端口连接到服务器(不知道原生串口行不,主要是虚拟机分配,我估计行);
- 把这个设备分配各一个Linux虚拟机,驱动正常的话,重启后应该能看到类似
/dev/ttyUSB0
的设备; - 注意这个
/dev/ttyUSB0
的权限,网上说法不一,我这边是属于root:dialout
权限,不要尝试修改它的权限,重启后会恢复;因此,安装nut
之后应该把自动创建的nut
用户加入dialout
组; - 安装
nut
,按说明配置,这个网上资料很多,此处给出一套差不多能用的山特C1K的驱动,写在/etc/nut/ups.conf
里面:
[c1k]
#driver = blazer_ser
driver = nutdrv_qx
port = "/dev/ttyUSB0"
desc = "The C1K"
# 设置这个packs可能(或许bug)不影响upsc命令的电压显示,但影响充放电时间计算
override.battery.packs = 12
# 来电开机等待时间
ondelay = 60
# 停电时 FSD 关机等待时间,即 UPS 延迟关机时间
offdelay = 600
default.battery.voltage.high = 27.25
default.battery.voltage.low = 23
default.battery.voltage.nominal = 25.125
# 必须设置了前面几个电压参数,才能设置这个,否则启动失败
runtimecal = 240,100,720,50
- 检查并启动必要的
nut-
开头的服务,OK的话,使用upsc c1k
命令可以看到UPS硬件信息了;理论上,如果必要,已经可以手撸脚本检查upsc c1k
命令的输出做事情; - 再看看文档,编辑
upsd.users
文件,设置用于向网络提供UPS信息的网络服务; - 另外两个配置文件,
upsmon.conf upssched.conf
看了看,比较复杂,望而却步;同时,作用也应该就是在特定条件下执行某些命令,由于我们是想操作ESXi,而命令行操作ESXi必然要长期打开不太安全的ssh接口,所以这俩我决定不用了; - 因此,禁用了
nut-monitor
、nut-client
两个服务,也就是只提供信息,自己不做事情;
接下来,配置ESXi这头。需要安装一个第三方插件,因此需要开启社区支持。开启社区支持意味着需要关闭安全启动,这个会降低一些安全性,看实际场景了。
注
关闭安全启动前,需要在ESXi里面执行一个命令,官方文档有。不能直接在主板中关闭,否则会紫屏报错,吓死我了。
插件地址是NutClient-ESXi,目前为止开发还很活跃。基本上按文档安装配置就好。 功能比较简单,没有诸如电池还剩多少关机一类的,就一个功能就是停电多少秒之后安全。
这样做其实是有一个风险,就是机器关机之后,UPS仍然是开着的,没有输出也会逐渐耗完电池然后自动关机。 假如说在极端情况下,电池耗尽后再上电,如果主机也设置了上电自动开机,那么主机会在电池电量较低的情况下开机。 此时恰好再次断电的话,刚刚充进来的一点电怕是撑不到安全关机。
当然几率比较小啦。
再次鄙视山特,弄个软件不能好好测一测吗?
附加:WinPower 加山特厂家坑我两次的历史
重要
下面这一段看看就好,写完之后第二天我发现这个办法果然是瞎扯淡。 问题应该是出在自动关机相关的配置中。 似乎只只要设置了自动关机选项,就会如下文描述一样崩溃。 至于具体是开启了哪一个选项之后出问题,懒得研究了,感觉这玩意儿即使配好了,也稳定不到哪里去。
最近上了一台山特的 C1K UPS,用的是UPS串口转USB再直通给管理虚拟机的方案。 总体上硬件还行,但配套的 Win Power 管理软件有个诡异的问题,就是刚安装好时似乎都正常,能打开能通讯还能测试缺电关机。
但是,机器重启一次,就不正常了,表现为监控Agent服务频繁崩溃,即使将服务设置成自动重启也基本不能用。 由于第一次安装没有要求重启,我是过了两周之后才发现这玩意儿根本就没工作的。 此外,不知道是我折腾的还是本来就有的,每次开机时会弹窗要求管理员权限。
折腾半天重装两次之后,不得不求助于厂家。客服电话的答复时一定要在安装包上面右键,选使用管理员权限运行,然后正常安装。 做为一个高手,本人嗤之以鼻,说我不会把权限搞乱的,没有调整过UAC,并且双击安装包之后要管理员权限的时候是正常给了的, 也正常安装到Program Files
文件夹了,怎么会有权限问题。 客服说我手里的资料就这么多,我说你去问问技术吧,我这边的权限肯定没问题。
然后第二天技术给回了邮件,说你们确保是在安装包上面右键,选使用管理员权限运行的,其他没啥要注意的……
没办法了,于是再卸载,清理干净,完全按邮件说的操作,重启尝试。 结果,居然就不崩溃了。 完全没法说理。
看起来,应该是 Win Power 的安装包在调用 windows API 申请管理员权限之前,就有一步需要管理员权限的关键操作。 如果不“右键,选使用管理员权限运行”,这个操作会静默失败,造成后面的一系列问题。 反之,用这个土办法,起码保证运行是正常的。总之问题解决了。
反过来,从这个迹象来看,Win Power应该不是山特自家的东西,不可控的东西还是比较多。
附加2:Winpower 6.3 居然又行了
2024年8月,某天心血来潮找了一个Winpower 6.3的安装包,发现居然又行了,不闪退了。测试关机功能也还好。
奇葩的是,至写文章为止,Winpower 6.3的安装包还没出现在山特网站。这个再次佐证了Winpower的维护方是山特的上游的判断。
Winpower 6.3 在一个名字很长的网站上是可以下载到的,这种没被山特定制过的版本是需要序列号的,随便搜了一个居然能用。
安装序列号并不是下面几行字用英文减号连字符拼起来,请大家支持正版。
511C1
01220
0100
478DF2A
此外还有一个小问题,就是 UPS monitor 服务每次启动都要弹窗要求管理员权限,这恐怕也是某些材料中建议关闭UAC的原因。弹窗不是大问题,但如果是没人管的机器,弹窗得不到相应可能就影响程序启动了。
要按安全的办法,这个权限设置起来就复杂了。如果安全不成问题,比关闭UAC稍微强一点的办法是启用 Administrator 账户(必须设置密码),然后把UPS Monitor服务设置为使用 Administrator 账户运行。