|
|
Dit document is beschikbaar in: English Castellano Deutsch Francais Nederlands Turkce |
door Atif Ghaffar <atif(at)developer.ch> Over de auteur:
Atif is een kameleon. Hij verandert van rol, van systeembeheerder naar
programmeur naar leraar naar projectleider, al naar gelang het werk vereist.
|
Kort:
Wanneer je aan het ontwerp van een kritisch systeem werkt, hetzij tijdens het uitdenken of bij het configureren van de hardware, moet je jezelf de volgende vragen stellen:
Als ik mezelf daarentegen afvraag "Zal het besturingssysteem het begeven?" dan is
het antwoordt altijd: Nee.
"You are not running 32 bit extensions for a 16
bit patch to an 8 bit operating system originally coded
for a 4 bit microprocessor, written by a 2 bit
company, that can't stand 1 bit of competition".
(deze aanhaling heb ik eens in een .sig gelezen).
Maar nu even serieus.
Voorbeelden van belangrijke applicaties die het bedrijf gaande houden:
De grote baas wil niet weten of er sprake is van een kapotte voeding of een falende netwerkkaart.
Het enige wat je baas, je collegae en klanten interesseert is dat de
"applicatie" beschikbaar is. Merk hierbij op dat ik
"applicatie" vet heb gedrukt.
Deze draait natuurlijk op een machine en het overzetten van een dergelijke applicatie met het
bijhorende dataverkeer is waar het allemaal om draait bij hoge beschikbaarheid.
Zij tikt http://intranet in in haar bladerprogramma en de DNS applicatie verwijst dit door naar adres 10.0.0.100 (voorbeeld IP-adres).
Wat dacht je ervan om de twee machines met een verschillend IP-adres uit te rusten en gewoon
de DNS applicatie te vragen om het tweede adres te gebruiken als de master node plat gaat?
Het is zeker een optie maar er spelen subtielere problemen zoals DNS caching op
machines van gebruikers en wellicht wil je deze applicatie zélf wel een hoge
beschikbaarheid op het cluster geven.
Een andere mogelijkheid is dat de backup node (of slave node) het IP-adres
overneemt van de master node wanneer deze plat gaat en begint met het verlenen van de
service. Dit heet IP takeover (IP adresovername) en dit is de methode die we zullen
gebruiken in onze voorbeelden.
Men zal dus nog steeds http://intranet benaderen, wat wordt vertaald naar
10.0.0.100, óók als de master node plat gaat en zónder
de instellingen van DNS te wijzigen.
heartbeat
" en is van het net te halen bij
http://www.linux-ha.org/download/.
fake
en is inbegrepen bij
heartbeat
.
Indien je geen extra netwerkkaart ter beschikking hebt voor de beide machines dan kan het ook via alleen de seriële kabel (null modem). Netwerkkaarten zijn echter goedkoop dus het is aan te bevelen om deze extra aanschaf toch te doen.
De eerste netwerkkaart op beide machines gebruiken we voor de toegang tot het Internet
(eth0), de twee secundaire (eth1) kaarten vormen het privé-netwerk
voor het heartbeat
(udp-)verkeer tussen de nodes.
Beide machines krijgen hun IP-adressen en namen, bijvoorbeeld op eth0 op
beide machines:
clustnode1 met IP-adres 10.0.0.1
clustnode2 met IP-adres 10.0.0.2
Vervolgens reserveren we een verhuisadres (waar we het al eerder over hebben gehad), te weten 10.0.0.100 (Intranet). Deze hoeven we nu nog niet aan een machine toe te wijzen.
Ook de tweede kaart moet voor beide machines worden geconfigureerd. Gebruik hiervoor
willekeurige andere IP-adressen die nog niet in gebruik zijn. Voor beide machines bijvoorbeeld op
eth1 met het masker 255.255.255.0:
clustnode1 met IP-adres 192.168.1.1
clustnode2 met IP-adres 192.168.1.2
Vervolgens sluiten we de seriële kabel aan op poort 1 of 2 van de machines en vergewissen ons ervan dat ze zo met elkaar kunnen communiceren (het is aan te raden op beide machines dezelfde poort te gebruiken, dat is makkelijker). Zie ook: http://www.linux-ha.org/download/GettingStarted.html
heartbeat
installerenWijzig het bestand /etc/ha.d/authkeys indien de configuratiebestanden in /etc/ha.d staan volgens onderstaand voorbeeld:
#/etc/ha.d/authkeys auth 1 1 crc #end /etc/ha.d/authkeysLater kun je
md5
of sha
gebruiken voor de verificatie
wanneer je een beetje gewend bent maar laat deze voor nu maar even op 1
staan.
Wijzig /etc/ha.d/ha.cf als volgt:
debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 deadtime 10 serial /dev/ttyS3 # wijzig in juiste poort en haal dit commentaar weg udp eth1 # verwijder deze regel als je geen tweede netwerkkaart gebruikt node clustnode1 node clustnode2Wijzig /etc/ha.d/haresources als volgt:
#masternode ip-address service-name clustnode1 10.0.0.100 httpdHierin staat nu dat de master node clustnode1 is. Wanneer deze plat gaat zal clustnode2 het overnemen, totdat clustnode1 weer in de lucht komt. Daarom gebruiken we een goede en een minder goede machine (clustnode1 is de goede machine).
Het tweede woord geeft het IP-adres wat over moet worden genomen en het derde geeft de
naam van de over te nemen applicatie.
Als de eerste machine de applicatie weer terugneemt zal deze proberen
$ /etc/ha.d/httpd startuit te voeren en als het deze niet kan vinden zal het
$ /etc/rc.d/init.d/httpd startproberen uit te voeren.
Idem als de tweede machine de applicatie weer wil teruggeven zal geprobeerd worden
$ /etc/ha.d/httpd stopuit te voeren. Indien het bestand niet wordt gevonden zal het op zoek gaan naar
$ /etc/rc.d/init.d/httpd stopWanneer je klaar bent met het configureren op clustnode1 kun je de configuratiebestanden naar clustnode2 kopiëren.
ip-request
die het
toekennen van IP-adressen enz. voor zijn rekening neemt.
httpd
server. Bijvoorbeeld op
clustnode1:
$ echo hallo, dit is clustnode1 >/jouWwwDocRoot/index.htmlen op clustnode2:
$ echo hallo, dit is clustnode2 >/jouWwwDocRoot/index.htmlVergewis je ervan dat op beide machines
httpd
niet standaard wordt aangeroepen tijdens
opstarten. Verwijder links uit de rc.N directories of, nog beter, verplaats het
httpd of apache opstartscript van
/etc/rc.d/init.d naar /etc/ha.d/rc.d.
Als alles correct is ingesteld en heartbeat
actief is dan zal
clustnode1 het adres 10.0.0.100 hebben en zal het
reageren op verzoeken tot httpd toegang. Probeer het een aantal keren en
verifieer de werking. Als alles goed lijkt te functioneren, stop dan clustnode1
en binnen 10 seconden zal clustnode2 de applicatie en het IP-adres over
nemen. De applicatie is dus maximaal 10 seconden niet beschikbaar.
httpd
wordt overgenomen vanaf machine 1 naar machine 2 dan verlies ik
alle data die ik met mijn CGI-scripts heb aangemaakt.
Twee oplossingen:
1. Schrijf nooit naar lokale bestanden vanuit CGI's (gebruik in plaats daarvan een
netwerkdatabase. MySQL is aan te bevelen).
2. Je kunt de twee machines aan centrale SCSI-opslag koppelen. Doe het zó dat je zeker
weet dat de twee machines de opslag nooit tegelijk benaderen en zorg er ook voor dat de SCSI-
identificatie op de kaart van beide machines niet dezelfde is (bijvoorbeeld een machine met
identificatie 6 en de andere met 7).
Ik heb dit uitgeprobeerd met Adaptec 2940 SCSI kaarten die je de
mogelijkheid geven de identificatie te veranderen. De meeste goedkope kaarten hebben die
mogelijkheid niet.
Sommige RAID-controllers worden verkocht als zijnde "cluster-bewust" maar vergewis
je ervan dat je de HOST-ID hiervan kunt veranderen zonder dat je de
Microsoft cluster kit hoeft te kopen.
Ik had twee NetRaid controllers van HP en deze ondersteunen Linux zeker
niet. Ik heb ze maar gemold om toch nog enig "waar voor m'n geld"-
gevoel te krijgen.
De volgende stap is om Fibrechannel (via glasvezel dus) kaarten te kopen, tezamen met een
Fibrechannel hub en Fibrechannel opslag om zo een klein SAN (Storage Area
Network) te bouwen. Dit is uiteraard duurder dan gedeelde SCSI maar een goede investering.
Hier overheen kun je GFS (Global File System, zie ook de referenties) draaien die
toegang geeft tot opslag voor alle machines als ware het een lokale schijf.
Op dit moment gebruiken we GFS in een productie-omgeving met 8 machines waarvan 2 geconfigureerd voor hoge beschikbaarheid zoals boven beschreven.
Hoe dan ook, je kunt dan serviceA aan clustnode1 toewijzen en serviceB aan clustnode2. Een voorbeeld van mijn haresources bestand:
clustnode2 172.23.2.13 mysql clustnode1 172.23.2.14 ldap clustnode2 172.23.2.15 cyrusIk gebruik GFS voor de opslag dus ik heb geen problemen met parallelle schijftoegang en kan dus zoveel applicaties op de machines draaien als ze aan kunnen.
|
Site onderhouden door het LinuxFocus editors team
© Atif Ghaffar, FDL LinuxFocus.org Klik hier om een fout te melden of commentaar te geven |
Vertaling info:
|
2002-06-08, generated by lfparser version 2.28