Een Hardwarematige waakhond en shutdown knop
ArticleCategory: [Choose a category, do not translate this]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or http://homepage]
original in en Guido Socher
en to nl Guus Snijders
AboutTheAuthor:[A small biography about the author]
Guido houdt van Linux omdat het altijd weer interessant is om te ontdekken
hoe computers in werkelijkheid in elkaar zitten. Met zijn modulariteit en
open ontwerp is Linux het beste systeem voor zulke avonturen.
Abstract:[Here you write a little summary]
In het "LCD controlepaneel artikel"
werd beschreven hoe je met een LCD schermpje, gebaseerd op een
kleine microcontroller, enorme mogelijkheden kreeg. Soms heb je echter niet
al die mogelijkheden nodig. De hardware die we in dit artikel ontwerpen is
een stuk goedkoper en heeft 2 belangrijke mogelijkheden van het LCD paneel:
- Een knop om de server af te sluiten
- Een watchdog (waakhond) om de server in de gaten te houden
De hardware bestaat uit onderdelen die overal verkrijgbaar zijn. Je zult
weinig problemen hebben om aan deze onderdelen te komen. Alles bij elkaar
kosten ze zo'n 5 Euro.
ArticleIllustration:[This is the title picture for your article]
ArticleBody:[The article body]
Wat is een watchdog?
Een watchdog in computer termen is een stukje zeer betrouwbare hardware dat
ervoor zorgt dat de computer altijd draait. Dergelijke apparaten kun je bijv.
ook vinden in de Mars Pathfinder (wie wil er nu een astronaut naar Mars sturen
om de reset knop in te drukken?) en in sommige extra dure servers.
Het idee achter zo'n wachtdog is heel eenvoudig: De computer moet zo af en toe
"hallo" zeggen tegen de watchdog, om deze te laten weten dattie er nog steeds
is. Als dit niet ontvangen wordt, zal de watchdog de computer hardwarematig
resetten.
Merk op dat een normale Linux server in staat zou moeten zijn om enkele
maanden ongestoord te draaien, gemiddeld waarschijnlijk zo'n 1-2 jaar, zonder
vast te lopen. Als je in het bezit bent van een machine die iedere week
'hangt', dan is er iets anders mis, en is een watchdog niet de oplossing. Je
zou moeten testen op defect geheugen (zie memtest86.com ) overhitte CPUs, te lange
IDE kabels ...
Maar als Linux zó betrouwbaar is dat het makkelijk een jaar lang zonder
problemen kan draaien, wat moet je dan met een watchdog? Wel, het antwoord is
simpel: om het nog betrouwbaarder te maken. Er is echter ook een menselijk
probleem dat daaraan gerelateerd is. Een server die een jaar lang geen
problemen oplevert is niet zo bekend bij het onderhoudspersoneel. Als hij faalt, weet
niemand waar hij zich bevindt? Hij zou ook vlak voor Kerstmis kunnen
crashen, als iedereen al naar huis is. In zulke gevallen kan een watchdog erg
handig zijn.
Een watchdog lost echter niet alle problemen op. Het is geen bescherming
tegen defecte hardware. Als je een watchdog inbouwt in je server, zou je je
er ook van moeten verzekeren dat de server goed in elkaar zit (waarschijnlijk
niet met de laatste BIOS en chipset bugs, voldoende gekoelde hardware).
Gebruik van de watchdog
De watchdog die we hier ontwerpen, verzekert enkel dat programma's
die in user space draaien, er nog steeds zijn. Om een echt betrouwbaar
systeem te hebben, zul je nog steeds je applicaties (web-servers, databases)
en systeembronnen (schijfruimte, eventueel CPU-temperatuur) moeten
monitoren. Je kunt dit doen met andere user space applicaties (crontab). Dit
alles is reeds beschreven in het LCD controlepaneel artikel, daarom zal
ik hier niet verder ingaan op de details.
Voorbeelden? Hier is
een klein scriptje dat netwerk, swap en schijfruimte kan monitoren.
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
export PATH
#
# Monitor the disk
# ----------------
# check if any of the partitions are more than 80% full.
# (crontab will automatically send an e-mail if this script
# produces some output)
df | egrep ' (8.%|9.%|100%) '
#
# Monitor the swap
# A server should normally be dimensioned such that it
# does not swap. Swap space should therefore be constant
# and limited.
# ----------------
# check if more than 6 Mb of swap are used
swpfree=`free | awk '/Swap:/{ print $3 }'`
if expr $swpfree \> 6000 > /dev/null ; then
echo "$0 warning! swap usage is now $swpfree"
echo " "
free
echo " "
ps auxw
fi
#
# Monitor the network
# -------------------
# your _own_ IP addr or hostname:
hostn="linuxbox.your.supercomputer"
#
if ping -w 5 -qn -c 1 $hostn > /dev/null ; then
# ok host is up
echo "0" > /etc/pingfail
else
# no answer count up the ping failures
if [ -r /etc/pingfail ]; then
pingfail=`cat /etc/pingfail`
else
# we do not handle the case where the
# pingfail file is missing
exit 0
fi
pingfail=`expr "$pingfail" "+" 1`
echo "$pingfail ping failures"
echo "$pingfail" > /etc/pingfail
if [ $pingfail -gt 10 ]; then
echo "more than 10 ping failures. System reboot..."
/sbin/shutdown -t2 -r now
fi
fi
# --- end of monitor script ---
Je zou dit kunnen combineren met een crontab entry die het script elke 15
minuten start:
1,15,30,45 * * * * /waar/het/script/staat
De watchdog hardware
Er is niet zoiets als een standaard relais. Iedere fabrikant heeft z'n eigen
ontwerp. Voor onze schakeling is het vooral belangrijk wat de interne
weerstand van de spoel is. Daarom vind je hieronder 2 schakelingen, een voor
een 5V, 500 Ohm relais en een voor een 5V, 120 Ohm relais. Voordat je een
relais aanschaft, vraag eerst naar de impedantie van het relais of meet het
met een Ohmmeter. Je kunt het schema aanklikken voor een groter plaatje.
120 Ohm relais:
500 Ohm relais:
De shutdown (afsluit) knop is een drukknop die, wanneer ingedrukt, RTS en CD
verbindt. Het staat een beetje vreemd in het schema, maar dat is omdat Eagle
geen beter symbool heeft.
Ik heb geen onderdelen lijst opgenomen in dit artikel. In het bovenstaande
schema kun je zien wat je nodig hebt (vergeet de DB9 connector voor de
seriële lijn niet). Voor de diodes kunt u een willekeurige diode gebruiken, bijvoorbeeld
een 1N148. Persoonlijk vind ik dat de schakeling met het 500 Ohm relais
de beste is, omdat je geen R4 en een 2000uF (of 2200uF) condensator nodig
hebt. Je kunt een kleinere 1000uF condensator gebruiken voor C1.
Merk op dat je voor de 120 Ohm schakeling een rode LED nodig hebt, en voor
het 500 Ohm relais een groene LED. Dit is geen geintje. Het verlies in
voltage over een groene LED is hoger dan over een rode LED.
De Layout van de printplaat, Eagle bestanden en postscript bestanden voor het
etsen van de print, zijn opgenomen in het software pakket welke je aan het
eind van het artikel kunt downloaden. De Eagle CAD software voor Linux is
beschikbaar op cadsoftusa.com.
Hoe de schakeling werkt
De watchdog schakeling is opgebouwd rond een NE555 timer chip. Deze chip
bevat 2 verglijkingscircuits (comparators, oftewel OpAmp), een Flipflop en 3
weerstanden van 5K Ohm, om een referentie te hebben voor de
verglijkingscircuits. Zodra pen 6 (genaamd threshold), boven 2/3 van de
stuurspanning komt, wordt de Flipflop gezet (status: aan).
Nu een blik op het schema van onze schakeling: we gebruiken de RTS pen voor
de voedingsspanning. De voltages op de seriële lijn RS232 zijn +/- 10V, daarom
gebruiken we een diode voor condensator C1. De condesator C1 laadt erg snel,
en dient als energie-opslag om het relais in staat te stellen de schakelaar
voor een moment in te schakelen.
Condensator C2 laadt erg langzaam over de 4.7M Ohm weerstand. De transistor T1
ontlaadt de condensator C2, als het een korte puls ontvangt via de RS232 DTR
pen. Als de puls niet komt (omdat de computer vastgelopen is), zal condensator
C2 uiteindelijk (na zo'n 40 seconden), geladen worden tot boven 2/3 van de
voedingsspanning en de Flipflop gaat 'aan'.
De condensator C1, weerstand R2, de LED en het relais moeten zo geplaats worden
dat het relais kort wordt ingeschakeld. De energie wordt opgeslagen in
condensator C1, maar er is echter niet voldoende stroom om het relais de hele
tijd ingeschakeld te laten. We willen dat de "reset knop" zo'n 2 seconden
lang wordt ingedrukt.
De LED zal aanblijven tot de server weer opkomt na een reset.
Zoals je kunt zien in het schema, is er ook een "shutdown" knop aangesloten
op pen CD. Als je het een korte tijd indrukt (15 sec), zal de driver software
het commando "shutdown -h now" uitvoeren en de server afsluiten. Dit is voor
normale onderhoudswerkzaamheden en heeft niets te maken met de watchdog.
De driver software
De driver software is een klein C programma dat gestart kan worden vanuit
de /etc/init.d/ scripts. Het zal de RS232 pen RTS permament inschakelen en
dan iedere 12 seconden een puls sturen naar DTR (de timeout van de watchdog
is 40 seconden). Als je je computer normaal afsluit, zal het programma RTS
uitschakelen en een laatste puls sturen naar DTR. Het effect is dat de
voedings condensator (C1) al ontladen zal zijn voor de timeout is bereikt.
Hierdoor zal de watchdog tijdens normale operaties niet ingrijpen. Om de
software te installeren, moet je het bestand linuxwd-0.3.tar.gz uitpakken.
Deze is te vinden op
de download pagina. Decomprimeer het
en gebruik de commando's
run
make
om te compileren. kopiëer de resulterende linuxwd executable naar
/usr/sbin/linuxwd. Bewerk het meegeleverde linuxwd_rc script (voor
Redhat/Mandrake, of linuxwd_rc_anydist voor iedere andere distro) en voer
de juiste seriële poort in, waar de harware op is aangesloten (ttyS1=COM2,
ttyS0=COM1). Kopieer het rc script dan naar
/etc/rc3.d/S21linuxwd
en
/etc/rc5.d/S21linuxwd
Dat is alles.
Testen
Als je alles in elkaar gesoldeerd hebt, zou je de schakeling eerst moeten
testen, alvorens het aan te sluiten op de computer. Verbind de pen die later
op de RTS lijn van de seriële poort komt, met een 9-10V DC adapter, en wacht
40-50 seconden. Je zou een zachte klik moeten horen als het relais wordt
ingeschakeld en de LED zou aan moeten gaan. Het relais zou niet permanent aan
moeten blijven. De LED zal aanblijven, totdat je ook de pen, die later
met DTR verbonden wordt, op +10V aansluit.
Als je hebt gecheckt dat dit werkt, kun je hem aansluiten op de computer. Het
linuxwd programma heeft een test modus, waarin het een paar printouts produceert
en na een bepaalde tijd stopt met het zenden van pulsen naar DTR, om een
'hangend' systeem te simuleren. Gebruik het commando
linuxwd -t /dev/ttyS0
om linuxwd in testmodus te draaien (gebruik /dev/ttyS1 als je hardware aan COM2
hebt hangen).
Hardware installatie
De RS232 interface heeft de volgende pen layout:
Figuur: 9 PIN D-SUB MALE op de Computer.
9 PIN-connector |
25 PIN-connector |
Naam |
Richting |
Beschrijving |
1 |
8 |
CD |
input |
Carrier Detect (signaal zoeken) |
2 |
3 |
RXD |
input |
Receive Data (data ontvangen) |
3 |
2 |
TXD |
output |
Transmit Data (data versturen) |
4 |
20 |
DTR |
output |
Data Terminal Ready (gereed) |
5 |
7 |
GND |
-- |
System Ground (aarde) |
6 |
6 |
DSR |
input |
Data Set Ready (data gereed) |
7 |
4 |
RTS |
output |
Request to Send (verzoek te zenden) |
8 |
5 |
CTS |
input |
Clear to Send (klaar om te zenden) |
9 |
22 |
RI |
input |
Ring Indicator (bel indicator) |
Het aansluiten van de schakeling op de RS232 zou voor zich moeten spreken. Om
de CPU reset lijn te verbinden met het relais, moet je de draden zoeken die
naar de resetknop van je computer leiden. Sluit het relais van ons circuit
paralel naar de reset knop.
Conclusie
Een watchdog is zeker geen 100% garantie op een betrouwbaar systeem, maar het
voegt wel een niveau van beveiliging toe. Een situatie die problemen kan
opleveren, is wanneer de controle van het bestandssyteem (fsck) niet volledig
is na een hardware reset. De nieuwe journaling filesystems zouden hier een
uitkomst kunnen bieden, maar deze heb ik nog niet uitgeprobeerd. De watchdog
die hier gepresenteerd is is goedkoop, niet te complex om te bouwen, en bijna
even goed als de meeste commerciële producten.
Referenties