netfun2000 发表于 2016-8-4 19:54:38

用树莓派做不间断电源服务器(UPS Server)

本帖最后由 netfun2000 于 2016-8-5 13:38 编辑

夏天到了,最近老停电,为了保险起见搞了一台APC Back-UPS 650。
据称支持上百家几千种UPS,只有一台,其他没做测试。
环境:
1、一台UPS
2、白裙、黑群各一台
3、Gen8一台运行ESXI 5.5
4、光猫、路由器、交换机
5、树莓派2B一台

怎么解决DSM自动关机?DSM只进安全模式,不自动关机。


黑群连接到树莓派UPS Server.


winman 发表于 2016-8-4 21:09:36

DSM是支持UPS通知DSM关机的,建议你看看群晖的UPS兼容性列表。

netfun2000 发表于 2016-8-5 09:43:24

winman 发表于 2016-8-4 21:09
DSM是支持UPS通知DSM关机的,建议你看看群晖的UPS兼容性列表。

兼容650的,但测试没有自动关机,只进安全模式了。

underwood 发表于 2016-8-9 13:40:59

群晖设置硬盘休眠,为什么必须要同时设置不间断电源才能保存呢?

drice 发表于 2016-8-9 17:15:40

我也是650,带一台Gen8 win2012,一台白裙。交换机不接UPS,白裙直接数据线接UPS,GEN8 检测网卡,一旦断开网卡,则2分钟后关机。

netfun2000 发表于 2016-8-13 19:10:26

drice 发表于 2016-8-9 17:15
我也是650,带一台Gen8 win2012,一台白裙。交换机不接UPS,白裙直接数据线接UPS,GEN8 检测网卡,一旦断开 ...

我是用树莓派做的UPS服务器,Esxi(Gen8)、白裙、黑群通过网络与UPS服务器(树莓派)通信,UPS连接到树莓派上。接到UPS供电的设备不都同时开机,所以不必担心超载问题。

UPS日常给:光猫、路由器、树莓派、交换机供电。
路由器挂一电子相框(AX206)改显示器,显示路由器和UPS电池状态。

netfun2000 发表于 2016-8-13 20:12:04



AX206做的显示监控。


darkorigin 发表于 2016-8-18 01:05:29

楼主你这是标题党啊。还以为你用树莓派自己组了UPS呢。。。。。

netfun2000 发表于 2016-8-19 10:29:00

darkorigin 发表于 2016-8-18 01:05
楼主你这是标题党啊。还以为你用树莓派自己组了UPS呢。。。。。

想改来着,可是不让编辑了。

sodeep 发表于 2016-8-19 11:43:45

这是个好东西,谢谢

netfun2000 发表于 2016-8-19 21:29:13

转一篇教程:Raspberry Pi 的應用 - 網管人神器,隨時監控電力狀況的 UPS Server
ByHeracles Jam 6/01/2015 http://blog.itist.tw/2015/06/building-ups-server-with-raspberry-pi.html]http://1.bp.blogspot.com/-gH6LE72oik4/VkAO3aNTgTI/AAAAAAAAKkQ/Nsa3vrUJuA8/s1600/linebutton_84x20_zh-hant.png


為什麼要用 UPS

這邊順便要釐清一個錯誤的觀念:
「讓我們在斷電時還能繼續工作,那是備用發電機組該負責的,絕對不是 UPS 的任務。」
https://3.bp.blogspot.com/-azxOLcU2oRI/VWdQ_2qgTPI/AAAAAAAAHjQ/sVsxx3ecMPU/s640/rpi-ups-server-003.png

UPS 的目的只是讓我們在斷電的時候,能依正常程序結束工作並關閉系統,不會因突然停電造成系統、資料的毀損,或是設備的故障。

而 UPS 主要分為三種運作型態:

[*]離線式 (Off-Line) - 平時為待機狀態,斷電的瞬間才供電。
[*]在線互動式 (Line Interactive) - 平時為待機狀態,但是隨時在穩壓,在斷電的瞬間才供電。
[*]在線式 (On-Line) - 全時進行穩壓再供電。
在選購時,比較重要的關鍵有:

