Serverflytning

Serveren der hoster denne blog og andre mere eller mindre vellykkede eksperimenter, er ved at være gammel og træt. Tilbage i 2008 var en dual core Athlon med 2GB hukommelse ganske udmærket til det behov jeg havde. Siden da er der kommet flere sites i folden. Samtidig kan jeg ogsÃ¥ godt mærke at de OS-opgraderinger den har været igennem, begynder at belaste tingene. SÃ¥ nu rykker det hele over pÃ¥ en nyere maskine med masser af hukommelse og fire kerner. Jeg er spændt pÃ¥ hvor lang tid den server holder…

Det interessante ved flytningen er nu ikke så meget den hurtigere hardware. Det er derimod udfordringen i at flytte et website fra en server til en anden, uden at de besøgende lægger mærke til det. Og når begge servere er i samme datacenter, bliver det i praksis umuligt at se.

Apache er en tung og kluntet webserver på mange måder, men den kommer med en veludstyret værktøjskasse af udvidelser. Blandt andet mod_proxy. Min use-case er nok en af de simplest tænkelige, hvilket gør flytningen meget enkel.

Jeg starter med at oprette en DNS record, der peger på den nye server. Navnet er ikke vigtigt, men for overskuelighedens skyld, har jeg valgt at bruge konventionen new.wegge.dk, som tvilling til wegge.dk. På den nye server opretter jeg så en vhost, med det midlertidige navn som server alias:

<VirtualHost *:80>
 Servername wegge.dk
 ServerAlias new.wegge.dk
 ...

Herefter kopierer jeg så indholdet fra den gamle til den nye server, og bruger det nye alias som indgang til at teste opsætningen. Jeg fandt ud af at det er ret vigtigt at være grundig på det punkt. Især dynamiske sider, der bruger databaser kan være præget af hacks som at tilgå en database der har et helt andet navn end forventeligt. Men på et eller andet tidspunkt er det nye site klar til at gå i produktion. Og her er det så at mod_proxy skal findes frem fra værktøjskassen. Definitionen af den virtuelle host på den gamle server skal have en lille tilføjelse:

<VirtualHost *:80>
 Servername wegge.dk
 ProxyPass / http://new.wegge.dk/
 ProxyPassReverse / http://new.wegge.dk/
 ProxyPreserveHost On
 ...

Når apache har genindlæst konfigurationen, er der ikke andet tilbage end at opdatere DNS recorden for wegge.dk, så den peger på den nye server. Og så er der ikke så meget andet at gøre, end at vente på at DNS-ændringen bliver distribueret, så det gamle site til sidst kan lukkes ned. Og der skal man ikke være for hurtig. Selv med en TTL på 12 timer, har jeg set flere eksempler på at den gamle server stadig bliver tilgået flere døgn efter hostnavnet er begyndt at pege på den nye server.


Notice: compact(): Undefined variable: limits in /home/wegge/www-data/blog/blog/wp-includes/class-wp-comment-query.php on line 860

Notice: compact(): Undefined variable: groupby in /home/wegge/www-data/blog/blog/wp-includes/class-wp-comment-query.php on line 860

Notice: compact(): Undefined variable: groupby in /home/wegge/www-data/blog/blog/wp-includes/class-wp-comment-query.php on line 860