Head Pic:深界


最近用ESXI搭了个黑群晖,顺便也把FreeNAS迁移过来了,正好升到TrueNAS,然后问题就来了,TrueNAS和群晖,再加上作为宿主机的ESXI,就一共有3个设备需要UPS,但UPS只有一个,这下现成方案要么买多个UPS,要么使用带智能通信卡的UPS。

思路

首先多个UPS的方案PASS,这太傻了,而且多台设备管理和存放也是个问题。

那么带智能通信卡的UPS呢?一看基本都是企业级的,价格昂贵,二手的设备又太老了,还得换电池,算下来和新的也差距不大了。

后面研究了一下,TrueNAS和群晖之间共享UPS不是什么问题,但ESXI就比较麻烦了,他官方支持的都是企业级UPS,像APC-BK 650这样的家庭UPS就没管了,后来我在 Network UPS Tools这个网站上发现还是有个人开发这方面插件的,这样一下子就通了,那就开搞

TrueNAS配置UPS

首先是把UPS正常连接上宿主机,准备直通:
进入ESXI的webUI>虚拟机>TrueNAS>编辑>添加其他设备>USB设备>APC Back-UPS 650>保存即可。
另外,我这里用的是TrueNAS Scale(基于Debian),webUI相比FreeNAS变化较大,如果你是使用的FreeNAS或TrueNAS Core(基于 FreeBSD),后续配置UPS可参考我的另一篇博文:UPS不间断电源初体验-APC BK650-CH

TrueNAS Scale配置过程

添加用户

用来给群晖共享UPS数据:
TrueNAS开机后进入webUI>证书>本地用户>添加
全名:monuser
用户名:monuser
密码:secret
确认密码:secret
其它默认即可,注意这个账户是群晖默认写死的NUT账户,虽然可以改,但很麻烦,更新系统还会覆盖掉修改,所以直接用就好了

配置UPS

webUI>系统设置>服务>UPS,点击右边的配置按钮:

  • 标识符:随意,默认即可
  • UPS 模式:选择Master,主模式
  • 驱动:根据自己的UPS型号选择,APC BK650选择APC ups 2 Back-UPS USB USB即可,旁边的小括号内显示的是驱动的具体名字,只要这个对的上,前面的都无所谓,usbhid-ups这个驱动支持APC绝大多数产品
  • 端口或主机名:选择/dev/uhid
  • 监控用户:默认即可,此账户涉及内部权限,不要动
  • 监控密码:可以改,默认fixmepass
  • 附加用户:填写刚刚添加的群晖用户monuser
  • 远程监控:勾选,勾选后其他UPS客户端可以通过网络连接UPS
  • 关机模式:
    • UPS goes on battery:停电以后立刻按照设置关机
    • UPS reaches low battery:停电后触发低电量事件时按照设置关机
  • 关机倒计时:UPS在启动关机之前等待的秒数,根据自己需要就行设定
  • 关机命令:/sbin/shutdown -P now
  • 关闭UPS电源:NAS关机后关闭UPS

设置完成后保存并启动服务且勾选开机自启。

验证UPS连接是否成功

使用SSH客户端(如Termius)或者webUI>系统设置>命令行,输入命令:

upsc ups@localhost

正常的话会得到类似下列输出,可以看到详细UPS状态:

Init SSL without certificate database
battery.charge: 100
battery.charge.low: 40
battery.charge.warning: 50
battery.date: not set
battery.mfr.date: 2020/06/13
battery.runtime: 2077
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 13.7
battery.voltage.nominal: 12.0
device.mfr: APC
device.model: Back-UPS 650
device.serial: XXXXXXXXXX  
device.type: ups
driver.flag.ignorelb: enabled
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/uhid
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: APC HID 0.96
driver.version.internal: 0.41
input.sensitivity: low
input.transfer.high: 266
input.transfer.low: 165
input.voltage: 240.0
input.voltage.nominal: 220
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 822.A3.I
ups.firmware.aux: A3
ups.load: 47
ups.mfr: APC
ups.mfr.date: 2020/06/13
ups.model: Back-UPS 650
ups.productid: 0002
ups.serial: XXXXXXXXXX  
ups.status: OL
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 049c

群晖配置UPS

打开群晖webUI>控制面板>硬件和电源>不断电系统,如下图所示进行设置:
01.png

正常的话,点击设备信息可以看到具体的UPS信息,如下图所示:
02.png

关闭群晖安全模式

由于群晖系统连接UPS,默认市电断电后进入“安全模式”,此时会卸载所有存储空间并待机,不会自动关机,将等到UPS电池耗尽后强制断电,理论上来说对数据是没有影响的,具体可以看谈谈在UPS支持下,群晖NAS的安全模式这篇文章;

但我这是安装的虚拟机,和物理机还是有区别的,不清楚会不会有什么隐患,保险起见直接改为完全关机好了

  1. 打开群晖webUI>控制面板>终端机和SNMP>启用SSH功能
  2. 使用SSH客户端登陆群晖
  3. 使用sudo -i切换到root用户
  4. 修改UPS配置文件,输入以下命令:

    vi /usr/syno/bin/synoups
  5. DSM6.x的系统查找/usr/syno/sbin/synopoweroff -fr,DSM7.1、DSM7.2的系统查找/usr/syno/sbin/synopoweroff -s &
  6. i进入编辑状态,使用#注释掉此行
  7. 回车添加一行内容poweroff,注意对齐
  8. ESC退出编辑状态,输入:wq!回车,强制保存并退出

