Een korte inhaalslag
Zoals je in de development updates hebt kunnen lezen, zijn we al sinds deze zomer bezig met een disaster-recoverylocatie onder de naam 'Project Phoenix'. Dit project begint nu vorm te krijgen. Onze backuplocatie is ondertussen opgeleverd, een deel van de hardware is al geïnstalleerd, en de eerste tests zijn al begonnen.
Onze laatste update is al van anderhalf jaar terug, dus het is hoog tijd voor een nieuw kijkje in de serverkeuken van Tweakers.net. En er is genoeg te vertellen, want we hebben bepaald niet stilgezeten, dus we gaan even in sneltreinvaart door de grootste wijzigingen heen.
Na de laatste update in augustus 2010 moest onze backupserver Athena worden aangepakt. De server begon oud te worden; de Opterons die erin zaten voldeden niet meer, de opslagcapaciteit was te beperkt en het geheugen was niet toereikend.
Als vervanging is bij Dell een R510 gehaald met twee Quadcore E5620-cpu's op 2.4GHz, 24GB geheugen en 12 sata-schijven van 2TB per stuk. Deze server werd voorzien van Nexenta Core zodat hij met behulp van zfs send/receive kan synchroniseren met onze storage server. De 24TB aan schijfruimte werd opgedeeld in twee raid z2-arrays: effectief is er 16TB ruimte om backups op te maken.
Tegelijk met Athena hebben we ook onze laatste twee APC-pdu's vervangen door zero-u-pdu's van ServerTech. Deze zijn identiek aan degene die we in 2009 in het andere rack in gebruik hebben genomen.
Terwijl we met deze klussen bezig waren, gaf onze kvm-switch de geest. Ter vervanging werd een Aten KL1516-kvm-switch met lcd-lade aangeschaft. Daar hebben we ook nog een kvm-over-ip-module bijgekocht; met deze CN8000 kunnen we vanuit onze luie bureaustoelen de servers bedienen als de remote-managementkaarten in de servers stuk gaan.
Om onze virtuele machines van opslag te voorzien gebruikten we een Dell Powervault MD3000i SAN-appliance. Deze vertoonde enige kuren en omdat hij al was afgeschreven, hebben we zijn opvolger besteld: de Dell Powervault MD3200i. Ons exemplaar is voorzien van twaalf 1TB-schijven.

