给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

2017-05-22 19:00:17 129点赞 1007收藏 172评论

追加修改(2017-05-22 21:05:19):
文中ups型号“APC BK500-CH ”有误,应该为“APC BK650-CH”,目前在售型号为apc BX650CI-CN

目前各大公网云盘纷纷嗝(关)屁(门),仅存的几家不是坐地涨价就是种种限制,同时个人数据体量暴涨,这对存储对速度和安全性有了越来越高的要求,公网云盘至少在传输速率上已out,家用NAS(Network Attached Storage:网络附属存储)绝壁是一种有效的解决方案。

NAS可分两大类:一类是成品NAS,如群晖威联通西部数据my cloud系列等;另一类是DIY产品,可通过普通电脑安装nas操作系统实现,近年HP的迷你服务器gen8 microserver凭着优良的做工灵活多样的玩法在DIY NAS圈内火了一把,本文主要针对gen8方案的ups配置进行讨论,至于gen8实现nas功能的具体玩法zdm有高质量的介绍(见下图),本文不表。无论是哪类NAS,突然断电对数据安全有可能带来十分严重的不良影响,轻则个别大姐姐失踪(丢失部分数据),重则别墅坍塌(硬盘损坏)大姐姐团灭给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案 。所以给NAS配个保姆UPS很有必要。

gen8之应用gen8之应用

一、UPS的选择

UPS当然是越贵越好,有米选贵的,用起来6!(废话)

下面简单说下如何选择

UPS从原理上分两类:在线式和后备式,各自原理大概是这样的:

在线式:

山特UPS不间断电源C1K两电脑单机60-90分钟在线式带网络接口内置电池800W断电延时 【京东仓配】山特C1K正品UPS1508元在线式UPS京东直达链接

正常供电情况时:220V交流电---->整流成直流(同时给内部电池充电)---->逆变成220V交流(接NAS、电脑等用电器)

失去交流电时:内部电池提供直流电源(无切换延时)---->逆变成220V交流(接NAS、电脑等用电器)

后备式:

APC BK500-CH 500VA UPS不间断电源 防雷浪涌保护300W 15分钟329元后备式UPS天猫精选直达链接

正常供电情况时:

220V交流电---->直接接NAS、电脑等用电器

(与此同时)220V交流电---->整流成直流(给内部电池充电)

失去交流电时:切换成内部电池提供直流电源(有切换延时,通常10毫秒以下)---->逆变成220V交流(接NAS、电脑等用电器)

显然,在线式UPS没有电池切换供电延时,用电设备几乎感受不到停电影响;后备式有几个毫秒的切换时间,正常情况下对用电设备无影响,若NAS或电脑电源质量不过关,有可能掉电重启和死机,不过几率非常小。

所以在线式UPS优于后备式UPS,有预算尽量上在线式UPS。要求不高(穷)买APC BK500-CH(后备式)够用了给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

二、保姆方案思路

对于成品NAS尤其是群晖,对市面上的UPS支持都很好,usb插上就能用,gen8直接裸装dsm或win系统也类似,没啥好讲的。主要说说gen8安装esxi后如何与UPS配合实现停电自动关机,确保数据安全。