注意此更改会随着系统更新被覆盖掉,更新后记得再改一次。

ESXI配置UPS

首先确认下ESXI的版本,目前ESXI 8.0版本下webUI下看不到插件,不过可以使用命令行操作,而5.0~7.0版本是正常的;

还需要注意该解决方案未得到 VMware 官方支持,所以需要降低ESXI的安全管理策略到社区支持等级才能安装,介意者慎用。

仅适用于独立ESXI。它不适合 vCenter 控制下的高可用性集群管理程序群。

下载插件(二进制版本),有以下三个位置,看自己方便即可:

安装插件

  1. 打开ESXI的SSH服务:主机>操作>服务>启用Secure Shell
  2. 使用SSH客户端登陆root账户,将下载的二进制插件包上传到tmp目录并解压,注意将/Download/NutClient-ESXi-2.8.0-2.4.1.x86_64.tar.gz替换为自己的地址和插件包名

    scp /Download/NutClient-ESXi-2.8.0-2.4.1.x86_64.tar.gz /tmp && cd /tmp && tar xvf NutClient-ESXi-2.8.0-2.4.1.x86_64.tar.gz
  3. 设置软件安装安全策略

    esxcli software acceptanceset--level CommunitySupported
  4. 运行安装脚本

    ./upsmon-install.sh
  5. 安装成功应该会提示如下信息

    Installation Result
    Message: Operation finished successfully.
    Reboot Required: false
    VIBs Installed: Margar_bootbank_upsmon_2.8.0-2.4.1
    VIBs Removed:
    VIBs Skipped:
  6. 重启生效
    reboot

配置插件

打开ESXI主机>管理>系统>高级管理,右侧搜索框输入nut进行搜索:
03-1.png
下面是大致翻译:

标题 说明
UserVars.NutFinalDelay NUT 在低电量事件后关机之前等待的秒数
UserVars.NutMailTo NUT 发送邮件通知至此地址
UserVars.NutMinSupplies NUT 需要维持系统运行所需的电源供应数量
UserVars.NutOnBatteryDelay NUT 在切换到电池供电后,关机之前运行的秒数(0=等待低电量事件)
UserVars.NutPassword NUT 连接到远程 UPS 的密码
UserVars.NutSendMail NUT 发送邮件通知(1=是,0=否)
UserVars.NutUpsName NUT 远程 UPS 名称(例如:upsname@nutserver),对于多个UPS,使用空格作为分隔符
UserVars.NutUser NUT 连接到远程 UPS 的用户名

主要设置下面几个即可正常工作:

  • UserVars.NutOnBatteryDelay:作为宿主机,需要考虑所有的虚拟机关机所需时间之和,在这个基础上留一点冗余即可,当然,不能超过UPS电池供电续航时间
  • UserVars.NutPassword:填写TrueNAS监控密码即可
  • UserVars.NutUpsName:填写ups@TrueNAS IP即可,比如ups@192.168.1.2
  • UserVars.NutUser:填写TrueNAS监控用户名即可

配置开机启动顺序

由于我这边的群晖本身有很多存储是挂在TrueNAS上的,那么为了避免群晖上的服务启动的时候因为TrueNAS启动慢导致无法访问对应目录,造成服务崩溃的情况,我就需要保证群晖启动时,TrueNAS所有服务都全部正常工作,这就要用到ESXI的自动启动管理了:

  1. 打开ESXI主机>管理>系统>自动启动>编辑设置
    • 已启用:是
    • 启动延迟:120秒
    • 停止延迟:120秒
    • 停止操作:关机
    • 等待检测信号:否
  2. 选中TrueNAS虚拟机,点击配置
    • 启动延迟:360秒
    • 停止延迟:30秒
    • 停止操作:关机
    • 等待检测信号:系统默认值
  3. 选中群晖虚拟机,点击配置
    • 启动延迟:180秒
    • 停止延迟:15秒
    • 停止操作:关机
    • 等待检测信号:系统默认值
  4. 再通过更早启动更晚启动来控制TrueNAS自动启动顺序为1,群晖为2。

这样一来,启动顺序将如下所示:

  1. ESXI来电自启后,等待120秒后启动TrueNAS
  2. TrueNAS启动,等待360秒后启动群晖
  3. 群晖启动,等待180秒后启动其它已配置自动启动的虚拟机

关机顺序则是通过各自的UPS设置管理的,只要设定其关机倒计时群晖<TrueNAS<ESXI即可;


版权属于:本文为原创文章,版权归 AUK CL 所有。
文章地址: https://aukcl.win/archives/605/
所有原创文章由知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
您可以自由转载或修改,但禁止一切形式的商业使用,同时,务必请注明原文地址及作者信息。

Last modification:October 10, 2023
如果觉得我的文章对你有用,请随意赞赏