[*]容量大小,決定供電的時間長短。
[*]運作模式,決定供電品質的好壞。
[*]監控介面,決定如何監控供電狀況。

容量跟運作模式就沒什麼好說的,容量越大越好,在線式才是王道,一切提「錢」來見。
https://1.bp.blogspot.com/-2gmAbBtRziA/VWdRAhxLwMI/AAAAAAAAHjY/s7BkQW0NEYE/s320/rpi-ups-server-004.png

監控介面不外乎下面幾種:

[*]Serial Port,也就是RS-232 接頭,現在比較少見了。
[*]USB,目前的主流介面。
[*]RJ-45,高階的 UPS 才會有。
UPS 可不是裝上去就好了,斷電的時候,我們可是要趕快去把設備關機,以測安全。

問題是,我怎麼知道停電了呢?

透過內建的網路介面加上專用軟體來監控 UPS 的供電狀況,當然是輕鬆又方便,可是只有 Serial Port 或是 USB 的話,難道就不能透過網路來管理嗎?

放心!!!
當然有辦法,Network UPS Tools 就是你的救星。
https://3.bp.blogspot.com/-KIp5h0MHgyg/VWdRAx3BGLI/AAAAAAAAHjc/kl29W-dtXHI/s640/rpi-ups-server-005.png

它支援了上百家個品牌的 UPS,並且支援 Windows、Mac、Linux 及 BSD 等平台,不管是 Serial Port、USB、RJ-45 也統統可以使用。
https://3.bp.blogspot.com/-b3Gle6fKlRY/VWdRBPzSVII/AAAAAAAAHjo/dbN7LiULpn4/s640/rpi-ups-server-006.png

事前準備
[*]Raspberry Pi Model B / B+ / 2B,Model A / A+ 須加上 USB 有線 / 無線網路卡。
[*]Raspbian 作業系統。
[*]UPS,監控介面最好是 USB 或 RJ-45,這次是用 APC Back-UPS ES 500VA。
如果是 Serial Port 也不是不可以,只要利用支援 Linux 的 USB to RS-232 轉接線 即可。

Server 端安裝與設定
安裝 Network UPS Tools 套件。
sudo apt-get -y install nut
https://1.bp.blogspot.com/-PxLFkLvXOU8/VWRJ7Y0_SpI/AAAAAAAAHcQ/VxZaE1bWm4o/s640/rpi-ups-server-011.png

先從官網的 硬體支援清單,查詢該型號使用的驅動程式及連接埠,這邊有幾個欄位可以過濾:

[*]Support Level - 支援程度,一顆星到五顆星,越高越好。
[*]Device Type - 設備類型,PDU (電源分配器)、SCD (太陽能控制設備)、UPS (不斷電系統)。
[*]Manufacturer - 廠牌。
[*]Model -型號。
[*]Connection - 連線方式,Serial、USB、Network。
https://2.bp.blogspot.com/-72LUWHhs3Jw/VWRJ7LcVy9I/AAAAAAAAHcM/2P3L0FEQBKo/s640/rpi-ups-server-012.png

找到對應的 UPS 型號,右側會顯示適用的驅動程式類型,點選這個連結。
https://4.bp.blogspot.com/-y7HXAR-Xm-4/VWRJ7Hx-sBI/AAAAAAAAHck/TABIM7dT_os/s640/rpi-ups-server-013.png

在「IMPLEMENTATION」的段落,就會有驅動程式的設定值。
https://1.bp.blogspot.com/-oEsTKvKWj28/VWRJ8PAbhpI/AAAAAAAAHdc/FYA8XMkxWPg/s640/rpi-ups-server-014.png

編輯 UPS 設定檔。
sudo vi /etc/nut/ups.conf
https://1.bp.blogspot.com/-3V5jpUsdMIc/VWRJ8GayBhI/AAAAAAAAHc0/Dij8YykEdm0/s640/rpi-ups-server-015.png

將剛剛查詢到的驅動程式設定值,寫入設定檔裡,中括弧「」是自訂的 UPS 名稱,接下來的步驟會用到,desc="xxx" 只是註解可省略。

    driver = usbhid-ups
    port = auto
