红色狂想 发表于 2024-5-2 16:40

ESXi 服务器如何使用普通后备式 UPS 实现停电自动关机?

手里有台HP DL360 Gen9服务器,安装部署的HPE-ESXi-6.7.0-Update3-19195723-iso-Gen9plus-670.U3.10.9.0.8 (Hewlett Packard Enterprise)系统,之前配的APC企业级在线式UPS坏掉了,目前暂时用的以前的老山特TG1000普通后备式UPS顶替着,但是这款UPS不带USB端口通讯控制功能,无法轻松实现停电自动关机功能。所以在此想请教一下,有没有什么方法可以让使用普通后备式UPS的ESXi服务器也实现停电自动关机呢?

网上搜到以下几篇文章,看来可以通过脚本命令实现这个功能

ESXI如何使用普通的UPS做到断电自动关机,保护硬盘不受到损伤
LINUX、ESXI如何使用普通的UPS做到断电自动关机,保护硬盘不受到损伤
【软路由】esxi 通过ping实现停电自动关机
ESXi crontab(基于网络接口监控的UPS供电自动关机方案/nic-monitor.sh)

那么以上文中所介绍的方法,哪种更可靠稳定,利用while死循环不停地ping网关会占用消耗系统CPU资源吗?我在想是否基于网络接口监控的自动关机方案更科学一点,就像Windows环境下的任务计划程序那样,当某个网卡端口发生down事件时,就可以触发执行一个关机脚本命令
[生病]

v62pmonr 发表于 2024-5-2 16:46

ESXI下安装的什么虚拟机?如果是truenas或者群晖可以再虚拟机里设置断电后关闭宿主机,网上有教程。

shiangyeh 发表于 2024-5-2 16:51

直接用定期Ping的方案呗,周期性的ping一下能有啥资源消耗,你实在担心,把延迟加长呗

红色狂想 发表于 2024-5-2 17:48

v62pmonr 发表于 2024-5-2 16:46
ESXI下安装的什么虚拟机?如果是truenas或者群晖可以再虚拟机里设置断电后关闭宿主机,网上有教程。 ...

ESXi下安装的CentOS和Windows虚拟机。问题是我的UPS是最普通的那种呀,不支持USB通讯功能,就算你装个Synology虚拟机,它的NAS-UPS自动关机服务上哪儿去检测停电信号啊?
[睡觉]

闲痴 发表于 2024-5-2 17:50

ping网关或者最近的一级交换机,虽然有误报风险,但及时关机还是没问题的

zhuabafish 发表于 2024-5-2 19:14

有usb口的ups可以实现吗

monkeylab 发表于 2024-5-2 19:42

本帖最后由 monkeylab 于 2024-5-2 19:43 编辑

zhuabafish 发表于 2024-5-2 19:14
有usb口的ups可以实现吗

那办法就很多了,比如esxi装NutClient,虚拟个Debian或者黑群晖做NutServer连USB口。

c2h6o 发表于 2024-5-2 19:50

单机的ESXI偶尔断电崩溃的风险没那么高。

zhuabafish 发表于 2024-5-2 20:16

monkeylab 发表于 2024-5-2 19:42
那办法就很多了,比如esxi装NutClient,虚拟个Debian或者黑群晖做NutServer连USB口。 ...

好的谢谢

Mufasa 发表于 2024-5-2 20:45

ESXi 没那么容易崩,停电关机了,下次正常启动就好。

Mufasa 发表于 2024-5-2 20:48

为了避免UPS续航不足,需要烧脑解决自动关机问题。

我的措施是


让续航足够

红色狂想 发表于 2024-5-2 21:26

shiangyeh 发表于 2024-5-2 16:51
直接用定期Ping的方案呗,周期性的ping一下能有啥资源消耗,你实在担心,把延迟加长呗 ...

延迟也不能搞得太长了,我这个老UPS才1KVA/600W,两节12V/9Ah的电池也已经进入老化期了,带两台机器估计撑不了多长时间,保守起见最多每隔5分钟一ping

kevinho86 发表于 2024-5-2 21:29

红色狂想 发表于 2024-5-2 21:26
延迟也不能搞得太长了,我这个老UPS才1KVA/600W,两节12V/9Ah的电池也已经进入老化期了,带两台机器估计 ...

两节12V/9Ah的电池也已经进入老化期了,可以安排更换了

红色狂想 发表于 2024-5-3 13:48

kevinho86 发表于 2024-5-2 21:29
两节12V/9Ah的电池也已经进入老化期了,可以安排更换了

我2018年9月份换的12V7.2AH蓄电池UPS电池松下电瓶 LC-RA127R2T1 12V7AH Panasonic,松下的真耐用,再换就只能用CSB GP1272F2 12V7.2AH代替了
[傻笑]

红色狂想 发表于 2024-5-3 16:15

