APC BK650M2-CH UPS 通过Nut实现断电关闭 VMware ESXi 系统并发送邮件通知

2021-02-26 / 无评论

最近脑壳发热想给博主的gen8加一个UPS保护硬盘,虽然没有群晖,但gen8里是塞了4个4T硬盘组raid1+0,这4个硬盘有3个是在淘宝上买的翻新日立硬盘(便宜啊),外加一个之前买的希捷4TB绿盘,这搭配感觉就不太稳,容不得半点闪失...网上溜了一圈,感觉APC的BK650M2-CH比较火,作为BK650的后续版本,做工、功能各方面还比较不错,原生支持群晖自动开关机(柠檬了),然后咨询了下APC官方客服,“这个支持ESXi自动关机么?”,“亲,不支持的”,“兼容Apcupsd么?”,“兼容性不好”....再见..

Apcupsd是APC官方出的电源管理程序,这货能兼容BK650,但是不兼容BK650M2-CH,会导致监控状态出错以致意外关机,网上查阅很多资料后,发现Network UPS Tools能实现这一功能,但是坑也比较多,老规矩,记录一下

简单说下实现原理,Nut并没有提供ESXi的服务端插件,只提供了客户端,换句话说,在ESXi上,只能通过监控其他主机(包括虚拟机)电源事件来触发自身的关机操作(还不能开机),而在Linux端和Windows端,都具有nutserver功能,在ESXi中的虚拟机中便可以部署。网上大多的教程是通过监控群晖的电源状态来通知ESXiu关机的,并没有独立触发ESXi关机的教程,下面是以Windows Server 2019系统为例来配置nutserver。

将UPS附带的通信线,一头是RJ45接口,接在UPS的通讯口上,另一端USB接入gen8,打开ESXi管理页面,找到需要安装NUT的虚拟机,先关闭虚拟机,在编辑中,添加UPS设备:

edit.jpg

启动虚拟机后,就能下设备管理器中发现该设备了,接下来安装Nut的Windows客户端,建议不要在官网下载,会提示缺少dll文件,当然你也可以自己补全它们。

这里可以下在修复后的客户端:NUT-Installer-2.6.5-6_fixed_dll

解压后安装即可!

在安装路径中找到etc目录,我这儿是C:\Program Files (x86)\NUT\etc

删除这几个文件的.sample后缀名

etc.jpg

然后逐一编辑他们,首先是nut.conf文件

在最底部新建一行,指定未服务端模式

MODE=netserver

nut.jpg

然后配置ups.conf,最后一行加入,其中,中括号里的“BK650M2”为当前设备的名称,可以自定义修改为其他的,后面执行状态查询、设置的时候会用到该名称

[BK650M2]
   driver = usbhid-ups
   port = auto

ups.jpg

接着配置upsd.conf,在最底部加入以下内容,监听本地UPS信息端口,地址为本虚拟机IP地址,3493是默认端口,去掉也可以,此外在Windows防火墙中将此端口设为允许,或者直接暴力一点关闭防火墙

LISTEN 127.0.0.1 3493
LISTEN 192.168.12.222 3493

再来编辑upsd.users文件,添加管理用户,同样添加在最底部,admin用于nut配置管理,guest用于其他主机(如ESXi
)监控的账号

[admin]
    password = 你的密码
    actions = SET
    instcmds = ALL
    
[guest]
    password = 访客密码
    upsmon slave

users.jpg

最后编辑upsmon.conf文件,用于监听本机电源状态来执行对应的脚本,这里一定不要用admin账号,会有错误

找到MONITOR,在下面添加

MONITOR BK650M2@127.0.0.1 1 guest 访客密码 slave

monitor.jpg

到这里,conf的一系列配置就基本完成,接下来将配置ups的参数

在NUT的bin目录执行upscmd命令,关闭低电量蜂鸣器报警(晚上睡觉突然响了很恼火~!),修改过程中会提示输入账户密码,用之前设置的admin账户密码即可

upscmd bk650m2 beeper.disable

beeper.jpg

修改低电量阈值,默认是10%,但是如果接入的设备功率较高的话,是坚持不了几分钟就会断电的,如果这段时间内服务器关机任务还没执行完毕,也会损伤机器,建议设为20%以上

upsrw -u 管理员账号 -p 管理员密码 -s battery.charge.low=20 bk650m2

low.jpg

查看一下ups状态,确定是否修改成功

upsc bk650m2

status.jpg

低电量阈值、关闭蜂鸣器均修改成功!

此功能将实现在市电停电启用UPS供电的时候发送停电通知邮件,在低电量(<20%)时发送关机通知邮件并关闭当前虚拟机

邮件功能将使用到sendEmail软件,通过命令行的形式发送