https://4.bp.blogspot.com/-AWV6C4sSU-o/VWRJ8REzXpI/AAAAAAAAHc4/Tb8LLfsTUpw/s640/rpi-ups-server-016.png

啟動 UPS 設備。
sudo upsdrvctl start
https://2.bp.blogspot.com/-2DmGHb72tGA/VWRJ82h4X7I/AAAAAAAAHdM/GLgG2Ji3ivs/s640/rpi-ups-server-017.png

編輯運作模式設定檔。
sudo vi /etc/nut/nut.conf
https://4.bp.blogspot.com/-q7ZZ6swNF_M/VWRJ9Fsu-EI/AAAAAAAAHdE/8rUT4hAC8kE/s640/rpi-ups-server-018.png

將「MODE=none」改成「MODE=netserver」
https://4.bp.blogspot.com/-4KbIDc_YUHg/VWRJ9rrbRPI/AAAAAAAAHdg/ZPpqBNScVt8/s640/rpi-ups-server-019.png

確認本機所有的 IP 位址,這裡只加入 IPv4 的位址。
ifconfig | grep inet[^6]
https://4.bp.blogspot.com/-Wkz-tfsNvl4/VWRKUg8KIbI/AAAAAAAAHeg/Nr858zfhLCM/s640/rpi-ups-server-020.png

編輯 UPS Daemon 設定檔。
sudo vi /etc/nut/upsd.conf
https://2.bp.blogspot.com/-k9bQStCc9yE/VWRJ90mvs5I/AAAAAAAAHdU/ig-VNokOfG4/s640/rpi-ups-server-021.png

找到「# LISTEN <address> [<port>]」,在下一行加入所有 IP 位址,連接埠 3493 不用改。
LISTEN 127.0.0.1 3493
LISTEN 10.1.1.22 3493
LISTEN 172.17.42.1 3493
https://1.bp.blogspot.com/-R9dvRaiVI28/VWRJ-YIgMDI/AAAAAAAAHdw/ZGgUAFQzobg/s640/rpi-ups-server-022.png

編輯 UPS Daemon 使用者設定檔。
sudo vi /etc/nut/upsd.users
https://2.bp.blogspot.com/-WmC8GSdCC0o/VWRJ-rTw1wI/AAAAAAAAHds/yUPtXbbQbxU/s640/rpi-ups-server-023.png

新增一個管理者帳號,「」是自訂的帳號名稱,「password=」是自訂密碼。

password = admin-pw
actions = SET
instcmds = ALL

再新增一個 UPS 主控端,「password=」是自訂密碼。

password = upsmon-pw
upsmon master
https://4.bp.blogspot.com/--zqRLFYqYpQ/VWRJ_DoEcRI/AAAAAAAAHeA/JCZsS0DDJE8/s640/rpi-ups-server-024.png

編輯 UPS 監控程式設定檔。
sudo vi /etc/nut/upsmon.conf
https://3.bp.blogspot.com/-QP4owIKaTaw/VWRJ_YAws7I/AAAAAAAAHd4/P3Cs8j_fbIo/s640/rpi-ups-server-025.png

加入下列設定值,「apc」是 ups.conf 的 UPS 名稱,「localhost」是本機的 IP 位址,「upsmon」是 upsd.users 的主控端名稱,「upsmon-pw」是主控端的密碼,「master」代表這台是主控端。
MONITOR apc@localhost 1 upsmon upsmon-pw master
https://1.bp.blogspot.com/-r3nCcne8kic/VWRKAJkBSoI/AAAAAAAAHeU/usRtgRIxjpc/s640/rpi-ups-server-026.png

啟動 NUT 的 Server 端服務。
sudo service nut-server start
https://2.bp.blogspot.com/-jzDk168dpMw/VWRKAF-80BI/AAAAAAAAHeI/aUEmR-Wehfs/s640/rpi-ups-server-027.png

啟動 NUT 的 Client 端服務。
sudo service nut-client start
https://4.bp.blogspot.com/-AfJPAvQjw4g/VWRKAmJPCcI/AAAAAAAAHeQ/cfETDhsceS4/s640/rpi-ups-server-028.png

