| Dit artikel is beschikbaar in: English Castellano Deutsch Francais Nederlands Turkce |
![]() door 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 operating systeem 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 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 tweede vormen het privé-netwerk tussen beide machines voor heartbeat (udp-verkeer op eth1).
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 niet
httpd 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 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 alsof het een lokale schijf is.
Op dit moment gebruiken we GFS in een productie-omgeving met 8 machines waarvan 2 geconfigureerd voor hoge beschikbaarheid als boven omschreven.
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:
|
2001-02-02, generated by lfparser version 2.8