下载sendEmail,解压到根目录(最好不要有空格)

sendEmail.jpg

新建2个bat文件,一个作为停电时发送邮件,一个作为关机时发送邮件并关闭Windows服务器

bat.jpg

分别编辑以下内容(首先要开启发件邮箱的smtp服务,这里就不再描述了,以下内容根据自身的邮箱修改):

断电发送邮件:

D:\\sendEmail\\sendEmail.exe -o -f 你的发件邮箱@126.com -t 你的收件邮箱@qq.com -s smtp.126.com -xu 你的发件邮箱@126.com -xp 发件邮箱密码 -u "注意!家里停电了!!!" -m "UPS供电中!!!"

电量低时关闭Windows并发送邮件(延迟20秒关闭):

C:\\WINDOWS\\system32\\shutdown.exe -s -t 20 && D:\\sendEmail\\sendEmail.exe -o -f 你的发件邮箱@126.com -t 你的收件邮箱@qq.com -s smtp.126.com -xu 你的发件邮箱@126.com -xp 发件邮箱密码 -u "UPS电量低!!!" -m "正在关闭服务器!!!"

编辑完后可以运行一下是否能够成功发送邮件

回到etc目录,编辑upsmon.conf文件,找到POWERDOWNFLAG,用#注释掉

powerdown.jpg

找到#NOTIFYFLAG ONBATT SYSLOG+WALL这一行,删除#,并在在后面加上+EXEC,目的是在UPS电池供电时,执行NOTIFYCMD命令

exec.jpg

找到# NOTIFYCMD /usr/local/ups/bin/notifyme这一行,在下面新建一行,调用刚才新建的sendMsgOB.bat文件

notifycmd.jpg

找到# SHUTDOWNCMD "C:\PROGRA~1\SOMECO~1.bat -first_arg -second_arg"这一行,在下面新建一行,调用sendMsgLBAndShutdown.bat文件

shutdowncmd.jpg

最后,在cmd中,重启Nut服务即可生效

sc stop "Network UPS Tools"
sc start "Network UPS Tools"

至此,Nut服务端搭建完毕,正常情况断电后会发送邮件,低电量会关闭虚拟机并发送邮件

上面的步骤还不能自动关闭ESXi,需要在ESXi中进行配置,Network UPS Tools提供了ESXi系统的客户端软件包

博主用的是VMware ESXi 6.7.0 U3 HP专用版,其他版也能适用

开启ESXi的ssh功能

ssh.jpg

修改ESXi软件安装策略为“社区”,不然安装不上软件包

safe.jpg

下载NutClient-ESXi软件包,下载地址:NutClient-ESXi.tar.gz

使用xshell登录ESXi,将软件包上传到/tmp目录

执行以下命令安装:

cd /tmp
tar -xzvf NutClient-ESXi-2.1.1.i386.tar.gz
sh upsmon-install.sh

Nut客户端安装成功后,回到ESXi Web管理界面,找到“系统”->“高级设置”,在右侧搜索栏中搜索“NUT”过滤,编辑红框条目

esxinut.jpg

UserVars.NutFinalDelay为延迟关闭ESXi的秒数,即低电量时,延迟关机秒数
UserVars.NutUpsName为监听的UPS名称+服务器地址,以上面的ups为例,bk650m2@192.168.12.222
UserVars.NutUser为服务端设置的监听账号,可以为上面设置的admin或guest
UserVars.NutPassword密码为账户对应的密码

其他两个为邮件通知设置,貌似没用,所以用了sendEmail来替换发邮件

切到“服务”选项卡,找到NutClient,右键,策略,选择“随主机启动停止”,然后再重启该服务,以后每次修改配置后,都要重启以下服务才会生效

nut2.jpg

这样,当UPS电量低于20%时,ESXi将会在你设置的延迟关机时间后关闭。当然,这样并不能安全的关闭其他的虚拟主机(刚才的Windows主机除外,因为已经执行了bat中的关机命令),其他虚拟机需要安装Vmware tools才能让ESXi去正常的关闭他们,博主没有这样的需求,因为磁盘阵列是挂载在Windows服务器中的,它能够正常关闭就行。

ESXi本身是支持UPS控制关机和开机的,但是由于Money的关系,只用得起家用级UPS,所以只能以曲线救国的方式解决问题。关于开机,如果UPS电量耗尽的情况下,市电恢复后是可以开机的,但是在UPS电量未耗尽的情况下开机,暂时无能为力。

无回应:“APC BK650M2-CH UPS 通过Nut实现断电关闭 VMware ESXi 系统并发送邮件通知”

发表评论

电子邮件地址不会被公开。 必填项已用*标注