找回密码
 加入我们
搜索
      
查看: 12608|回复: 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-9 13:34 | 显示全部楼层
Satan023 发表于 2024-5-8 18:51
你既然还有管理卡的话,何不再买个sua1000ich啥的?
虽然不是在线式,不过我上次测试市电断了后马上就切 ...

随便再买个APC带网络管理功能的UPS也得个2000多吧,主要是不想再花那个钱折腾了,凑合一下完事儿,当初买AP9631网络管理卡花了480,不知现在还值不值钱,8节12V9Ah的电池也得抽空儿处理掉
 楼主| 发表于 2024-5-9 13:21 | 显示全部楼层
gasment 发表于 2024-5-6 11:45
esxi不太好弄,所以我转pve了,直接宿主机跑nut-server,虚拟机全部上qemu-guest-agent,停电由pve统一关机 ...

不管用什么系统,你跑nut-server不都得有个支持该通讯协议功能的UPS吗,如果是最普通的那种后备式UPS,停电时你能做到统一关机?
发表于 2024-5-8 23:31 | 显示全部楼层
请问下使用过的兄弟,如果APC后备式UPS,主板上设置了来电自启,电力恢复后ESXi主机会启动吗?
发表于 2024-5-8 23:25 | 显示全部楼层
红色狂想 发表于 2024-5-7 16:44
再问一下,你脚本里执行ESXi关机调用的哪个关机命令呀,我看他有以下几种:
/bin/shutdown.sh
halt

这个是直接调用ESXI本身的shutdown.sh
关闭虚拟机后关闭主机
不需要添加别的
我目前用的正常
发表于 2024-5-8 18:51 | 显示全部楼层
红色狂想 发表于 2024-5-6 14:38
我之前就是用的APC SURT2000XLICH+AP9631网络管理卡,没想到二手货不到两年就出故障了,详见这篇帖子:ht ...

你既然还有管理卡的话,何不再买个sua1000ich啥的?
虽然不是在线式,不过我上次测试市电断了后马上就切过去了,当中ESXi一直开着。你另一个帖子回复到切换时间“大概≤10ms”,应该是对的,无感的。
另外PCNS应该是市面上最强大的ESXi关机管理软件了,不用可惜。
发表于 2024-5-8 18:48 | 显示全部楼层
无聊的五月 发表于 2024-5-6 17:03
是这样,不过我这里网络都固化IP的,没什么事,只有在网关交换机AP全部不通的情况下才会关机。 如果你嫌 ...

卧槽 山特这玩意儿竟然还支持esxi?
 楼主| 发表于 2024-5-7 16:44 | 显示全部楼层
无聊的五月 发表于 2024-5-6 22:11
恩 ,停电就直接关机,所以电池也算够用 ,2年换一次新的 ~ ~   服务器其实最好采用几块电池串联供电的, ...

再问一下,你脚本里执行ESXi关机调用的哪个关机命令呀,我看他有以下几种:
/bin/shutdown.sh
halt
poweroff
shutdown -h now
不知哪个是最安全的关机,系统会等待所有虚拟机按顺序关闭后再关机
发表于 2024-5-6 22:11 | 显示全部楼层
红色狂想 发表于 2024-5-6 21:06
我也是固定IP,即使是DHCP的机器也做了静态绑定。你说的山特MT1000是山特(SANTAK) UPS不间断电源应急后 ...

恩 ,停电就直接关机,所以电池也算够用 ,2年换一次新的 ~ ~   服务器其实最好采用几块电池串联供电的,但是没钱没地  
 楼主| 发表于 2024-5-6 21:06 | 显示全部楼层
无聊的五月 发表于 2024-5-6 17:03
是这样,不过我这里网络都固化IP的,没什么事,只有在网关交换机AP全部不通的情况下才会关机。 如果你嫌 ...

我也是固定IP,即使是DHCP的机器也做了静态绑定。你说的山特MT1000是山特(SANTAK) UPS不间断电源应急后备式 家用电脑办公断电保护停电备用智能续航电源 MT1000VA 1000VA/600W 软件管理这款吧?
几年前就有关注过MT系列,其实它还有一款长效机型MT1000S,可以外接电池组延长待机时间 https://item.jd.com/10049957223994.html
发表于 2024-5-6 17:03 | 显示全部楼层
红色狂想 发表于 2024-5-3 22:52
还有一个问题,这种基于PING网关+交换机的停电自动关机脚本,一旦设置了守护进程和添加任务计划,开机就 ...

是这样,不过我这里网络都固化IP的,没什么事,只有在网关交换机AP全部不通的情况下才会关机。 如果你嫌麻烦,找一台普通PC ,接山特的MT1000以上的UPS,带管理,山特的管理里有关闭ESXI的项目 。
111.png
 楼主| 发表于 2024-5-6 14:38 | 显示全部楼层
Satan023 发表于 2024-5-6 13:20
nut那玩意儿一点也不好用
我后来用apc的PowerchuteNetworkShutdown https://post.色魔张大妈.com/p/ag82pkw ...

我之前就是用的APC SURT2000XLICH+AP9631网络管理卡,没想到二手货不到两年就出故障了,详见这篇帖子:https://www.chiphell.com/thread-2593243-1-1.html

发表于 2024-5-6 13:20 | 显示全部楼层
本帖最后由 Satan023 于 2024-5-6 13:21 编辑

nut那玩意儿一点也不好用
我后来用apc的PowerchuteNetworkShutdown https://post.色魔张大妈.com/p/ag82pkw7/
sua1000ich+ap3961ch