確認服務均已正確啟動。
ps -ef | grep ups
https://3.bp.blogspot.com/-yEg23WZ6wvE/VWRKBJDQ1zI/AAAAAAAAHeY/x42tmxJ65H8/s640/rpi-ups-server-029.png

我們還可以用指令來確認這顆 UPS 可執行的管理命令。
upscmd -l apc
https://4.bp.blogspot.com/-Gn-l_xEfJNA/VWbquuNu8zI/AAAAAAAAHfk/L7z5HcTOhLw/s640/rpi-ups-server-041.png

或是取得 UPS 目前的系統狀態。
upsc apc
https://2.bp.blogspot.com/-0jPnyHIHXBg/VWbqucWLDpI/AAAAAAAAHfo/bTI4prT9uzs/s640/rpi-ups-server-042.png
https://3.bp.blogspot.com/-VJItvLoJ2WQ/VWbquaRVjeI/AAAAAAAAHfg/buEIQ7aMWZY/s640/rpi-ups-server-043.png


斷電實測
我們試著將 UPS 的市電插頭拔掉,這時候在 Shell 就會跳出「UPS on battery」的訊息。
https://3.bp.blogspot.com/-AajYxjRsJEU/VWbMj7Aoz-I/AAAAAAAAHew/9VdssM0ONjQ/s640/rpi-ups-server-051.png

接著再把市電插頭接回去之後,就會出現「UPS on line power」的訊息。
https://1.bp.blogspot.com/-E4tKgaChdt4/VWbMok0gNjI/AAAAAAAAHe4/V_gGGOv2FbM/s640/rpi-ups-server-052.png

如果我們拔掉 USB 連接線,則是出現「UPS is unavailable」的訊息。
https://2.bp.blogspot.com/-4_qdVa7cvnk/VWbRHEMbLgI/AAAAAAAAHfE/ayXhx26fb_k/s640/rpi-ups-server-053.png

這些服務在運作過程中的錯誤訊息,可以在 /var/log/syslog 裡面找到。
cat /var/log/syslog | grep ups | less
https://1.bp.blogspot.com/-_IeniIQ-ugU/VWbTWGwZJWI/AAAAAAAAHfQ/xPVbyupGIvQ/s640/rpi-ups-server-054.png


Windows Client 端
在 Windows 上,常見的是兩套程式:WinNUT 及 Windows NUT Client。

WinNUT這根本就是把 NUT 原封不動的轉到 Windows 平台上,目前支援到 Windows 7。
https://1.bp.blogspot.com/-wK9ZzC8qGYA/VWdBYjK3KxI/AAAAAAAAHgE/PuXHTq7xKjI/s640/rpi-ups-server-101.png

最後的版本是在 2011/2/24 發佈的 2.0.0.4a。
https://4.bp.blogspot.com/-MsGKhYGE29k/VWdBYgbbcvI/AAAAAAAAHgI/eZcnUrh5xbQ/s640/rpi-ups-server-102.png

安裝過程是標準的無腦安裝法,一直按「Enter」鈕就行了。
https://2.bp.blogspot.com/-dzaCN0Rmg2w/VWdBYtAFoxI/AAAAAAAAHgA/hmOxgWKy9jQ/s400/rpi-ups-server-103.png

安裝完畢之後,會在程式集裡新增捷徑:

[*]Start WinNUT Ups Monitor - 啟動 WinNUT
[*]Stop WinNUT Ups Monitor - 停止 WinNUT
[*]WinNUT Configuration Tool - 設定 WinNUT
https://4.bp.blogspot.com/-ti4QnpLoRKI/VWdBZMfLUKI/AAAAAAAAHgQ/gY9XGoOhC_M/s400/rpi-ups-server-104.png

先執行「WinNUT Configuration Tool」,點選「Configuration File Path」右側的「Edit」。
https://3.bp.blogspot.com/-y_Q6-Cj4b-k/VWdBZUuFnjI/AAAAAAAAHgU/RC7avzrVJJE/s640/rpi-ups-server-105.png

