UPS - pripojenie v Linuxe

Z CVTI SR | SVS BB | Školská wikiencyklopédia
Skočit na navigaciSkočit na vyhledávání

V tomto prípade konkrétne pripojenie UPS APC Power-Saving Back-UPS ES 550VA - green CyberFort k Linuxu

Ups.jpg

Prvé zapnutie

Pred prvým zapnutím je potrebné otvoriť spodný kryt a pripojiť jeden z pólov batérie, ktorý je z dôvodu bezpečnosti a ochrany batérie počas prepravy, odpojený. Pred prvým použitím nechajte UPS-ku nabíjať aspoň 16 hodín, aby batéria dosiahla stav 100%-ného nabitia a aby v prípade výpadku elektriny záložný zdroj splnil svoju funkciu.

Pripojenie k serveru

UPS APC Back-UPS ES 550 G som pripojil k linuxovému serveru so systémom Ubuntu 9.04 Jaunty. K UPS-ke je dodávaný komunikačný kábel, na jednom konci s konektorom typu RJ, na druhom s USB konektorom.

Na zadnej stene záložného zdroja sa nachádzajú 3 konektory typu RJ.
Do horného konektora, označeného Data Port, pripojíme komunikačný kábel, a druhý koniec kábla pripojíme do USB linuxového servera.
K UPS-ke zatiaľ nepripájajte žiadny spotrebič.
Pripojené USB zariadenia v liunuxe zistíme príkazom lsusb
Ak výstup príkazu lsusb vyzerá podobne ako nasledovný príklad:

Bus 002 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

a vo výpise nájdeme našu UPS-ku, tak si môžeme byť istí, že systém zariadenie správne rozoznal, a že UPS-ka bude schopná komunikovať s linuxom.

Ups-ports.pngKabel.jpg

Softvér a konfigurácia

Pri inštalácií som mal na výber z dvoch možností. Buď som mohol použiť Network UPS Tools (NUT) alebo APC UPS daemon (apcupsd).
Nakoľko som NUT mal už nainštalovaný, ako dedičstvo po predchádzajúcej UPS-ke (MGE Ellipse 800), tak som sa rozhodol, že použijem tento balík.

Pre tých, ktorí nemajú tento balík vo svojom systéme nainštalovaný, len pripomeniem postup inštalácie.

apt-get install nut nut-usb

Ak inštalácia prebehla úspešne, začneme s konfiguráciou:
v súbore /etc/default/nut povolíme spustenie ups daemona a monitora:

START_UPSD=yes
START_UPSMON=yes

v súbore /etc/nut/nut.conf nastavíme:

MODE=standalone

v súbore /etc/nut/ups.conf nadefinujeme meno UPS, driver a port:

[APC550ES]
driver = usbhid-ups
port = auto

V nasledovnej tabuľke si pozrite zoznam podporovaných zariadení a driverov
Pre USB použijeme port nastavený na auto, ale ak máme UPS-ku so sériovým RS232 portom, potom parameter port nastavte na /dev/ttyS0.
(Pre MGE Ellipse 800 som mal nastavené: driver = mge-shut, port = /dev/ttyS0)

do súboru /etc/nut/upsd.conf povolíme prístup iba z lokálneho servera:

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACCEPT localhost
REJECT all

v súbore /etc/nut/upsd.users nadefinujeme používateľa upsd daemona, heslo, prístup iba z localhosta a UPS Monitor do režimu master:

[MonUPS]
password = xxyyzz
allowfrom = localhost
upsmon master

do /etc/nut/upsmon.conf doplníme:

MONITOR APC550ES@localhost 1 MonUPS xxyyzz master
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -h now"

Týmto máme ukončenú najzákladnejšiu konfiguráciu UPS-ky.
Spustíme nut:

/etc/init.d/nut start

Ak štart prebehne bez chybových hlásení, overme, či nut skutočne beží:

/etc/init.d/nut status