所以如果有这方面需求,一开始就APC+管理卡就完了
发表于 2024-5-6 11:54 | 显示全部楼层
装个12V100A 3组电池,就不用担心这个了。
发表于 2024-5-6 11:45 | 显示全部楼层
esxi不太好弄,所以我转pve了,直接宿主机跑nut-server,虚拟机全部上qemu-guest-agent,停电由pve统一关机
 楼主| 发表于 2024-5-4 16:29 | 显示全部楼层
Mufasa 发表于 2024-5-2 20:48
为了避免UPS续航不足,需要烧脑解决自动关机问题。

我的措施是

我之前也是这样想的,与其停电自动关机,不如直接撑到来电,所以买了APC在线式UPS,可谁曾想每次买东西手气都很背,用了不到两年就坏了。。。不过要想续航充足,就得配一堆电池组,这东西是耗材,3年就得一更新,这长久下来也是一笔不小的开支
 楼主| 发表于 2024-5-4 16:09 | 显示全部楼层
Mufasa 发表于 2024-5-2 20:45
ESXi 没那么容易崩,停电关机了,下次正常启动就好。

主要是我这儿平均每个月就要停一次电,ESXi里面有磁盘阵列,这样经常掉电,长久下来总让人感觉不放心
 楼主| 发表于 2024-5-4 16:02 | 显示全部楼层
c2h6o 发表于 2024-5-2 19:50
单机的ESXI偶尔断电崩溃的风险没那么高。

是不高,按理说不管它也没事儿,但我这儿平均每个月就要停一次电,这长久下来总让人感觉不放心,主要是既然手里有UPS,何不搞个临时方案将就着应对一下呢
 楼主| 发表于 2024-5-3 22:52 | 显示全部楼层
无聊的五月 发表于 2024-5-3 20:25
所有的无直接通讯的关机,基本都是PING网关+或交换机 实现
1,ESXI中WINDOWS虚拟机设置BAT脚本PING,然后通 ...

还有一个问题,这种基于PING网关+交换机的停电自动关机脚本,一旦设置了守护进程和添加任务计划,开机就会自动运行,如果哪天需要关闭这个功能时,就必须先保持网络让它能PING得通,否则一开机进系统它就以为停电了又自动关机了,所以是不是可以创建个.ini配置文件,内容如果是1就是开启此功能,0就是禁用,脚本一运行先读取这个文件的值进行判断
另外,麻烦你再看一下我22#楼的回帖……
发表于 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: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:43 来自手机 | 显示全部楼层
我觉得不要把简单的事情复杂化,别人推荐的做法,肯定也是经过他的验证
而且既然是临时用用的,就果断接受临时方案的小问题
 楼主| 发表于 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:19 | 显示全部楼层
闲痴 发表于 2024-5-3 19:56
换我个人习惯,应该是参照python排版,把小功能上下加空行,嵌套的部分全部缩进,ping的部分写成函数同 ...

这个停电自动关机脚本示例我是参考的这篇文章,LINUX、ESXI如何使用普通的UPS做到断电自动关机,他有守护脚本和添加任务计划,虽然可以实现功能,但总感觉代码写得特别难看。。。
然后又看了另一个示例,esxi 通过ping实现停电自动关机,可以同时ping两个IP,不知他这个脚本有没有bug,还有就是文章的最后说修改时间那一步看不懂是什么意思,别的示例中并没有这一步操作啊
发表于 2024-5-3 21:34 | 显示全部楼层
红色狂想 发表于 2024-5-3 21:18
我不是担心ping会消耗CPU资源,而是那个while…do…done循环体不停的运行会不会消耗资源 ...

合理配置sleep就没问题,ping本身也是等待io为主
 楼主| 发表于 2024-5-3 21:18 | 显示全部楼层
深圳老胡 发表于 2024-5-3 20:25
就算一秒一个ping,负载对Gen9来说连一根牛毛都算不上吧?

我不是担心ping会消耗CPU资源,而是那个while…do…done循环体不停的运行会不会消耗资源
发表于 2024-5-3 20:25 来自手机 | 显示全部楼层
红色狂想 发表于 2024-5-2 21:26
延迟也不能搞得太长了,我这个老UPS才1KVA/600W,两节12V/9Ah的电池也已经进入老化期了,带两台机器估计 ...

就算一秒一个ping,负载对Gen9来说连一根牛毛都算不上吧?
发表于 2024-5-3 20:25 | 显示全部楼层
所有的无直接通讯的关机,基本都是PING网关+或交换机 实现
1,ESXI中WINDOWS虚拟机设置BAT脚本PING,然后通过PINK +SSH命令关机
2,ESXI中内置脚本设置守护进程

以前用的第1中,后来用第2种
我单位是PING 网关 核心交换机 AP ,3个设备,同时不通才会关机
发表于 2024-5-3 20:21 | 显示全部楼层
红色狂想 发表于 2024-5-3 16:15
ping最近的主交换机的话返回的TTL=255,ping主路由返回的TTL=64,这种情况ping哪个设备效率最高呀?如果 ...



如图
发表于 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能供安全供电的时间,留出关机余量)不恢复就关机,成功不需要日志,有波动才需要;第三,你这里的一旦因为网络波动导致跳出循环开始关机前检测,那么恢复后是不会回到循环的,这样会导致断掉保护失效,建议把判断也放到循环内部,干脆写成函数形式去调用就行了,确保不会因为意外情况丢保护。
        如果方便的话,可以再写一个守护脚本,就负责检测这个脚本是否在运行,不运行就自动拉起,甚至可以多个守护互相拉起,取决于你对意外的接受能力
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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

GMT+8, 2025-7-10 14:28 , Processed in 0.015829 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

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