问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Proxmox VE联动UPS实现自动关机

创作时间:
作者:
@小白创作中心

Proxmox VE联动UPS实现自动关机

引用
1
来源
1.
https://blog.xuegaogg.com/posts/proxmox-ve-integration-with-ups-for-automatic-shutdown/

为了避免突然断电导致文件系统乃至硬盘损坏,本文将介绍如何将UPS与Proxmox VE(简称PVE)联动起来。当UPS电量低到设定值或断电超过设定时间时,系统将按照特定顺序关闭虚拟机,并最终关闭PVE和主机,以保护数据安全。

安装依赖

首先需要安装相关的软件包:

apt update
apt install nut-snmp

接入UPS

SNMP连接

编辑 /etc/nut/ups.conf 文件,添加以下内容。这里以带SNMP卡的UPS为例,使用 snmp-ups 驱动。

# vim /etc/nut/ups.conf
[sk_sc1k]
   driver = snmp-ups
   port = 100.97.73.22
   community = public
   snmp_version = v2c
   pollfreq = 15
   desc = "SK SC1K SNMP"
   # 忽略UPS本身的Low Battery阈值,
   ignorelb
   # 还剩80%电就标记为低电量,就要关机了
   override.battery.charge.low = 80
   # 或者等待了5分钟,就要关机
   override.battery.runtime.low = 300

USB线连接

如果你是第一次运行,可以使用以下命令扫描生成配置文件。注意,一定要等命令执行出结果,或者直接加 -U 参数扫描USB。

# nut-scanner -U
SNMP library not found. SNMP search disabled.
Neon library not found. XML search disabled.
IPMI library not found. IPMI search disabled.
Scanning USB bus.
[nutdev1]
    driver = "blazer_usb"
    port = "auto"
    vendorid = "0665"
    productid = "5161"
    vendor = "INNO TECH"
    bus = "001"

对于USB连接的UPS,需要将扫描结果中的相关参数复制到 /etc/ups/ups.conf 文件中。

# vim /etc/ups/ups.conf
[ups]
        driver = "blazer_usb"
        port = "auto"
        vendorid = "0665"
        productid = "5161"
                # bus设置后最好测试一下,有些机器重启后,bus编号会变动,导致无法连接UPS
        bus = "001"
        
        # 忽略UPS本身的Low Battery阈值,
        ignorelb
        # 还剩80%电就标记为低电量,就要关机了
        override.battery.charge.low = 80
        # 或者等待了5分钟,就要关机
        override.battery.runtime.low = 300

接入监控报警

为了实现更全面的监控和报警功能,可以将UPS接入ZABBIX、Grafana等系统。以下是接入后的效果示例:


配置监听

编辑 /etc/nut/nut.conf 文件,设置模式为 standalone(如果只有PVE一台机器使用)。

# vim /etc/nut/nut.conf
MODE=standalone

编辑 /etc/nut/upsd.users 文件,添加一个用户。

# vim /etc/nut/upsd.users
[upsmon]
    password = password
    upsmon secondary

编辑 /etc/nut/upsd.conf 文件,设置只监听本地接口。

# vim /etc/nut/upsd.conf
LISTEN 127.0.0.1 3493

编辑 /etc/nut/upsmon.conf 文件,添加本地的UPS服务。

# vim /etc/nut/upsmon.conf
MONITOR sk_sc1k@127.0.0.1 1 upsmon password secondary

启动相关服务并设置开机自动启动。

systemctl start nut-server.service
systemctl start nut-monitor.service
systemctl enable nut-server.service
systemctl enable nut-monitor.service

使用 upsc <UPS名称> 命令可以查看当前系统接入的UPS信息。

# upsc sk_sc1k                                                                                      
Init SSL without certificate database                                                                                
battery.charge: 100                                                                                                                                                                                                                        
battery.charge.low: 80                                                                                               
battery.current: 0                                                                                                                                                                                                                         
battery.runtime: 22440                                                                                               
battery.runtime.low: 300                                                                                             
battery.temperature: 28                                                                                              
battery.voltage: 27.20
# ...省略

此时,当UPS断开后,电量低于设定阈值或断电超过设定时长时,系统将自动关闭。如果PVE上有开启的虚拟机,将按照设定的顺序和等待时间依次关闭。

测试配置

为了确保配置正确,需要进行实际测试。拔掉UPS的市电,等待满足设定的电量阈值或断电时长,观察PVE是否开始批量关机。如果在PVE中看到 Bulk shutdown VMs and Containers 的提示,说明配置符合预期。

参考资料

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号