Lastbalansering och failover med GleSYS API

Inledning

Ett av de enklaste sätten att lastbalansera en webbtjänst är "DNS Round Robin". I dess enklaste form har du två stycken servrar med varsin IP-adress. Sedan skapar du dubbla A-pekare på sin domän, en pekad mot varje server, vilket gör att trafiken kommer att delas upp mellan de två servrarna. Här är ett exempel på hur man kan automatiskt tar bort och lägger till pekare.

Automatisering och varför det är bra.

Ett av problemen med "DNS Round Robin" är att om en av servrarna går ner, så kommer hälften av besökarna inte att kunna använda tjänsten.

Detta kan till exempel avhjälpas med GleSYS API och det enkla exempelskriptet nedan.

Bash-skriptet körs på bägge servrarna. För att kontrollera om den andra servern fortfarande fungerar så söks dess webbsida igenom efter en textsträng. Om denna textsträng inte existerar så ändras domänens pekare så att bägge pekar mot den fungerande servern. Efter det så forsätter skriptet att testa om sidan är uppe. När den kommer upp igen ändras pekarna tillbaka så att bägge servrarna används igen.

För att detta ska fungera behöver skriptet köras på båda servrarna och värdena för THIS och THAT behöver justeras så att de refererar mot varandra.

Tänk på att detta är ett exempel för att ge uppslag och idéer om hur du kan använda DNS och GleSYS API för att få kraftfulla effekter på ett enkelt sätt. Det är inget som bör användas rakt av för att lastbalansera produktionsservrar.

#!/bin/bash
#OBS. Detta scriptet är hårdkodat med record-ids. Kolla upp dem med:
#/usr/bin/curl -X POST -d domain=example.com -k --basic -u cl12345:API-KEY https://api.glesys.com/domain/list_records
THIS="10.0.0.1"
THAT="10.0.0.2"
URL="http://$THAT/blog/testblog"
SEARCH="Some text on the site"
RECORD1="12345"
RECORD2="12346"
ACCOUNT="CL12345"
APIKEY="SECRET"

getStatus() { /usr/bin/wget -O - $URL 2> /dev/null | grep "$SEARCH" &>/dev/null; echo "$?"; }
setRecords(){
       echo "sätter records till $1 och $2";
       /usr/bin/curl -X POST -d record_id=$RECORD1&data=$1 -k --basic -u $ACCOUNT:$APIKEY https://api.glesys.com/domain/update_record
       /usr/bin/curl -X POST -d record_id=$RECORD2&data=$2 -k --basic -u $ACCOUNT:$APIKEY https://api.glesys.com/domain/update_record
}

while :
do
       STATUS=$(getStatus)
       if [ $STATUS -eq 1 ]; then
               echo "Sidan är nere!";
               setRecords "$THIS" "$THIS"
               while [ $STATUS -eq 1 ]; do
                       sleep 20
                       STATUS=$(getStatus)
                       echo "fortfarande nere"
               done
               setRecords "$THIS" "$THAT"
       fi
       echo "Sidan är uppe!";
       sleep 60
done

Med hjälp av lösningen ovan går det att bygga en tjänst med mycket hög upptid. Kombinera t.ex. Colocation i vårt datacenter i Stockholm med en VPS i Falkenberg, Amsterdam, Oslo eller London.

Om du vill testa GleSYS API, skicka ett mail till support@glesys.se

Mer information om GleSYS API finns även på GitHub

Hittar du inte det du söker?

Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.

Skicka e-post Ring 0200-23 88 00