Ak sa objaví výpis:

Checking status of Network UPS Tools
* upsd is running
* upsmon is running

potom by malo byť všetko nastavené správne a môžeme si zobraziť stav UPS-ky príkazom:

upsc APC550ES@localhost

Mal by sa objaviť výpis, podobný nasledovnému:

battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: not set
battery.mfr.date: 2009/09/23
battery.runtime: 840
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 13.5
battery.voltage.nominal: 12.0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.4.1
driver.version.data: APC HID 0.93
driver.version.internal: 0.34
input.transfer.high: 266
input.transfer.low: 180
input.voltage: 232.0
input.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 870.O1 .I
ups.firmware.aux: O1
ups.load: 42
ups.mfr: APC
ups.mfr.date: 2009/09/23
ups.model: Back-UPS ES 550G
ups.productid: 0002
ups.serial: 3Q0846Z16736
ups.status: OL
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d

Význam jednotlivých premenných a viac informácií nájdete na stránkach, s ktorých som čerpal pri zapájaní tejto UPS-ky.

Vypneme linux (halt, shutdown -h now), a napájací kábel servera pripojíme do UPS-ky.
POZOR! Zariadenia, ktoré majú byť zálohované z batérie, musia byť pripojené do tých správnych zásuviek.
Pozorne si skontrolujte kam pripájate server.
Označenie nájdete na hornom kryte UPS-ky

Teraz normálne rozbehnite server, všetko by sa malo samé rozbehnúť bez zásahu človeka, prípadne sledujete výpis pri štarte.

Ak systém nabehne, znova skontrolujte či nut beží, poprípade výpis premenných UPS-ky.

Ak je všetko v poriadku, a nut sa rozbehol, ešte trocha testujme.

Test UPS

Aby sme sa presvedčili, že UPS-ka a nut spolupracujú, tak na krátku dobu odpojme napájací kábej UPS-ky od 220V, tak aby zostal server bežať na batériu. Ak sa UPS-ka prepla na batériu, a linuxový server beží ďalej, je zatiaľ všetko správne.

Po odpojení UPS-ky od 220V, by sa mal ozvať 3 násobný zvukový signál a zároveň na termináli linuxu sa objaví upozornenie:

Broadcast message from nut@server.domena.sk
(somwhere) at 9:17 ...
UPS APC550ES@localhost on battery

Nechajte server chvíľu bežať na batériu a otestujte, ako sa postupne vybíja batéria príkazom:

upsc APC550ES@localhost

Všimnite si pokles v položke battery.charge, a zmenu v položke ups.status OB DISCHRG.

Teraz znova pripojte UPS-ku k napätiu 220V, čo bude signalizované 3 pípnutiami a výpisom na terminál:

Broadcast message from nut@server.domena.sk
(somwhere) at 9:18 ...
UPS APC550ES@localhost on line power

Týmto testom sa batéria mierne vybila, preto nechajme všetko bežať niekoľko hodín, do úplného nabitia batérie.
Nakoniec môže nasledovať test korektného vypnutia servera a výdrže batérie.
Tento test je jednoduchý, pripravte si stopky (stačia aj hodinky), odpojte UPS od 220V a zároveň spustite stopky.
Počkajte, či bude server korektne vypnutý, ak áno, sledujte čas, aby ste mali predstavu, aké dlhé výpadky siete je UPS-ka schopná zálohovať.

Výsledky testov

V nasledovnej tabuľke uvádzam výsledky mojich testov a meraní. Ako som testoval ? Postupne som pripájal k UPS-ke stále viac spotrebičov. Po každom pripojení som nechal bežať UPS na batériu, a zisťoval som cez upsc hodnoty. Po každom jednom meraní som nechal batériu dobiť a ďalšie meranie som urobil až vtedy, ak batéria dosiahla stav nabitia 100%.