看到了吧!!! 真的就是 Linux 上面的設定檔格式。

我們一樣要加入 UPS 的 IP 位址,千萬別照抄,要改成 Server 的 IP ,而角色也不是「master」,是「slave」。
MONITOR apc@10.1.1.22 1 upsmon upsmon-pw slave
https://4.bp.blogspot.com/-zmcW8mzZE-M/VWdBZTxD6RI/AAAAAAAAHgY/xdexOHDP1ZM/s640/rpi-ups-server-106.png

如果我們需要同時管理多台 UPS的話,在這邊加入多個 IP 位址的設定值即可。

如果我們用的是 x64 的版本,NOTIFYCMD 的路徑也要改,把「Program Files」改成「Program Files (x86)」。
NOTIFYCMD "C:\\Program Files (x86)\\WinNUT\\alertPopup.exe"
https://1.bp.blogspot.com/-zVENeqitlRw/VWdBZqb6RBI/AAAAAAAAHgg/621hL-ulLj8/s640/rpi-ups-server-107.png

儲存設定值之後,點選「Apply and Start WinNUT」,Status 就會變成「Running as Application」。
https://3.bp.blogspot.com/-TzA2JpCutHY/VWdBZzi9c8I/AAAAAAAAHgk/QMrqAoYjDC4/s640/rpi-ups-server-108.png

這邊還有一些選項可以調整:

[*]Event Log - 設定 Log 檔記錄的錯誤訊息等級。
[*]Install As Service - 把 WinNUT 轉成背景服務的運作模式,自動執行。
[*]Upsd Port - Server 端的監聽通訊埠。
[*]Use Timed Shutdown - 斷電後自動關機,設定斷電幾秒之後關機,以及關機的模式。

我們一樣把市電的插頭拔掉,就會跳出一個對話框,顯示「UPS on battery」。
https://4.bp.blogspot.com/-S5mWsX9Ba3M/VWdBZ7XTylI/AAAAAAAAHgo/mR21t4K1Kug/s400/rpi-ups-server-109.png

再把插頭接上,對話框就會顯示「UPS on line power」了。
https://3.bp.blogspot.com/--R4fWX5diCU/VWdBaFdAdVI/AAAAAAAAHg4/7t486Qrf65M/s400/rpi-ups-server-110.png

Windows NUT Client這一套的畫面比較漂亮,但是設定值相對少很多,安裝也沒什麼好說的,同樣是無腦 Enter 安裝法。
https://3.bp.blogspot.com/-Rt9B8CjlwEA/VWdBaovPPKI/AAAAAAAAHg8/pcC6GZkW-6s/s640/rpi-ups-server-131.png

進到主畫面之後,先點選「Settings」。
https://2.bp.blogspot.com/-L1qIBS4CJ9M/VWdBasrTxdI/AAAAAAAAHhA/UMRllBJz-Ng/s640/rpi-ups-server-132.png

在「Connection」頁籤,設定好 Server 端的 IP、通訊埠、名稱,「Re-establish connection」打勾。




liruisheng 发表于 2016-8-19 23:11:23

正想找个相关教程啊...感谢啊

darkorigin 发表于 2016-8-20 00:56:37

netfun2000 发表于 2016-8-13 19:10
我是用树莓派做的UPS服务器,Esxi(Gen8)、白裙、黑群通过网络与UPS服务器(树莓派)通信,UPS连接到树莓 ...

感觉你这个搞法,成本很高
首富家有卖拆机的外置UPS监控卡。100多貌似就搞定了。可以给内网的所有机器群发断电的消息。

oldthree6289 发表于 2016-8-20 15:09:32

树莓派 是什么

a201314 发表于 2016-9-6 16:18:01

厉害,mark一下。

loonyd 发表于 2016-10-26 09:59:11

netfun2000 发表于 2016-8-13 20:12
AX206做的显示监控。

这个监控比较吊。

loonyd 发表于 2016-11-3 15:35:03

这样还要个树莓派才可以,有没有更好的方案呢?
页: [1]
查看完整版本: 用树莓派做不间断电源服务器(UPS Server)