闲痴 发表于 2024-5-2 17:50
ping网关或者最近的一级交换机,虽然有误报风险,但及时关机还是没问题的

ping最近的主交换机的话返回的TTL=255,ping主路由返回的TTL=64,这种情况ping哪个设备效率最高呀?如果是ping主路由的话,有时候在未停电时也需要重启或关闭一下主路由,这样就会导致ESXi服务器误关闭

另外再请教一下,以下这段关机脚本代码,怎样正确排版缩进,才能使他看起来结构层次一目了然便于阅读理解呢?
#!/bin/sh
while
ping -c 1 12.12.12.252 > /dev/null
[ $? -eq 0 ];
do
#echo ' AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
sleep 180
done
echo ' AC Power maybe off, checking again after 3 minutes ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
sleep 180
ping -c 1 12.12.12.252 > /dev/null
if [ $? -eq 0 ]
then
echo ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
else
echo ' AC Power is already off, shut down NAS Now! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
/bin/shutdown.sh
halt
fi

闲痴 发表于 2024-5-3 19:56

本帖最后由 闲痴 于 2024-5-3 20:00 编辑

红色狂想 发表于 2024-5-3 16:15
ping最近的主交换机的话返回的TTL=255,ping主路由返回的TTL=64,这种情况ping哪个设备效率最高呀?如果 ...

        换我个人习惯,应该是参照python排版,把小功能上下加空行,嵌套的部分全部缩进,ping的部分写成函数同时ping多个地址,然后给返回。想要易读就多写注释,格式每个人都有不同习惯
        另外现在比较少写bash了,我没理解错的话,你这是三分钟检查一次吧,每次ping一个包,有问题就间隔三分钟在ping一个包。感觉这里有点问题,第一,只ping一个包更容易受网络波动影响,建议每次发四个只要有通过的就正常;第二,三分钟间隔太长了,如果一轮检查刚结束就出问题,那意味着要六分钟后才能反应过来,ping基本可以认为没有消耗,你就10秒ping一次都没问题,发现有问题就连续ping一分钟(或你认为ups能供安全供电的时间,留出关机余量)不恢复就关机,成功不需要日志,有波动才需要;第三,你这里的一旦因为网络波动导致跳出循环开始关机前检测,那么恢复后是不会回到循环的,这样会导致断掉保护失效,建议把判断也放到循环内部,干脆写成函数形式去调用就行了,确保不会因为意外情况丢保护。
        如果方便的话,可以再写一个守护脚本,就负责检测这个脚本是否在运行,不运行就自动拉起,甚至可以多个守护互相拉起,取决于你对意外的接受能力

shiangyeh 发表于 2024-5-3 20:21

红色狂想 发表于 2024-5-3 16:15
ping最近的主交换机的话返回的TTL=255,ping主路由返回的TTL=64,这种情况ping哪个设备效率最高呀?如果 ...

https://s2.loli.net/2024/05/03/KGMvsZ2HUebdWm7.png

如图

无聊的五月 发表于 2024-5-3 20:25

所有的无直接通讯的关机,基本都是PING网关+或交换机 实现
1,ESXI中WINDOWS虚拟机设置BAT脚本PING,然后通过PINK +SSH命令关机
2,ESXI中内置脚本设置守护进程

以前用的第1中,后来用第2种
我单位是PING 网关 核心交换机 AP ,3个设备,同时不通才会关机

深圳老胡 发表于 2024-5-3 20:25

红色狂想 发表于 2024-5-2 21:26
延迟也不能搞得太长了,我这个老UPS才1KVA/600W,两节12V/9Ah的电池也已经进入老化期了,带两台机器估计 ...

就算一秒一个ping,负载对Gen9来说连一根牛毛都算不上吧?

红色狂想 发表于 2024-5-3 21:18

深圳老胡 发表于 2024-5-3 20:25
就算一秒一个ping,负载对Gen9来说连一根牛毛都算不上吧?

我不是担心ping会消耗CPU资源,而是那个while…do…done循环体不停的运行会不会消耗资源[生病]

闲痴 发表于 2024-5-3 21:34

红色狂想 发表于 2024-5-3 21:18
我不是担心ping会消耗CPU资源,而是那个while…do…done循环体不停的运行会不会消耗资源 ...

合理配置sleep就没问题,ping本身也是等待io为主

红色狂想 发表于 2024-5-3 22:19

闲痴 发表于 2024-5-3 19:56
换我个人习惯,应该是参照python排版,把小功能上下加空行,嵌套的部分全部缩进,ping的部分写成函数同 ...