APC BK500-CH UPS为例,文章《基于APCUPSD实现断电时ESXi自动关机》(链接:https://blog.ltns.info/linux/esxi_auto_shutdown_with_apcupsd/)对gen8与UPS配合实现断电自动关机作了详细介绍,但使用下来至少有2个方面的不足:1、必须单独建立虚拟winxp运行APCUPSD客户端,占用gen8系统资源;2、最大的不足是断电触发gen8自动关机后,UPS不能自行关闭自身电源,直至电池耗尽,严重影响UPS使用寿命,下次再停电可能直接挂掉失去保姆作用。

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

基于APCUPSD实现断电时ESXi自动关机

于是对现有方案进行改进,经多次实验,最终方案如下:

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

仍然用APCUPSD实现对UPS供电情况进行监视和控制,不同的是需要另备能刷lede(openwrt)并且带usb接口的路由器,将APCUPSD客户端运行于路由器上,结合监控脚本,实现停电后能依次关闭esxi客户机(dsm等)--->esxi系统--->gen8物理机--->UPS自身电源(路由此时也断电,但对路由无不良影响),并且来电后能自动开启UPS,自动启动gen8及相关系统。

三、方案具体实践

1、路由器准备

带有usb口能刷lede(openwrt)的都可以,目的是安装apcupsd并通过usb连接线实现ups监控。本人路由器为wrt1900acs。配置步骤如下:

领势( LINKSYS )WRT1900ACS 双频千兆无线路由器1299元京东直达链接

(1)刷入lede(openwrt)系统

(2)用putty ssh进入路由器,opkg update

(3)安装软件包:

opkg install kmod-hid

opkg install kmod-hid-generic

opkg install kmod-usb-hid

opkg install apcupsd

期间有其他依赖包,安装程序会自动下载。安装完毕后用winscp进入路由器,首先进入目录/etc/apcupsd,有如下文件(见下图)

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

编辑配置文件/etc/apcupsd/apcupsd.conf

找到UPSCABLE 一行,填上usb(见下图)

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

找到UPSTYPE 一行,按下图改

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

找到NETSERVER一行,确认与下图一致,保存文件。

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

按下图修改/etc/init.d/apcupsd(选中部分)

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

putty ssh 登陆路由,运行命令:

/etc/init.d/apcupsd enable

将APC BK500-CH通信线usb口插入路由器,重启路由器。路由重启成功后,用putty ssh进入路由器,输入命令检测ups状态:

/usr/sbin/apcaccess

如果出现如下图信息,说明ups已被路由正确识别,否则请检查之前步骤是否遗漏或错误。如果出现诸如端口无权限访问等提示信息,请安装软件包haveged再试。

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

至此,路由器配置完毕。

2、esxi关机脚本

该脚本参考自文章《基于APCUPSD实现断电时ESXi自动关机》(链接:https://blog.ltns.info/linux/esxi_auto_shutdown_with_apcupsd/),可直接到文章主页按提示下载。

本人对脚本进行了优化(加入了esxi客户机关机状态判断,若当前esxi客户机已关闭,立即关闭下一客户机,缩短esxi关机时间等待,具体自己体会),下载地址:https://pan.baidu.com/s/1skUtrRn 提取码:e8n7

注意将脚本ups.sh中的日志存储路径改为你自己的esxi数据存储路径,如本例为/vmfs/volumes/OS/ups.log

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

开启esxi的ssh功能,利用winscp将下载好的关机脚本放入esxi 数据存储(datastore)中,如/vmfs/volumes/OS/ups.sh,并给ups.sh增加执行权限(如何开启esxi的ssh,如何增加脚本执行权限,度娘有)。

3、实现停电时路由apcupsd客户端自动调用esxi关机脚本

(1)打通路由远程调用gen8 esxi 关机脚本的通道

apcupsd运行于路由,ups关机脚本放在gen8的esxi数据存储中,为实现停电自动执行ups关机脚本,必须在路由端用pubkey方式ssh登陆进esxi后远程调用/vmfs/volumes/OS/ups.sh。该过程实现方法如下:

首先在路由端生成生成密钥和公钥,用putty ssh 进路由,输入如下命令:

mkdir /root/.ssh/

dropbearkey -t rsa -f ~/.ssh/id_rsa.db

生成完毕后有类似下图输出:

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案在输出的内容中选择”ssh-rsa AAAAB…...y9KdM= root@LEDE“这一段拷贝至gen8 esxi 的/etc/ssh/keys-root/authorized_keys文件中(如无此文件,新建一个),保存,重启esxi。

下面进行远程调用验证(这一步必须做,目的是让路由保存ssh登陆gen8 esxi的指纹信息),ssh登入路由,输入如下命令:

ssh -i /root/.ssh/id_rsa.db root@你的gen8 esxi的管理ip

第一次执行会有安全提示,输入"y"并回车,若ssh显示的登陆账号已变为root@你的esxi名称,则路由与gen8 esxi之间的联系已建立,下一步可测试远程调用关机脚本,输入如下命令:

ssh -i /root/.ssh/id_rsa.db root@你的gen8 esxi的管理ip /vmfs/volumes/OS/ups.sh

若esxi开启关机流程(可在vmware client里看到),说明路由远程调用gen8 esxi关机脚本成功,bingo,你离成功不远了给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案 ,可进行下一步设置。

(2)路由端apcupsd脚本设置

通过研究apcupsd的wiki文档,发现当apcupsd检测到ups交流电源停电后,首先调用/etc/apcupsd/apccontrol中的powerout代码段,经过一定延时(对应配置文件/etc/apcupsd/apcupsd.conf中的ONBATTERYDELAY 参数),会触发onbattery事件,并执行/etc/apcupsd/onbattery脚本,当ups交流电源恢复后,apcupsd会调用/etc/apcupsd/offbattery脚本,于是考虑在这里做点文章给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

经多次实验,如果直接把远程关机代码“ssh -i /root/.ssh/id_rsa.db root@你的gen8 esxi的管理ip /vmfs/volumes/OS/ups.sh”放入etc/apcupsd/onbattery脚本或etc/apcupsd/apccontrol 脚本的powerout代码段中,apcupsd检测到ups交流电源停电后,该远程关机代码都不会被执行,估计是apcupsd的bug,于是采用“cron计划任务+onbattery事件”结合的方式实现实时监视ups状态并在停电时及时自动调用关机脚本的功能,简单说就是cron计划任务调用ups监视脚本“upscheck”并进而调用esxi远程关机脚本,onbattery事件触发后运行etc/apcupsd/onbattery脚本,检测gen8是否已关机,若已完成关机则立即执行ups关机命令。具体过程如下:

按下图修改/etc/apcupsd/onbattery(图看不清请右键点新窗口打开放大,没办法,zdm贴不了代码,图片也被强制压缩给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

按下图修改/etc/apcupsd/offbattery

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

按下列图打开/etc/apcupsd/apccontrol增加或修改对应位置代码并保存

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案


给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

按下图修改/etc/init.d/apcupsd

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

putty ssh 登陆路由,运行命令:

/etc/init.d/apcupsd enable

(3)路由端ups监控脚本设置

在/root/目录下新建文件upscheck,按下图增加代码(图看不清请右键点新窗口打开):

给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

保存后,为upscheck文件增加执行权限。

(4)crontab计划任务设置

将下列内容填入路由器的计划任务中,本例每10秒调用一次/root/upscheck 脚本进行检测。保存后最好重启一次路由。

* * * * * /root/upscheck > /dev/null 2>&1

* * * * * sleep 10 && /root/upscheck > /dev/null 2>&1

* * * * * sleep 20 && /root/upscheck > /dev/null 2>&1

* * * * * sleep 30 && /root/upscheck > /dev/null 2>&1

* * * * * sleep 40 && /root/upscheck > /dev/null 2>&1

* * * * * sleep 48 && /root/upscheck > /dev/null 2>&1

(5)关机流程测试

putty ssh 登入路由器,输入如下命令(无需拔掉UPS电源插头):

touch /etc/powerfail

10秒后刷新并观察日志/var/log/upscheck.log是否变化、/root/shutdown.log是否生成,同时在vmware client里是否看到esxi启动关机流程,若上述现象都存在,说明你成功了给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案

在gen8完全关闭后1分钟内,ups将自动关闭自身电源,因UPS电源插头未拔掉,ups立刻恢复自身电源并正常供电。

(6)断电测试

请在“关机流程测试”正确完成的前提下进行断电测试。“关机流程测试”完成后,确认路由正常运转,手动打开gen8电源,启动esxi,esxi启动完毕后(无需启动虚拟客户机),拔掉ups电源插头给你的NAS(GEN8之esxi+dsm)找个靠谱保姆:一种实用UPS方案 完成你的终极测试。

正确结果为:ups电源插头拔掉后esxi启动关机流程,gen8关闭后1分钟内ups自动切断自身电源(电源指示灯灭)。插上ups电源插头后ups自动打开自身电源并给路由器、gen8正常供电。

至于来电后自动启动gen8,应该很简单,gen8 bios里有。

展开 收起
172评论

  • 精彩
  • 最新
  • 费了这么多话,我来总结下。 买bk650 带关机线。 真是瞎折腾 [doge]

    校验提示文案

    提交
    [被吓到] 看错了。紫薯布丁

    校验提示文案

    提交
    文中型号搞错了,应该是bk650 ,bk500不支持usb关机

    校验提示文案

    提交
    收起所有回复
  • 我就问问,现在怎么撸gen8?

    校验提示文案

    提交
    二手看看吧

    校验提示文案

    提交
    收起所有回复
  • 这拓扑图画的,存储部分像个蓄电池,ups像个插线板,就不能画专业点嘛

    校验提示文案

    提交
    APC BK650-CH 长的就像插线板,gen8长的就像蓄电池 [皱眉]

    校验提示文案

    提交
    还写实手法哪,可但是拓扑图也不能这么画

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我就想问一下,如果正在关机,又来电了,怎么办?

    校验提示文案

    提交
    1、如果停电与来电间隔时间小于设定参数“ONBATTERYDELAY” 指定的时间,apcupsd不会触发关机流程;
    2、如果停电与来电间隔时间大于设定参数“ONBATTERYDELAY” 指定的时间,apcupsd会触发gen8关机流程,gen8肯定会关机,但ups是否切断自身电源取决于gen8 esxi先关闭还是先来电。

    校验提示文案

    提交
    收起所有回复
  • 还有一方案,ups接路由上,dsm和gen8读取路由上UPS信息。

    校验提示文案

    提交
    NUT(networkupstools)貌似就是你说的这种,我感觉这个难度大一点,当然功能也更强,dsm用的就是nut的方案

    校验提示文案

    提交
    收起所有回复
  • 有些复杂,可以检测不连接UPS的路由器地址,不通或超过检测周期则poweroff即可。

    校验提示文案

    提交
    如果是仅仅实现断电关机其实没这么麻烦,直接写脚本ping外网就行了。主要是要控制ups在负载关机后自动切断自身电源(休眠),不然每次停电ups都可能会把电池耗尽,电池很快就报废。

    校验提示文案

    提交
    你的UPS还有别的无法关闭的负载吗?我座位处是BK650,USB连接的主开发机,开发机使用UPS的驱动就可以控制关机,NAS也是写的ping路由器脚本判断做poweroff,UPS只连接主开发机和NAS,所以停电了无负载,UPS也不会耗费电池,当然除非长时间停电没发现……

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 我就在找一种产品,类似bk550,停电时能给nas发送关机指令,然后电池储备只要够关机就行了,这样ups就能小巧了。。。可惜一直没找到。。

    校验提示文案

    提交
    APC BK650-CH 体积不大,不过貌似很难买到,替代型号APCUPS BX650CI-CN可以考虑,原理大同小异

    校验提示文案

    提交
    收起所有回复
  • 我直接上zfs偶尔断电就断电吧。

    校验提示文案

    提交
    停电掉数据是一方面,造成硬盘硬件故障也不是不可能,有些机箱电源质量差直接毁硬盘的情况也有

    校验提示文案

    提交
    这个是的,之前一朋友的主板出问题了,直接坏了一硬盘,然后弄了很久才发现问题。不过我用到现在五年了,也断过几次电,没什么问题。还有一个同事用的好好的,红盘坏了…这事情真得看点运气。

    校验提示文案

    提交
    收起所有回复
  • 请教一下gen8放在有线电视宽带,两台无线路由之后,外网还能访问?后面三个网络接口能同时使用?本来想买群晖716,这货便宜近一半还多两个硬盘口,犹豫中 [皱眉]

    校验提示文案

    提交
    白裙自带内网穿透quickconnect,外网访问应该没问题

    校验提示文案

    提交
    能,但前提有两个,一是你家宽带分配了独立ip,这个在光纤接入的有些地方没有。二是你懂得基本的网络知识,会配置端口转发和监听端口配置。

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 有没有Windows系统的没有网络自动关机的。

    校验提示文案

    提交
    win系统没专门研究过,不过应该更容易实现

    校验提示文案

    提交
    收起所有回复
  • 家用的话,主要担心起火问题,毕竟是电池产品。

    校验提示文案

    提交
    铅酸电池还好,比较安全

    校验提示文案

    提交
    收起所有回复
  • 可不可以做一个图,显示下所有配件连接过程?比如路由器接ups电没?因为家里断电路由器也会断。

    校验提示文案

    提交
    图上已经有了,gen8和路由电源都是接在ups上的,也就是通过ups供电。ups的usb通信线接路由的usb接口,gen8网口接路由lan口,路由wan口接光猫。

    校验提示文案

    提交
    收起所有回复
  • 楼主能不能写个exsi装dsm的方法,我装了几次都起不来,不能rdm硬盘。

    校验提示文案

    提交
    建议在raid模式下使用rdm,dsm安装成功后再挂载rdm盘

    校验提示文案

    提交
    收起所有回复
  • 我的是back ups 650 ,路由器刷的是明月的固件,按照你的方法,为什么识别不了ups ?什么情况?

    校验提示文案

    提交
    usb驱动装齐了吗

    校验提示文案

    提交
    opkg update

    opkg install kmod-hid

    opkg install kmod-hid-generic

    opkg install kmod-usb-hid

    opkg install apcupsd

    opkg install haveged

    是这样么?

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 可以把你图片的那些代码发给我么?或着上传的网盘,看得眼睛都花,还有到路由保存ssh登陆gen8 esxi的指纹信息时为什么提示输入密码?

    校验提示文案

    提交
    不应该啊,是不是key没弄好

    校验提示文案

    提交
    收起所有回复
  • lede的系统为什么不直接装在esxi里?

    校验提示文案

    提交
    之前就装过,但是不能很好实现时间配合esxi关机和ups休眠

    校验提示文案

    提交
    收起所有回复
  • 其他已经搞定,你图片里的代码,看不清楚,打代码头疼,好多!就差代码了,可以拷贝一份么?

    校验提示文案

    提交
    我在网盘更新下

    校验提示文案

    提交
    收起所有回复
  • 这个一掉电马上关机,怎么设置掉电延迟5分钟再关闭VM虚拟机然后在关闭esxi,再关闭ups ?

    校验提示文案

    提交
    onbattery 文件里增加延时

    校验提示文案

    提交
    在什么位置加?需要加什么代码?

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • @Bigmop 代码是什么,加在什么地方?

    校验提示文案

    提交
    sleep XX 加在在onbattery文件的while循环之前

    校验提示文案

    提交
    sleep 时间 ,加在onbattery 文件里的while循环之前

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 不知道梅林可以安装吗

    校验提示文案

    提交
    估计不行,依赖包不一定有

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

nnnnbp

Ta还没有介绍自己

发文累计被1007人收藏

关注 打赏
最新文章 热门文章
1.0K
扫一下,分享更方便,购买更轻松