Een Hardwarematige waakhond en shutdown knop

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Guido Socher]

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:
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]

[Illustratie]

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:

[120 Ohm relais]
500 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).
[ne555]
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:
9 PIN D-SUB MALE

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