使用 UPS 实现服务器断电自动开关机一例

一大早刚上班,财务科的白小萌就来找孔大力,说是昨晚上财务系统又进不去了,让他赶紧排查一下问题。

孔大力检查了财务的几台电脑,都是无法连接财务系统,网络又是正常的。

可是当 ping 服务器时,发现无法 ping 通,心想是不是服务器出故障掉线了,于是一路小跑奔向机房。


打开机房大门,孔大力进去这么一看,真是不看不要紧,一看吓一跳,服务器居然关机了!

“谁把服务器给关了?也没停电啊!”,他自言自语按下了开机键,还好服务器可以正常启动,财务系统也能正常访问了。

白小萌一看系统恢复了,虽然挺高兴,但还是向孔大力抱怨:“这都好几次了,每次老板要数据都给碰上出问题,到底怎么回事啊,赶紧解决一下吧!”

孔大力皱了皱眉,嘴上轻轻地说了声“哦”,心里却开始犯起了嘀咕,怎么就老是自动关机了呢?


后来经过确认,原来是因为这段时间高温天,常有供电电压不稳的情况发生,有时楼里就会跳闸断电,这一断电服务器自然就自己给关了,等来电后也不会自己启动。

这孔大力就琢磨开了,那有什么办法可以让服务器知道要停电了自个关机,然后等来电了自个再启动起来呢?

小伙伴们,你们有没有遇到像孔大力这样的情况呢?

经过一翻研究,我还真研究出了解决之道!


基本实现原理

简单地说,自动关机由 UPS 提供信号来触发,而自动开机则由服务器上的电源设置完成自动开机。


首先是自动关机,可以给服务器加装一个 UPS 设备,然后通过线缆将 UPS 连接到服务器上。

与此同时在服务器上安装电源监测软件,用于检测电源信号,以便判断并实施关机动作。


其次是自动开机,在服务器上设定断电后本机电源的处理动作。

因为现在的主板都是 ATX 结构,支持电源来电自动开机。

我不方便拿服务器上的设定,就拿类似下图台式机的设定举例,其实质是一样的。


Restore On AC Power Loss 意为断电后当供电恢复时采取什么动作。

其选项有三个,分别是始终关闭电源 Power Off始终开启电源 Power On保持最终状态 Last State

在这儿我们应该选始终开启电源 Power On


UPS 可选的型号有很多,但一般选在线式的,并且要支持信号连接功能的。

在此以 APC Smart-UPS 1500 这个型号为例说明。

通过设备后背板选择相应的连接线缆类型,可以用串口,也可以用 USB

UPS 和服务器两者开机后,用线缆连接。


UPS 电源监控软件的安装

选用 Rocky Linux ,个人认为它是未来 CentOS 的最佳接任者,使用起来和 CentOS 基本没有什么差别。

Windows 平台下安装基本也与 Linux 差不多,可以互相参考,在这儿我以实际我做过的为准。


新建一个目录(比如 /pcbeagent ),然后将 pcbeagent 程序包上传并解压缩。

tar zxvf pcbeagent-10.0.2-301-EN.x86_64.tar.gz
 


解压缩后得到很多文件,其中有两个我们会用到,一个是安装脚本,另一个是 pbeagent 主安装程序。


紧接着执行安装脚本。

./install_pbeagent_linux.sh
 


安装程序启动,选择语言。

为了避免乱码,我们还是老老实实用英文,这样也能多了解安装使用期间各种单词的含义。


阅读协议内容,按空格或回车翻页到最后,输入 yes 回车表示同意。


接下来询问你将 PowerChute 安装在哪儿,通常我选择默认位置,因为这样将来好处理问题。

默认安装在 /opt/APC/PowerChuteBusinessEdition/Agent

输入 yes 回车,开始安装。


在安装的过程中可能会遇到一些奇怪的坑,比如像这样,直接提示安装失败。


通过提示,需查看 rpm.log 日志文件,内容如下。

warning: pbeagent-10.0.2-301-EN.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7cf6d1fd: NOKEY error: %prein(pbeagent-10.0.2-301.x86_64) scriptlet failed, exit status 3 error: pbeagent-10.0.2-301.x86_64: install failed


说明在安装 rpm 文件时出错,于是直接手动安装这个 rpm 包试试。

rpm -ivh pbeagent-10.0.2-301-EN.x86_64.rpm
 

结果也报错了,不过可以看出来是没有安装 unzip 的原因。


这就好办了,它要啥我们就给啥呗,满足它,安装 unzip

yum install -y unzip
 


再来执行一下安装脚本。

./install_pbeagent_linux.sh
 

OK,没问题了,安装进程进入了配置阶段。

rpm 包安装完成后会生成配置文件 config.sh ,此时等同于手动执行了这个 config.sh 文件,当然你事后再用它来配置也没问题。


提示输入用户名和密码,这个用户名和密码是之后用于管理的 Web 界面的登录用户和密码,切记务必设定后保管好。

如果不幸忘记了密码怎么办?

不用担心,文末给你总结了重置用户名和密码的方法,着急的话你可以直接跳到文末查找。


用户名和密码的要求:

  • 用户名的长度必须介于 6 到 128 个字符之间。
  • 密码要求:
    • 长度至少 8 个字符,最多 128 个字符。
    • 1 个大写字母和 1 个小写字母。
    • 1 个数字或特殊字符。
  • 用户名不能是密码的一部分。


OK,接下来就是针对具体 UPS 设备的型号来设置了。