这个停电自动关机脚本示例我是参考的这篇文章,LINUX、ESXI如何使用普通的UPS做到断电自动关机,他有守护脚本和添加任务计划,虽然可以实现功能,但总感觉代码写得特别难看。。。
然后又看了另一个示例,esxi 通过ping实现停电自动关机,可以同时ping两个IP,不知他这个脚本有没有bug,还有就是文章的最后说修改时间那一步看不懂是什么意思,别的示例中并没有这一步操作啊
[困惑]

红色狂想 发表于 2024-5-3 22:30

shiangyeh 发表于 2024-5-3 20:21
如图

感谢提供样式,下午我排版好了,我在想以下两个示例用哪个好
LINUX、ESXI如何使用普通的UPS做到断电自动关机
esxi 通过ping实现停电自动关机
#!/bin/sh

SLEEP_SEC=180

while
    ping -c 1 192.168.0.1 > /dev/null
    [ $? -eq 0 ];
do
    #echo ' AC Power OK ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
    sleep $SLEEP_SEC
done
echo ' AC Power maybe off, checking again after 3 minutes ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
sleep $SLEEP_SEC
ping -c 1 192.168.0.1 > /dev/null
if [ $? -eq 0 ]
then
    echo ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
else
    echo ' AC Power is already off, shut down Server Now ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
    /bin/shutdown.sh
    halt
fi

炼金术士 发表于 2024-5-3 22:43

我觉得不要把简单的事情复杂化,别人推荐的做法,肯定也是经过他的验证
而且既然是临时用用的,就果断接受临时方案的小问题

闲痴 发表于 2024-5-3 22:45

本帖最后由 闲痴 于 2024-5-3 22:47 编辑

红色狂想 发表于 2024-5-3 22:19
这个停电自动关机脚本示例我是参考的这篇文章,LINUX、ESXI如何使用普通的UPS做到断电自动关机,他有守护 ...

先用伪代码或者流程图搞清楚功能逻辑,然后直接学bash/python去实现,讲道理反正玩服务器迟早得学的,基本的运维都没法搞后面会很难的,中文搜索的材料也是你抄我我抄你,有问题的太多了,多看官方文档,类unix系统虽然组件各有不同,但原则都是一致的
光你发的这个,用corn了还用守护进程就是多此一举,双守护互相拉起完事,或者corn直接执行ping检测写入缓存文件这样可以不需要后台

localtime是用来配置时区的

tide~ 发表于 2024-5-3 22:46

本帖最后由 tide~ 于 2024-5-3 22:49 编辑

市电回路接到一个继电器线圈上,断电后触点会出现ON/OFF状态变化(实现一个强电到弱电/无源触点的转换),买个4-8路开关量输入模块USB接口(30元起),装上驱动,电脑这边不就能读到4-8路的0/1状态了嘛,然后触发直接关机、延时关机指令(也可以再用个延时继电器当计时器)就行了;
这在工控行业太司空见惯了

红色狂想 发表于 2024-5-3 22:52

无聊的五月 发表于 2024-5-3 20:25
所有的无直接通讯的关机,基本都是PING网关+或交换机 实现
1,ESXI中WINDOWS虚拟机设置BAT脚本PING,然后通 ...

还有一个问题,这种基于PING网关+交换机的停电自动关机脚本,一旦设置了守护进程和添加任务计划,开机就会自动运行,如果哪天需要关闭这个功能时,就必须先保持网络让它能PING得通,否则一开机进系统它就以为停电了又自动关机了,所以是不是可以创建个.ini配置文件,内容如果是1就是开启此功能,0就是禁用,脚本一运行先读取这个文件的值进行判断
另外,麻烦你再看一下我22#楼的回帖……[困惑]

红色狂想 发表于 2024-5-4 16:02

c2h6o 发表于 2024-5-2 19:50
单机的ESXI偶尔断电崩溃的风险没那么高。

是不高,按理说不管它也没事儿,但我这儿平均每个月就要停一次电,这长久下来总让人感觉不放心,主要是既然手里有UPS,何不搞个临时方案将就着应对一下呢

红色狂想 发表于 2024-5-4 16:09

Mufasa 发表于 2024-5-2 20:45
ESXi 没那么容易崩,停电关机了,下次正常启动就好。

主要是我这儿平均每个月就要停一次电,ESXi里面有磁盘阵列,这样经常掉电,长久下来总让人感觉不放心

红色狂想 发表于 2024-5-4 16:29

Mufasa 发表于 2024-5-2 20:48
为了避免UPS续航不足,需要烧脑解决自动关机问题。

我的措施是


我之前也是这样想的,与其停电自动关机,不如直接撑到来电,所以买了APC在线式UPS,可谁曾想每次买东西手气都很背,用了不到两年就坏了。。。不过要想续航充足,就得配一堆电池组,这东西是耗材,3年就得一更新,这长久下来也是一笔不小的开支
[睡觉]
页: [1] 2
查看完整版本: ESXi 服务器如何使用普通后备式 UPS 实现停电自动关机?