Číslo Spotrebiče Záťaž UPS [%] Výkon záťaže [W] Výdrž batérie [sek.] Výdrž batérie [min.]
1 router 1 3,3 2655 44,25
2 router + switch + linux server 25 82,5 1252 20,87
3 router + switch + linux server + PC WinXP 42 138,6 840 14,0

Na záver tohoto testu len dodám, že namerané hodnoty približne zodpovedajú údajom výrobcu a namerané časy, vzhľadom na 4 pripojené spotrebiče, sú pre naše použitie dostačujúce.

Monitorovanie UPS cez web

Jednoduchý výpis cez php

Aby sme mali prehľad o tom, ako sa správa UPS-ka, v akom stave je batéria, potrebujeme nástroj na sledovanie jej stavu.
Samozrejme, že stav UPS je možné zistiť kedykoľvek, keď ste prihlásení na terminál a zadáte príkaz upsc APC550ES@localhost
Aby ste sa ale nemuseli zakaždým prihlasovať, a beží na Vašom serveri aj webový server s podporou php, potom môžete použiť tento php skript a pomocou neho zistiť stav UPS kedykoľvek a kdekoľvek, cez web. Stačí rozbaliť a nakopírovať tento skript niekam do webového adresára servera napr. do /var/www/. Potom ešte treba v skripte v premennej $UPS nastaviť presné pomenovanie Vašej UPS-ky, teda to meno, ktoré ste zadali v súbore /etc/nut/ups.conf.
V našom príklade bude premenná

$UPS = 'APC550ES@localhost';

Potom už len nasmerujte webový prehliadač na tento súbor a máte výpis stavu UPS-ky.
Tento php skript využíva rovnaké systémové príkazy ako upsc, takže výstup na webovej stránke vyzerá prakticky rovnako, ako na termináli.
Môžete ho ľubovoľne modifikovať a potom mi ho vylepšený poslať :-)

Grafické zobrazenie stavu UPS cez nut-cgi

Ak potrebujete zobraziť stav UPS-ky graficky, použite balík nut-cgi
Príklad výstupu nut-cgi je na nasledovných obrázkoch:

Upsstatsthumb.png Upsstats2thumb.png

Nainštalujte cez apt-get balík nut-cgi:

apt-get install nut-cgi

V adresári /etc/nut pribudli 4 súbory s príponou sample:

hosts.conf.sample
upsset.conf.sample
upssats-single.html.sample
upsstats.html.sample

Premenujte všetky tieto súbory tak, aby nemali príponu "sample", teda na:

hosts.conf
upsset.conf
upssats-single.html
upsstats.html

Potom v súbore /etc/nut/hosts.conf nastavíme meno našej UPS-ky, doplňte riadok:

MONITOR APC550ES@localhost "APC Back-UPS ES 550"

Len pripomeniem, že v nastavení webového servera Apache, musíte mať povolené spúšťanie cgi skriptov.

Teraz nasmerujte Váš webový prehliadač na URL:

http://www.vasadomena.sk/cgi-bin/nut/upsstats.cgi

Viac počítačov na jednej UPS

Nasledovný postup som použil na linuxový server a počítač s OS WindowsXP Pro, obidva napájané z jednej UPS-ky.

Naša UPS-ka má 4 zálohované výstupy. Preto potrebujeme, aby všetky počítače pripojené do zálohovaných výstupov boli korektne vypnuté. Záložný zdroj má ale iba jeden USB komunikačný kábel. Aby sme mohli z jednej UPS-ky korektne vypnúť viac počítačov, využijeme, že daemon upsd bežiaci na linuxe, môže cez Ethernet komunikovť s NUT klientami na porte TCP/UDP 3493.

Najprv povolíme lokálne použitie tohoto portu na firewalle.
Popíšem postup pre Bastille-firewall:

V súbore /etc/Bastille/bastille-firewall.cfg nájdite riadky:

TCP_INTERNAL_SERVICES=" tu je zoznam povolených služieb a dopíšte na koniec sem iba nut"
UDP_INTERNAL_SERVICES=" tu je zoznam povolených služieb a dopíšte na koniec sem iba nut"