说实话,这玩意很容易搞错,所以你需要根据说明书上或设备上的实际型号来选择。


然后就是选择线缆的连接方式,通常有串口或 USB 方式。


配置程序会检测 UPS 设备是否在线,我这儿做测试没有真的连接,所以会提示是否连接正常。


一切OK,最后程序询问你是否启动 PowerChute 代理服务程序。


毫无悬念地代理服务正常启动了,这个时候我们就可以来管理它了。


今后完全可以手动启动或停止这个代理服务。

# 启动服务
systemctl start PBEAgent

# 停止服务
systemctl stop PBEAgent

# 重启服务
systemctl restart PBEAgent

# 查看服务状态
systemctl status PBEAgent
 


安装程序已经将 PBEAgent 服务加载到启用项了,以后系统开机会自动启动服务。


UPS 监控软件的设定

在正式开始设定前,我们需要确保防火墙开放 TCP 6547 端口,因为 PBEAgent 用到了这个端口。

firewall-cmd --zone=public --add-port=6547/tcp --permanent
 


端口开放后我们就可以这样来访问管理界面。

https://x.x.x.x:6547
 

注意是 https 而不是 http ,端口号用冒号连接在域名或IP之后。

打开 Web 管理界面后,我们用之前设定好的用户名和密码登录。


默认情况下登录进去就可以看到 UPS 的状态。


右上角可以更改语言为中文,点击关于查看详细的 UPS 参数。


关机设定

点击菜单的 关闭 > 关机设置


基本的设定有两处:

  • 一个是当停电后怎么开始关机程序
  • 一个是给操作系统关机的时间

本例设定为,停电后由电池供电,之后5秒钟后服务器开始自动关机,给足服务器90秒关机时间,90秒后 UPS 设备也自动关机,插座面板不再供电。


事件配置

点击菜单 PowerChute > 事件配置


你需要记录哪些事件你就把哪些项目勾上,这个决定了 UPS 自己记录事件以及之后我们设定邮件警告的设定。


我们总是希望第一时间能知道发生了什么,特别是电源故障这方面的问题,所以可以让 UPS 自动发事件消息给我们。

点击菜单 PowerChute > 电子邮件设置


按照上面的项目依次填入 SMTP 服务器 等等。

如果你还没有自己的 SMTP 服务器 ,那么可以参考我之前写的文章自己搭建一个,简单又实用,以后肯定还会有很多场景要用到。

参考文章:《把XMail企业邮局应用到系统管理中一(安装篇)》

文章链接:https://www.sysadm.cc/index.php/xitongyunwei/743-xmail-install

参考文章:《把XMail企业邮局应用到系统管理中二(配置篇)》

文章链接:https://www.sysadm.cc/index.php/xitongyunwei/745-xmail-config

参考文章:《把XMail企业邮局应用到系统管理中三(管理篇)》

文章链接:https://www.sysadm.cc/index.php/xitongyunwei/747-xmail-admin



点击菜单 日志记录 > 事件日志 ,即可查看发生的事件。


从下图中我们能看到 2021年7月27日10点05分左右发生了电源切换的动作。


如果你设定了电子邮件通知,那么会收到如下那样的邮件警告消息。

时间是一致的,不过我这儿没有设定好设备名称以及设备位置信息,在实际使用中你可以完善它。


最终效果确认

从前面介绍的安装和配置中也能看到使用的效果。

基本上当市电切断后,UPS 自动转为电池供电,与此同时发送给代理程序一个关机信号。

服务器接收到关机信号后,在一定的时间内完成关机动作。

然后在此之后 UPS 自动停止供电,相当于自己关机休眠了。


等于到市电恢复,UPS 再次开启,同时插座面板供电。

服务器检测到插座供电就自动启动,系统恢复正常。


如果忘了登录的用户名和密码怎么办?

这种情况只能重置用户名和密码了。

PBEAgent 安装路径(默认 /opt/APC/PowerChuteBusinessEdition/Agent )中找到 pcbeconfig.ini 文件,用文本编辑器打开它。

然后在文件最下面添加以下内容。

同时直接在等号后面输入新用户名和密码,切记用户名和密码要符合之前的规范和约束。

[Credentials]username=新的用户名password=新的密码
 


编辑好后保存 pcbeconfig.ini 文件,然后重启 PBEAgent 服务。

服务重启后,如果用户名和密码符合规范要求,那么 [Credentials] 区段内容将自动被删除,同时新的用户名和密码将生效。

假如用户名和密码不符合要求呢,系统会在 pcbeconfig.ini 文件中写入错误信息,根据这个信息再来调整即可。


写在最后

关于服务器自动开关机的简单的单机解决方案大体就如以上所述,在实际使用场景中用得也比较多一些。

不过还有更复杂的场景,比如有多台服务器的情况,那么可能需要用到网络管理卡。

如果你想通过网络的方式来给远程多台服务器发送开关机信号,那么应该会要用到网络管理卡的方式。

我没有实际使用网络管理卡的经验,所以也无法向小伙伴们介绍了,大家可以到官网上查找相关的说明书。

好了,以后还有什么有趣的研究我会抽空总结后分享给大家,记得三连,这是我的最低要求啦!


扫码关注@网管小贾,阅读更多

网管小贾的博客 / www.sysadm.cc



提交评论

安全码
刷新

© 2020-present 网管小贾 | 微信公众号 @网管小贾
许可协议:CC-BY-NC 4.0 | 转载文章请注明作者出处及相关链接