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
- 远程监控:勾选,勾选后其他NUT客户端可以通过网络访问TrueNAS,以获取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>控制面板
>硬件和电源
>不断电系统
,如下图所示进行设置:
正常的话,点击设备信息
可以看到具体的UPS信息,如下图所示:
关闭群晖安全模式
由于群晖系统连接UPS,默认市电断电后进入“安全模式”,此时会卸载所有存储空间并待机,不会自动关机,将等到UPS电池耗尽后强制断电,理论上来说对数据是没有影响的,具体可以看谈谈在UPS支持下,群晖NAS的安全模式这篇文章;
但我这是安装的虚拟机,和物理机还是有区别的,不清楚会不会有什么隐患,保险起见直接改为完全关机好了
- 打开群晖webUI>
控制面板
>终端机和SNMP
>启用SSH功能
- 使用SSH客户端登陆群晖
- 使用
sudo -i
切换到root
用户 -
修改UPS配置文件,输入以下命令:
vi /usr/syno/bin/synoups
- DSM6.x的系统查找
/usr/syno/sbin/synopoweroff -fr
,DSM7.1、DSM7.2的系统查找/usr/syno/sbin/synopoweroff -s &
- 按
i
进入编辑状态,使用#
注释掉此行 - 回车添加一行内容
poweroff
,注意对齐 - 按
ESC
退出编辑状态,输入:wq!
回车,强制保存并退出
注意此更改会随着系统更新被覆盖掉,更新后记得再改一次。
ESXI配置UPS
首先确认下ESXI的版本,目前ESXI 8.0版本下webUI下看不到插件,不过可以使用命令行操作,而5.0~7.0版本是正常的;
还需要注意该解决方案未得到 VMware 官方支持,所以需要降低ESXI的安全管理策略到社区支持等级才能安装,介意者慎用。
仅适用于独立ESXI。它不适合 vCenter 控制下的高可用性集群管理程序群。
下载插件(二进制版本),有以下三个位置,看自己方便即可:
- Network UPS Tools:下载VIB包,会自动重定向最新版本。
- 原作者博客:注意博客使用法语,看不懂直接往下翻到3个蓝色大按钮处,第一个就是。
- GitHub项目地址:下载X86_64版即可。
安装插件
- 打开ESXI的SSH服务:
主机
>操作
>服务
>启用Secure Shell
-
使用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
-
设置软件安装安全策略
esxcli software acceptanceset--level CommunitySupported
-
运行安装脚本
./upsmon-install.sh
-
安装成功应该会提示如下信息
Installation Result Message: Operation finished successfully. Reboot Required: false VIBs Installed: Margar_bootbank_upsmon_2.8.0-2.4.1 VIBs Removed: VIBs Skipped:
- 重启生效
reboot
配置插件
打开ESXI主机
>管理
>系统
>高级管理
,右侧搜索框输入nut
进行搜索:
下面是大致翻译:
标题 | 说明 |
---|---|
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监控用户名即可
验证是否连接成功
使用以下命令测试,IP根据自己的地址进行修改,如果连接成功,则会输出和TrueNAS验证时相同的信息
/opt/nut/bin/upsc ups@192.168.1.2
配置开机启动顺序
由于我这边的群晖本身有很多存储是挂在TrueNAS上的,那么为了避免群晖上的服务启动的时候因为TrueNAS启动慢导致无法访问对应目录,造成服务崩溃的情况,我就需要保证群晖启动时,TrueNAS所有服务都全部正常工作,这就要用到ESXI的自动启动管理了:
- 打开ESXI
主机
>管理
>系统
>自动启动
>编辑设置
- 已启用:是
- 启动延迟:120秒
- 停止延迟:120秒
- 停止操作:关机
- 等待检测信号:否
- 选中TrueNAS虚拟机,点击
配置
:- 启动延迟:360秒
- 停止延迟:30秒
- 停止操作:关机
- 等待检测信号:系统默认值
- 选中群晖虚拟机,点击
配置
:- 启动延迟:180秒
- 停止延迟:15秒
- 停止操作:关机
- 等待检测信号:系统默认值
- 再通过
更早启动
和更晚启动
来控制TrueNAS自动启动顺序为1,群晖为2。
这样一来,启动顺序将如下所示:
- ESXI来电自启后,等待120秒后启动TrueNAS
- TrueNAS启动,等待360秒后启动群晖
- 群晖启动,等待180秒后启动其它已配置自动启动的虚拟机
关机顺序则是通过各自的UPS设置管理的,只要设定其关机倒计时群晖
<TrueNAS
<ESXI
即可;
版权属于:本文为原创文章,版权归 AUK CL 所有。
文章地址: https://aukcl.win/archives/605/
所有原创文章由知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
您可以自由转载或修改,但禁止一切形式的商业使用,同时,务必请注明原文地址及作者信息。
2 comments
没太看明白,如果UPS直通给truenas,那在黑群晖和EXSI里应该就看不到了吧。
这个是通过NUT方案进行的局域网UPS通信,UPS直通给TrueNAS后,对于其他主机来说确实是不存在的设备,但网络都在同一个局域网内,所以可以访问UPS信息;
简单来说,就是TrueNAS充当服务器,将UPS的状态信息通过局域网告诉其他客户端主机,比如我这里的群晖和ESXI