找回密码
 加入我们
搜索
      
查看: 2242|回复: 43

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

[复制链接]
发表于 2024-5-2 16:40 | 显示全部楼层 |阅读模式
手里有台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事件时,就可以触发执行一个关机脚本命令
发表于 2024-5-2 16:46 | 显示全部楼层
ESXI下安装的什么虚拟机?如果是truenas或者群晖可以再虚拟机里设置断电后关闭宿主机,网上有教程。
发表于 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网关或者最近的一级交换机,虽然有误报风险,但及时关机还是没问题的
发表于 2024-5-2 19:14 来自手机 | 显示全部楼层
有usb口的ups可以实现吗
发表于 2024-5-2 19:42 | 显示全部楼层
本帖最后由 monkeylab 于 2024-5-2 19:43 编辑
zhuabafish 发表于 2024-5-2 19:14
有usb口的ups可以实现吗


那办法就很多了,比如esxi装NutClient,虚拟个Debian或者黑群晖做NutServer连USB口。
发表于 2024-5-2 19:50 | 显示全部楼层
单机的ESXI偶尔断电崩溃的风险没那么高。
发表于 2024-5-2 20:16 | 显示全部楼层
monkeylab 发表于 2024-5-2 19:42
那办法就很多了,比如esxi装NutClient,虚拟个Debian或者黑群晖做NutServer连USB口。 ...

好的谢谢
发表于 2024-5-2 20:45 | 显示全部楼层
ESXi 没那么容易崩,停电关机了,下次正常启动就好。
发表于 2024-5-2 20:48 | 显示全部楼层
为了避免UPS续航不足,需要烧脑解决自动关机问题。

我的措施是
bbtte.jpg

让续航足够
 楼主| 发表于 2024-5-2 21:26 | 显示全部楼层
shiangyeh 发表于 2024-5-2 16:51
直接用定期Ping的方案呗,周期性的ping一下能有啥资源消耗,你实在担心,把延迟加长呗 ...

延迟也不能搞得太长了,我这个老UPS才1KVA/600W,两节12V/9Ah的电池也已经进入老化期了,带两台机器估计撑不了多长时间,保守起见最多每隔5分钟一ping
发表于 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服务器误关闭

另外再请教一下,以下这段关机脚本代码,怎样正确排版缩进,才能使他看起来结构层次一目了然便于阅读理解呢?
  1. #!/bin/sh
  2. while
  3. ping -c 1 12.12.12.252 > /dev/null
  4. [ $? -eq 0 ];
  5. do
  6. #echo ' AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
  7. sleep 180
  8. done
  9. echo ' AC Power maybe off, checking again after 3 minutes ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
  10. sleep 180
  11. ping -c 1 12.12.12.252 > /dev/null
  12. if [ $? -eq 0 ]
  13. then
  14. echo ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
  15. else
  16. echo ' AC Power is already off, shut down NAS Now! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
  17. /bin/shutdown.sh
  18. halt
  19. 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能供安全供电的时间,留出关机余量)不恢复就关机,成功不需要日志,有波动才需要;第三,你这里的一旦因为网络波动导致跳出循环开始关机前检测,那么恢复后是不会回到循环的,这样会导致断掉保护失效,建议把判断也放到循环内部,干脆写成函数形式去调用就行了,确保不会因为意外情况丢保护。
        如果方便的话,可以再写一个守护脚本,就负责检测这个脚本是否在运行,不运行就自动拉起,甚至可以多个守护互相拉起,取决于你对意外的接受能力
发表于 2024-5-3 20:21 | 显示全部楼层
红色狂想 发表于 2024-5-3 16:15
ping最近的主交换机的话返回的TTL=255,ping主路由返回的TTL=64,这种情况ping哪个设备效率最高呀?如果 ...



如图
发表于 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 | 显示全部楼层

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

  2. SLEEP_SEC=180

  3. while
  4.     ping -c 1 192.168.0.1 > /dev/null
  5.     [ $? -eq 0 ];
  6. do
  7.     #echo ' AC Power OK ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
  8.     sleep $SLEEP_SEC
  9. done
  10. echo ' AC Power maybe off, checking again after 3 minutes ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
  11. sleep $SLEEP_SEC
  12. ping -c 1 192.168.0.1 > /dev/null
  13. if [ $? -eq 0 ]
  14. then
  15.     echo ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
  16. else
  17.     echo ' AC Power is already off, shut down Server Now ! ' >> /vmfs/volumes/VMdataStore/ups/ups.log;date >> /vmfs/volumes/VMdataStore/ups/ups.log
  18.     /bin/shutdown.sh
  19.     halt
  20. 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是用来配置时区的
发表于 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年就得一更新,这长久下来也是一笔不小的开支
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-5-18 12:35 , Processed in 0.015670 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表