original in en Atif Ghaffar
en to nl Tom Uijldert
Atif is een kameleon. Hij veranderd van rol, van systeembeheerder naar programmeur naar leraar
naar projectleider, al naar gelang het werk vereist.
Atif is van mening dat hij veel aan Linux en de open source
gemeenschap met zijn projecten te danken heeft vanwege de leerzame ervaringen.
Je kunt meer over hem vinden op zijn homepage.
De mensen van SGI hebben een prima keuze gedaan door het op Linux te zetten en er open source van te maken.
Als geld geen rol speelt zou ik voor GFS (Global File System)
of een op SAN gebaseerde
oplossing gaan maar als kosten een belangrijke overweging zijn en je wilt toch data spiegelen
dan zijn er weinig keuzes.
Ik heb een aantal keuzes hier op een rij. In dit artikel zullen we ze bespreken en de voor- en
nadelen bekijken.
Als we echter data van bestandsservers beschikbaar maken over NFS of SMB dan creëren we een knelpunt en een single point of failure (één foutgevoelige plek of achilleshiel in het systeem).
Als we data over GFS delen met gedeelde opslag (SAN of Multichannel SCSI) dan is de doos voor opslag hier de Achilleshiel en bovendien is het heel duur om een dergelijk systeem op te zetten.
We kunnen NBD (Network Block Devices) gebruiken om via het netwerk data te kopiëren, maar ik ben niet gecharmeerd van een dergelijke oplossing. NBD's hebben hun beperkingen, zijn moeilijk te implementeren en onderhouden en gewoon te veel moeite als je alleen maar wat webserver data over verschillende webservers wil kopiëren.
Hier nog een ander scenario
Je hebt één FTP server voor het deponeren van data en zes webservers die om
de beurt de rest van het verkeer afhandelen.
De data op iedere machine moet dan hetzelfde zijn. Je kunt hier voor een korte tijd met NFS
wegkomen als je geluk hebt, maar dat zal niet lang duren.
Dus, wat moeten we doen?
Ik denk dat het antwoord als volgt is: "Kopieer alleen die data naar de webservers die
veranderd is". En data die niet veranderd is kopieer je niet.
Dat zullen we nu precies gaan doen met "FAM".
Polling: het regelmatig vergelijken van datum en grootte van bestanden met oudere versies is een dure oplossing. Stel je maar eens voor dat je webserver iedere 5 seconden het commando "ls -lR/eendirectory" uitvoert :)
De elegante oplossing zou zijn dat het bestand ons vertelt wanneer het is veranderd, zodat we daarop actie kunnen ondernemen. Dat is nou precies wat "IMON" voor ons doet.
$ cd /usr/src/linux $ patch -p < patchbestand
Voer nu $ make config of $ make menuconfig uit en kies de
volgende optie: inode Monitor (imon) support (EXPERIMENTAL) in het
Filesystems-gedeelte.
Compileer de kernel opnieuw en herstart (sorry) de machine.
Het compileren van FAM is eenvoudig. Doe een cd naar de broncode en geef het
commando $ ./configure && make all install. Ziedaar, alles geïnstalleerd.
Vervolgens installeren we een Perl-module met de naam SGI::FAM, zodat we het geheel in Perl kunnen schrijven.
Haal SGI::FAM (door Jesse N. Glick) van het net en installeer het. Voer de CPAN module uit om dit te installeren, als volgt:
$ perl -MCPAN -e shell $ install SGI::FAMHiermee zou SGI::FAM en verdere relevante modules geïnstalleerd moeten zijn.
En nu terug naar scenario 1
2 machines als webservers (web1 en web2). Eén als primaire server (web1) en de andere
als reserve (web2). Primaire FTP-server is web1. web2 doet niet aan FTP (anders gaan
gebruikers ook bestanden schrijven terwijl het systeem op z'n reserve draait).
Het startdocument op het web is voor beide machines /var/www.
Configureer rsh of ssh op beide machines. web2 moet
toestemming verlenen aan web1 om van afstand commando's te kunnen geven zonder dat er
een wachtwoord nodig is. Meestal doe ik dat door mijn ssh_key toe te voegen
aan de authorized_keys van replicaHosts.
Doe een rsync van alle data van web1 naar web2:
$ rsync -avz /var/www web2:/var/wwwVerander fam_mirror door
@replicaHosts
te vervangen
door @replicaHosts=qw(web2);
.
$ fam_mirror /var/www &en wijzig vervolgens bestanden op web1. Deze veranderingen zullen ook door worden gevoerd op web2.
En nu dan scenario 2 (een aantal webservers).
We hebben machines "linuxweb1", "linuxweb2", "linuxweb3" en
"linuxweb4" als webservers. Machine "linuxftp1" is de ftp server (primaire
bestandsserver). De webmachines staan geen ftp toe aan gebruikers.
Installeer fam, imon, SGI::FAM en fam_mirror op de
"linuxftp1" machine. Configureer vervolgens rsh of ssh
voor alle machines.
linuxweb[1-4] moeten daarbij linuxftp1 toestemming verlenen om commando's op hun machines
uit te voeren zonder het ingeven van een wachtwoord.
Wijzig fam_mirror en laat @replicaHosts
verwijzen naar:
@replicaHosts=qw(linuxweb1 linuxweb2 linuxweb3
linuxweb4);
.
Wijzig $rsh en $rsync
indien nodig. Aannemende dat het
startdocument wederom in /var/www is te vinden op alle machines, geef het
volgende commando op linuxftp1:
$ INIT_MIRROR=1 fam_mirror /var/www &
Alle veranderingen op linuxftp1 zouden nu te zien moeten zijn op linuxweb[1-4].