De twee Towers of Power van Tweakers.net, in het euNetworks-datacenter bij True
Project Phoenix
Voordat wij met Project Phoenix van start gingen, hadden we diverse spof's in ons netwerk. Om te beginnen is elke locatie kwetsbaar voor stroomuitval, brand, overstromingen en dergelijke. Daarnaast hebben we apparatuur zoals de storage-, search- en MySQL-servers: deze kunnen wel snel vervangen worden, maar als ze onderuit gaan, zal de bezoeker dat merken.
De doelstelling van Project Phoenix is dat de bezoeker het helemaal níet merkt als er een server uitvalt, en dat zelfs als een datacentrum compleet van de aardbodem verdwijnt, hooguit een klein deel van de bezoekers daar eventjes hinder van ondervindt.
Wij zijn begonnen met het herinrichten van onze dns. Onze domeinen waren bij verschillende registrars ondergebracht, zodat wijzigingen in geval van nood maar lastig door te voeren waren. Verder stonden onze dns-servers allemaal in hetzelfde netwerk, zodat bij uitval van dat netwerk geen enkel dns-request meer zou worden beantwoord. Ondertussen zijn onze dns-servers over een aantal netwerken verspreid en beheren we alle domeinen via één registrar.
De locatie
Op dit moment staan al onze servers in één datacentrum: euNetworks, in het zuidoosten van Amsterdam. Daardoor lopen we verschillende risico's die ervoor zouden kunnen zorgen dat we dagenlang onbereikbaar zijn: naast de bovenvermelde rampen kan je ook denken aan netwerkstoringen, menselijke fouten en faillissementen van leveranciers.
Om die risico's te beperken wilden we een tweede locatie die ver genoeg van de huidige locatie afligt, zodat we bij de meeste calamiteiten nog gewoon een werkend rack hebben. Dat is uiteindelijk wel een locatie in Amsterdam geworden, vanwege de hoge kosten van een redundante dataverbinding met lage latency's en hoge snelheden.
Onze keuze is gevallen op Telecity3. Dit datacentrum in het noordwesten van Amsterdam kenden we al goed; Tweakers.net werd er van 2004 tot 2007 gehost door True voordat wij naar euNetworks verhuisden.
In dit datacentrum huren wij, onafhankelijk van een hoster, een rack. Zo kunnen we zelf bepalen waar we onze bandbreedte inkopen. Beide locaties zijn aangesloten op de glasvezelring van Amsterdam, zodat we eenvoudig een redundante 10Gbit/s-glasvezelverbinding tussen onze racks konden leggen.
Het nieuwe netwerk
Op het gebied van hardware hebben we voor dit project alle registers opengetrokken; in samenwerking met Quanza Engineering hebben we gekozen voor een vrijwel geheel vernieuwde netwerkinfrastructuur.
De kern van het nieuwe netwerk bestaat uit drie Cisco 2960S-48TD-L-switches: twee in de beide racks bij euNetworks en nog een derde in het rack bij Telecity. Als backup is er in elk rack ook nog een Cisco 2960S-24TD-L-switch geplaatst. In elk datacentrum zijn de switches onderling verbonden met een redundant netwerk van 10Gbit/s-FlexStack-kabels, en zoals gezegd ligt er tussen de beide locaties een redundante 10Gbit/s-glasvezelverbinding.
Ook is er op beide locaties een Cisco 1801 - een zogeheten 'out of band'-router - neergezet en zijn er dsl-lijnen naar de racks gelegd. Op die manier kunnen we ook bij uitval van netwerken en glasvezelverbindingen nog steeds bij de onze servers en switches. Verder komen onze uplinks binnen op aparte 48-poorts HP Procurve 2910al- en HP Procurve 2520-switches.
:fill(white)/i/1328017530.jpeg?f=thumbs_fpa_small)
De nieuwe netwerkstructuur en de uitwerking ervan in het Telecity3-rack
Nieuwe loadbalancers
Ook de loadbalancers worden vervangen door nieuwe hardware. Tot nu toe hebben we altijd zelf onze loadbalancers gemaakt met GNU/Linux en LVS. We hebben er echter voor gekozen om de loadbalancers voortaan kant-en-klaar te kopen, met name omdat er domweg geen tijd was om de loadbalancers zelf te bouwen, ze te voorzien van features als high availability, gslb en ipv6, en ze uitgebreid te testen. Bovendien hadden de loadbalancers die wij op het oog hadden ook nog andere handige features die veel tijd zouden kosten om zelf te ontwikkelen en te testen.