Potom reštartujeme firewall:

/etc/init.d/bastille-firewall restart

Teraz musíme povoliť prístup k daemonovi upsd z ostatných počítačov. Ako príklad uvediem, IP adresu Windows počítača 192.168.0.3

Súboru /etc/nut/upsd.conf upravíme nasledovne, povolíme prístup z IP adresy windowsového počítača:

LISTEN 192.168.0.3 3493
LISTEN localhost 3493
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL windows 192.168.0.3/32
ACCEPT localhost
ACCEPT windows
REJECT all

Do súboru /etc/nut/upsd.users povolíme prístup s počítača windows, dpoíšeme len windows do riadku allowfrom:

allowfrom = localhost windows

Teraz reštartujme nut:

/etc/init.d/nut restart

Týmto máme na strane servera nastavené všetko, môžeme nastaviť NUT klienta vo windows
Najprv stiahneme winnut15.zip Windows NUT Client
Súbor winnut15.zip rozbaľte do C:\Program Files\ do adresára winnut15. Zatiaľ program nespúšťajte. Ešte je potrebné pridať výnimku pre tento program vo Windows Firewalle. Teraz môžeme C:\Program Files\winnut15\upsclient.exe spustiť.
Po spustení prejdite na Settings a na záložke Connection nastavte IP adresu Vášho linuxového servera, na ktorom beží nut daemon upsd, port 3493 a meno vašej UPS-ky, teda APC550ES.
Na záložke Calibration som ešte upravil hodnotu Battery Voltage na Max 15 voltov.
Na poslednej záložke Misc zaškrtnite Minimize to tray a nastavte vypínanie UPS napr pri 70% nabitia batérie (Shutdown if battery lower then 70%), aby sa Windows počítač vypol skôr, ako linuxový server a tým ušetril energiu pre server a aby sa predĺžil čas behu servera na batériu.
Nakoniec dajte Apply a OK. Potom ešte z hlavnej ponuky vyberte Coneection/Reconnect.
V priebehu niekoľkých sekúnd by sa mal objaviť rovnaký výsledok, ako na nasledovnom obrázku:

Winnutclientmini.png

Ak program WinNutClient ukazuje, že je pripojený k UPS-ke, zobrazuje hodnoty a dole v stavovom riadku vypisuje Connection Established, potom je všetko nastavené správne. Ešte dodám, že s UPS APC Back-UPS ES 550G program WinNutClient nezobrazuje vstupnú frekvenciu a výstupné napätie.
Ostatné hodnoty zobrazuje správne.

Ešte otestujeme, či nám WinNutClient korektne ukončí prácu systému WindowsXP pri výpadku elektriny. Pri teste som postupoval nasledovne:
V nastaveniach WinNutClient som nastavil Shutdown if battery lower then 99%.
Odpojil som UPS-ku od 220V a o niekoľko sekúnd sa WindowsXP korektne vypol, pričom linuxový server bežal na batériu ďalej.

Ak test dopadol pozitívne, vráťime hodnotu vypnutia na 70% a môžeme si program upsclient.exe pridať do ponuky Štart/Pri spustení.
Teraz sa nám bude pri výpadku elektriny korektne vypínať najprv počítač s OS WindowsXP a potom sa korektne ukončí aj beh linuxového servera.

Záver

Spomínaná UPS-ka patrí k tým najjednoduchším a lacnejším modelom, ale základnú úlohu, teda korektné ukončenie linuxového servera pri výpadku napájania, spĺňa za prijateľné náklady. Rovnako aj ceny náhradných batérií sa pohybujú na prijateľnej úrovni, a výmenu batérie zvládnete bez náradia a špeciálnych znalostí. Tento postup mám overený aj pre UPS MGE Ellipse 800, rozdiely v konfigurácií sú uvedené v zátvorkách.

Odkazy