När lasten ökar på din server har du två alternativ för att inte gå i ­taket. Antingen slänger du ut den gamla servern och skaffar en nyare och snabbare eller så skaffar du en server till. Att byta till en nyare och häftigare modell kallas ofta för att ”skala upp”, medan att placera flera, billigare servrar bredvid varandra kallas att ”skala ut”. Att skala ut är i de flesta fall det mest kostnadseffektiva.

Problemet handlar bara om hur du ska sprida lasten mellan servrarna i din serverpool. Det naturliga är givetvis att skaffa en professionell lastbalanserare med tillhörande https-accelerator, men om budgeten är tajt kan du först prova round robin, snålvarianten av lastbalansering.

Principen är enkel.

Att ­förstå konsekvenser och ­

begränsningar är svårare

Principen bakom round robin är väldigt enkel. Att förstå konsekvenserna av det du gör och vilka begränsningar lösningen har kan vara betydligt svårare. Round robin innebär kortfattat att du i zon-filen för din domän har flera olika ip-adresser som pekar mot ett och samma namn. När dns, bind i det här fallet, börjar svara på namnförfrågningar kommer varje ny förfrågan att få nästa ip-adress i listan. När listan har nått sitt slut börjar bind om från början.

Installera bind


Agerar du redan dns för din domän har du bind installerat och zonfilen konfigurerad, men vill du först prova på en testmaskin kan det vara bra med en repetition. Bind installerar du genom att lägga till paketet som heter bind eller bind9, beroende på vilken Linuxdistribution du använder. Sökvägarna kan också skilja sig något från distribution till distribution.

Konfigurationsfilen heter ­named.conf och ligger på vår Ubuntu 9.10 i katalogen /etc/bind. Den filen ska du inte editera, du listar i stället innehållet med commandot cat named.conf. Då ser du att den inkluderar filen named.conf.local och det är där du ska definiera dina zoner (domäner). För domänen techworld.se lägger vi till raderna:

zone ”techworld.se” {
type master;
file ”db.techworld.se”;
};

Var noga med att avsluta raderna med semikolon. Får du problem med att starta bind kan du se i slutet av filen /var/log/messages vad som gick snett. De tjugo senaste raderna i loggen skriver du ut på skärmen med kommandot ”sudo tail -20 /var/log/messages”.

Därefter redigerar du zonfilen db.techworld.se som ska ligga i /var/cache/bind. Den ser ut som följer:

;
; BIND data file for techworld.se
;
$TTL 10800
@ IN SOA dns1.techworld.se. hostmaster.techworld.se. (
2009090901 ; Serial
43200 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dns1.idg.se.
@ IN NS dns2.idg.se.
@ IN MX 10 mail.idg.se.
@ IN MX 20 backupmx.idg.se.
www IN A 217.151.199.213
www IN A 217.151.199.214
www IN A 217.151.199.215
www IN A 217.151.199.216

Vi har hela fyra rader för domännamnet www.techworld.se, som var och en pekar på olika ip-adresser. Starta om dns-­servern med kommandot ”sudo /etc/init.d/bind restart” så att de nya inställningarna börjar gälla. Du bör också tänka på att användaren named bör ha rättighet att både läsa och skriva till dina zonfiler, eftersom processen inte körs med administrativa­ rättigheter.



När du har installerat bind med apt-get install bind9 går du in i /etc/bind/named.conf.local och definierar din zon.


Att installera round robin är enkelt. Om du redan har en zonfil för din domän behöver du bara lägga till multipla A-records för det domännamn du vill rotera. Se till att det finns en webb­server bakom varje ip-adress du specificerar.

Multiverktyg för dns


Nu kan du med verktyget nslookup verifiera att namnet www.techworld.se är upplagt i din dns på det vis du har specificerat. Nslookup är den schweiziska armékniven för att felsöka dns.

Skriv ”nslookup” följt av ­enter, så hamnar du i en prompt för att mata in kommandon. Tala först om att du vill arbeta mot den lokala dns-servern du har startad på din maskin 127.0.0.1, eller den ip-adress du nu har som dns-server. Skriv därefter in namnet du vill slå upp och avsluta med punkt. Sätter du inte punkt är risken överhängande att nslookup automatiskt lägger till det domännamn du har specificerat med ”domainname” och frågan blir helt fel. Skriv alltså in www.techworld.se., med punkt i slutet.

Har du gjort allting rätt bör du få tillbaka en lista som den du ser i bild 3 här intill Namnet www.techworld.se är kopplat till 217.151.199.214, 217.151.199. 215, 217.151.199.216 och 217. 151.199.217. Från nslookup ser allting okej ut och nu vill vi se att det även fungerar när vi pingar vår server från olika datorer.



När zonfilen är skapad startar du om dns-servern med /etc/init.d/bind9 restart och använder nslookup för att se att
www.techworld.se är mappad mot fyra olika ip-adresser.

Måste vara en ip-adress


Vill du temporärt, eller permanent, ställa om vilken server din dator använder för namnuppslagning på din Linuxmaskin gör du det i filen /etc/resolv.conf. Skriv in raden ”nameserver 127.0.0.1” och spara, så kommer din dator att göra sina namnuppslagningar mot localhost. Gör ­inte misstaget att skriva in ett ­datornamn för namnuppslagning. Här krävs det en ip-adress.

Gå därefter ut i kommandoprompten och skicka en ping till domänen med ”ping www.techworld.se”. Gör sedan om operationen, helst inte från samma maskin eftersom informationen är lagrad i minnet.



Avsluta med att pinga din domän från minst två olika maskiner och verifiera att ip-adressen inte är densamma.

Så rensar du cachen


Om du inte har någon annan dator tillgänglig för att göra testet rensar du dns-cachen i din dator och gör om förfrågan. På Linux har du några alternativ. På äldre maskiner startade du om tjänsten /etc/init.d/ncsd, men i dag ­används Network Manager. Du kan också starta om nätverket med /etc/init.d/network restart.

På en Windowsmaskin rensar du cachen med kommandot ipconfig /flushdns. Vill du stänga av cachen helt gör du det med kommandot net stop dnscache.

På Mac OS X gör du samma sak med kommandot dscacheutil -flushcache. Om din version är Mac OS X 10.5.1 eller tidigare är kommandot lookupd -flushcache.

Brister och fallgropar


Round robin har tyvärr en hel del begränsningar och fallgropar. Varje ny förfrågan kommer visserligen att få nästa ip-adress i din lista, men förfrågan kommer samtidigt att leva vidare hos den internetoperatör kunden som ställde frågan har. Det betyder exempelvis att din round robin-lösning i stort sett är värdelös om du bara har ­kunder som surfar via Telia.

Round robin är inte heller någon garanti för att lasten sprids jämnt över dina servrar i klustret. Statistiskt kommer du däremot att få en jämnare last ju fler maskiner du har i ditt kluster och ju fler internetoperatörer dina kunder kommer från.

Round robin går att använda för fler tjänster än enbart webb. Du kan exempelvis använda samma princip för att lastbalansera både e-post och ftp.

Ofta databas bakom


När det gäller lastbalanserade webblösningar finns även andra fallgropar som gäller för all lastbalansering, inte bara för round robin. I väldigt få fall utgörs din webbplats enbart av statiskt material. Ofta handlar det om system med en bakomliggande databas och där varje användare spåras med hjälp av ett sessionsnummer (session-id).

Behöver du bara hålla koll på inloggade användare när de är aktiva på sidan kommer du inte att få problem. Vill du däremot kunna upptäcka användaren om han eller hon återvänder om några dagar från samma webbläsare är det inte säkert att det fungerar. Då är det sannolikt att han eller hon har fått en ny adress från din dns. Lösningen är att lagra sessioner och kakor (cookies) i den bakomliggande databasen, alternativt på en utdelad nfs-partition, och hämta dem därifrån när en användare kopplar upp sig.

Statistiken kan också bli skev om du sköter den själv eftersom det är Apache som skriver loggarna och du har systemet installerat på flera maskiner. Använder du en extern tjänst från exempelvis Google är du inte berörd, men skriver du till egna loggar bör du lägga loggarna på en utdelad nfs-resurs. Den pekar du till från filen apache2.conf på respektive installation.

På utdelad resurs


För att underlätta administrationen av webbservrarna kan du lägga ut konfigurationsfilen för www.techworld.se på en utdelad resurs och sedan montera resursen från respektive webbserver du lägger till i klustret. Då behöver du bara administrera en fil på ett ställe och kan enklare lägga till fler maskiner i ditt kluster om du behöver högre prestanda.

Det problem som är svårast att lösa är databasen, som inte går att lastbalansera lika enkelt. Om du bara hämtar information från databasen är det ­möjligt att lastbalansera den med round robin. Behöver du däremot uppdatera eller lägga in nya poster måste du se dig om efter en annan lösning. Ett sätt är att bygga din webb­tillämpning på ett ­sådant sätt att du har en serie tabeller som kan distribueras över flera databaser och en serie tabeller som måste uppdateras. De går till en enda databas, som replikerar ut informationen till övriga databaser i takt med att den uppdateras.

TechWorlds slutsats


Att installera round robin är relativt enkelt, även om lösningen har begränsningar.

Har du en webbplats med besökare som kommer från olika internetoperatörer har du goda chanser att lyckas. Du bör också optimera webbplatsen genom att se till att databasen är optimerad och cachad i minnet samt ha en egen cache för webbsidor.

Hjälper varken round robin eller de optimeringarna, och det verkligen är anstormningen av besökare som får servern att gå på knäna, måste du antingen skaffa en häftigare server med flera processorkärnor eller investera i en lastbalanserare.

Illustration: Jonas Englund

Fakta

Round robin database är en nischad teknik för att lagra kvantifierbara data under en period och ersätta den äldsta informationen med nytillkommen. På sidan 73 kan du läsa mer om tekniken och hur du kan dra nytta av verktyget RRD tool.