Servern lever igen

Jaha då var det dags igen, den fysiska servern som bloggen har legat på har varit nere ett par veckor innan jag fick tid till att väcka den till liv. Som jag har bloggat tidigare så kör jag XenServer på den fysiska servern, programvaran gör det då möjligt att köra flera virtuella servrar med olika operativsystem på denna. Detta har jag utnyttjat detta för att köra denna blogg på en Ubuntu server distribution, en MineCraft-server åt Casper på en Debian distribution, och en byggserver med Jenkins på en Debian distribution. Det har funkat smidigt, förutom att programvaran för att administrera XenServer är en Windows applikation och det finns inget bra motsvarande verktyg för Linux, vilket är rätt trist. I den kommersiella varianten av XenServer så finns Xen-Orchestra som är ett mycket trevligt webbaserat gränssnitt som hade gjort att man kunde administrera servern oavsett vilket operativsystem man själv körde.

Orsaken till varför servern slutade att fungera var att XenServer inte längre ville känna till mitt nätverkskort. Redan från början så ville den inte hitta det inbyggda nätverkskortet på moderkortet, så jag blev tvungen att sätta i ett nytt kort i en PCI Express-slot, men nu ville den tydligen inte känna till denna heller. Jag satte uppe två nätter och försökte byta PCI-plats, patcha XenServer, ändra BIOS-inställningar, följa olika tips i foruminlägg för hur man får XenServer att hitta ny hårdvara, men det hjälpte inte. Man kan nu tro att jag är bitter och önskar XenServer och Citrix (tillverkarna) åt fanders, men så är inte fallet. Produkten har funnit i många år och är riktigt kompetent och stabil, skulle man som företag köra en stor farm med servrar så hade XenServer passat som handen i handsken. Verktygen är bra, prestandan är bra, och det finns bra stöd för att ta snapshots, live-migrera, och skala upp de virtuella maskinerna under drift. Mitt problem bottnat i att jag inte kör den kommersiella varianten och jag använder hårdvara som inte är certifierad för produkten, och då får man skylla sig själv om det inte funkar optimalt. 🙂

Så vilka alternativ hade jag nu när jag var tvungen att installera om?

  • Installera XenServer igen (och hitta ett nätverkskort som funkar)
  • Köra på någon av VMwares produkten
  • Köra VirtualBox (inte riktigt gjord för att köras på en server)
  • Installera allt på en fysisk maskin
  • Nått annat

En fysisk maskin är inget alternativ för mig, det hade då blivit en server för varje grej jag behövder vilket betyder många strömslukande och bullriga maskiner som tar upp mycket plats någonstans. Att installera allt på en och samma server kan vara lockande först, men den dagen man måste uppgradera operativsystemet eller operativsystemet blivit korrupt så försvinner alla funktioner på ett bräde och att sätta upp allt igen är en tidsödande sysselsättning. Det är bättre att köra många virtuella servrar på en fysisk server, det tar mindre plats, drar mindre el, och du utnyttjar hårdvaran till max. Du skapar en virtuell server för varje funktion du vill ha (MineCraft-server, Jenkins-server, Blogg-server, FTP-server, osv…), då blir det enklare att uppgradera dom oberoende av varandra och om en virtuell server går ner så påverkar det bara den funktionen. Om den fysiska servern som alla de virtuella servrarna körs på går ner då har man ju ett problem, men som tur var så är hårdvaran ganska pålitlig idag och med en RAID-1 array, konstant lufttemperatur och bra ventilation, och en schysst UPS så får man ett rätt driftsäkert system.

Mitt slutliga val föll på alternativet, Nått annat. Jag ville inte ha någon kommersiell produkt som man blev inlåst i, utan det skulle vara 100% opersource och med bra verktyg för administration. Men samtidigt måste den stödja konceptet med att kunna köra flera virtuella servrar på en fysisk server. Valet föll på den hypade nykomlingen Docker, som vi redan kör en hel del av på jobbet.

Docker erbjuder inte samma säkerhet och isolation av de virtuella miljöerna som XenServer eller VMware ESX Server och liknande system som bygger på Paravirtualization. Men för mina behov så behöver det inte vara helt vattentäta skott, jag kommer att vara ensam användare på systemet och det är bara mina virtuella miljöer som kommer att köras där. En annan nackdel med Docker är att det är bara Linux-baserade virtuella maskinen, eller s.k. “containrar”, som kan köras på servern. Man kan alltså inte köra Microsoft Windows och andra operativsystem som inte bygger på Linux-kärnan på Docker, detta kan man däremot göra på XenServer, VMware och liknande produkter som emulerar en hel fysisk maskin (hårdvara, BIOS, osv…). Men under de åren som jag kört VMware Server och XenServer så har jag hittills aldrig skapat en virtuell Windowsmaskin så jag antar att det är ett behov som jag inte har. Det mesta av mina applikationer som jag kör funkar fint i Linux-miljöer.

Men vilka positiva fördelar har då Docker undrar den oinvigde? Docker erbjuder Operativsystembaserad virtualisering, vilket innebär att den delar Linux-kärna med host-systemet och emulerar alltså inte en komplett maskin med hårdvara och allt. Fördelen med detta är att containrarna (de virtuella maskinerna) inte tar så stora resurser i anspråk (minne, disk), man får en prestanda är samma som den fysiska servern. Uppstarten av en container är blixtsnabb, det går på ett par sekunder till skillnad paravirtuella-system som skall gå igenom en POST, uppstart av operativsystem och sedan din applikation, vilket kan ta flera minuter. Docker är en ny snygg “förpackning” av funktioner och verktyg som funnits i Linux under tio års tid, bl.a. chgroups, NamespacingUnionFS, och LXC (som erbjuder mycket av det Docker gör).

Jag kommer inte att gå djupare in på hur Docker fungerar, det är kanske ett underlag till ett kommande blogginlägg, men för den intresserade så finns det mycket bra information om hur Docker fungerar på deras hemsida.

För att snabbt avsluta detta inlägg så kan jag säga att för att migrera mina virtuella maskiner från XenServer så fick jag först exportera dessa till XVA-filer via XenServer consolen, därefter körde jag Erik Lax praktiska program för att konvertera dessa till image-filer. Därefter kunde jag mounta imagefilerna och extrahera allt jag ville spara genom att köra:

sudo losetup –offset 1048576 /dev/loop2 disk.raw

För att sätta upp denna wordpress-blogg igen så körde jag följande eminenta Docker-image, som ger en ett komplett och fungerande system på bara ett par minuter: WordPress with Nginx and php-fpm.

Därefter fick jag kopiera in alla bildfiler och MySQL-databasen i den nya containern, och vips så var vi igång igen. 🙂