Onze keuze is uiteindelijk gevallen op de AX2500 van A10 Networks. Deze loadbalancer heeft genoeg poorten en genoeg bandbreedte, en biedt bovendien uitgebreide configuratiemogelijkheden voor onze overige eisen en wensen. Ook van deze loadbalancer hebben we drie stuks gekocht: twee voor de euNetworks-racks en eentje voor Telecity3.
Met behulp van gslb zal het verkeer over beide locaties worden verdeeld. De verwachting is dat we onder normale omstandigheden ongeveer vijf procent van ons verkeer naar Telecity3 sturen en de rest naar euNetworks. Op die locatie wordt de traffic tenslotte nog steeds door onze vrienden van True betaald
Met deze aanpak hebben we de zekerheid dat al onze Telecity3-servers werken en up-to-date zijn, en bovendien dat de diverse caches goed gevuld blijven. Als we geen verkeer naar Telecity3 zouden sturen, zouden we zomaar voor allerlei extra verrassingen kunnen komen te staan als de EUNetworks-locatie onverhoopt zou uitvallen.
:fill(white)/i/1328017532.jpeg?f=thumb)
De A10 Networks AX2500-loadbalancer
Nieuwe webservers
De volgende stap in het project was het aanschaffen van nieuwe webservers voor de tweede locatie. Aangezien ook onze huidige webservers bijna afgeschreven waren, hebben we besloten om die ook maar meteen te vervangen.
De nieuwe webservers zijn zo krachtig, dat ze in theorie elk de hele site in hun eentje kunnen draaien. Desondanks hebben we er in totaal zes - voor iedere locatie drie - gekocht, zodat we voldoende redundantie hebben om ook bij uitval van een locatie onderhoud te kunnen plegen en pieken in het verkeer aan te kunnen.
Na een offertetraject met meerdere aanbieders bleek IBM uiteindelijk de beste prijs voor de gewenste specificaties te vragen. De bestelde zes IBM x3550 M3 1U-servers zijn ondertussen geleverd en geïnstalleerd.
De specificaties van de nieuwe webservers zijn uiteraard weer beter dan die van de huidige. Zo hebben ze wederom meer cores en meer geheugen, en per core zijn ze ook nog een paar procent sneller.
Jaargang | 2006 | 2009 | 2012 |
Merk |
2x Dell 1950 2x Supermicro
|
2x Dell R410 2x Sun Fire X2270 |
6x IBM x3550 M3
|
CPU |
2x 5150 @2.66GHz 2x Opteron 275 @2.2GHz |
2x X5570 @2.93GHz |
2x X5675 @3.06GHz
|
Cores |
4 |
8 (16 HT) |
12 (24 HT) |
Geheugen |
4x1GB 667MHz |
6x2GB 1333MHz |
6x4GB 1333MHz
|
Disk |
80GB 7.2K SATA |
500GB 7.2K SATA |
146GB 10K SAS
|
Met een eenvoudige benchmark - het compileren van de linux 3.1.1-kernelsource in het werkgeheugen, met een default config - is te zien hoeveel sneller de nieuwe webservers zijn. Met slechts een enkele thread is het verschil tussen de oude en de nieuwe servers nog niet heel erg groot.
Singlethreaded kernel compileren |
Jaargang | Tijd in seconden, lager is beter |
2012 |
********
466s |
2009 |
********
489s |
2006 |
**********
612s |
De kracht van de nieuwe webservers ligt echter niet zozeer in het feit dat hij één bezoeker snel kan helpen, maar dat hij véél bezoekers snel kan helpen. Als we de '-j ($cores * 2) + 1'-optie bij het compileren van de kernel meegeven, is pas echt de performanceverbetering van de nieuwe webservers te zien.
Multithreaded kernel compileren |
Jaargang - # threads | Tijd in seconden, lager is beter |
2012 - 25 threads |
**
37s |
2009 - 17 threads |
***
56s |
2006 - 5 threads |
**********
178s |
Deze servers zijn in de afgelopen weken bij euNetworks en Telecity3 opgehangen, en zullen binnenkort, na een uitgebreide testfase, de website gaan serveren.
:fill(white)/i/1328017526.jpeg?f=thumbs_fpa_small)
:fill(white)/i/1328017525.jpeg?f=thumbs_fpa_small)
Naast de webservers zullen we nog diverse andere servers bijplaatsen of vervangen. We hebben onder andere al twee zoekservers, twee memcached/nosql-servers en een nieuwe developmentserver besteld. Meer hierover komt in een vervolgartikel, maar we kunnen in ieder geval verklappen dat ze samen 336GB ram, 18 harde schijven en 8 caching-ssd's hebben.
Nieuwe software
We hebben niet alleen de hardware aangepakt. We gebruiken al jaren Debian Testing als standaard OS, met als grote voordeel dat we de nieuwste updates van onze software snel binnenkrijgen. Het nadeel is echter dat er elke week heel veel updates zijn, waarvan sommige eerst goed getest moeten worden.
Uiteraard is er ook nog Debian Stable, maar dat wordt juist weer heel langzaam van updates voorzien. Als we nieuwe functionaliteit zoeken, lopen we daarmee dus achter de feiten aan, tenzij we allerlei kunstgrepen toepassen. Het had altijd veel voeten in de aarde om Debian Stable - of Ubuntu LTS - op de nieuwste servers te installeren: in deze besturingssystemen ontbreken bijvoorbeeld vaak drivers voor nieuwe netwerkinterfaces of raid-controllers.
Met de nieuwe webservers als eerste slachtoffer zijn we dus overgestapt op Ubuntu Server 11.10. Met de halfjaarlijkse releasecycle van Ubuntu hoeven we maar eens per half jaar een nieuwe release te testen, en zullen we toch niet snel opgezadeld zitten met een verouderd OS dat onze nieuwe hardware niet meer kent of functionaliteit mist.
Nog meer veranderingen
In de afgelopen jaren hebben we Lighttpd ingezet voor statische content, Varnish als reverse proxy voor semi-statische content en Apache als webserver voor de dynamische php-content. Dat gaat veranderen. Welk domein je straks ook gebruikt: alle requests worden in eerste instantie door Varnish afgehandeld. De bezoeker wordt alleen naar Apache verwezen als blijkt dat er naar dynamische content wordt gevraagd of als een pagina nog niet in de cache blijkt te zitten.
De afgelopen jaren is ons serverpark stevig gegroeid, maar installatie en beheer van de servers ging nog steeds met de hand via ssh-terminals. Omdat dit ondertussen wel erg veel tijd in beslag nam, zijn we op zoek gegaan naar provisioning-software om eenvoudig servers te installeren en de configuratie up-to-date te houden. Van de onderzochte software sloot Puppet het beste op onze wensen aan. Hiermee kunnen we voortaan binnen enkele minuten een kale Ubuntu-installatie omtoveren in bijvoorbeeld een webserver.
Het vervolg
Al met al staan we nog maar aan het begin van Project Phoenix. De komende tijd worden de nieuwe switches, de glasvezelverbindingen en de nieuwe loadbalancers verder getest. Daarna worden de loadbalancers en de nieuwe webservers in gebruik genomen.
Verder gaan we onderzoeken hoe onze MongoDB-, ActiveMQ-, zoek-, en memcached-servers in een zogeheten multi-masterconfiguratie kunnen worden opgezet. Dat moet ervoor zorgen dat een bezoeker er niets van merkt als er een server uitvalt, uitgezet wordt en later weer aangezet wordt.
Voor de storage ligt een grotere uitdaging te wachten. Ook hier willen we graag een multi-masteroplossing, zodat de clients - zoals webservers - zonder ingewikkelde kunstgrepen altijd een werkend filesystem tot hun beschikking hebben. Ons huidige nfs-systeem is daar niet voor geschikt, omdat alle servers bij uitval de mount van de uitgevallen server op een of andere manier moeten vervangen door een mount op een werkende server. Daarom gaan we kijken naar de diverse distributed filesystems, zoals GlusterFS, XtreemFS en Ceph.
Later dit jaar moeten ook onze MySQL-servers in een multi-masteropstelling worden geconfigureerd; nu gebruiken we nog een master-slave-opzet. Ook hier is het de bedoeling dat onze webservers verbinding met een willekeurige MySQL-server kunnen leggen en dan zowel kunnen lezen als schrijven, zonder dat de programmeurs (waar we overigens nog versterking voor zoeken) zich zorgen hoeven te maken over hoe die data op de andere servers terechtkomt. Voor de serverbeheerders is er dus nog wel genoeg te puzzelen - maar we heten niet voor niets Tweakers.net.