Umbraco (CMS) vanaf 2 servers

Umbraco logoUmbraco is een veel gebruikt open-source Content Management System wat werkt met Microsoft IIS en SQL Server. Als je er meer over wilt lezen kan ik je het wikipedia artikel aanraden.

Het kan soms zinvol zijn om een CMS op twee verschillende servers te draaien vooral bij druk bezochte websites of een website waar het fijn is om een stukje security in te bouwen. Dan ga je Umbraco load-balancen over twee of meer servers. Normaal is dit geen probleem bij een front-backend oplossing omdat de inhoud in de database wordt opgeslagen, maar bij dit systeem heb je dan toch een probleem. Het CMS maakt gebruik van een database dump in een combinatie van een flat-file en het werkgeheugen om zo snel als mogelijk websites te kunnen serveren. Als je dan een aanpassing op één server doet, dan blijft de ander (en de 3e, 4e, etc) achter en out-dated, de file en het geheugen moeten ook ge-update worden. Er is dus meer nodig. In dit artikel loop ik ze even na.

Load verdelen
Ik neem aan dat je het netjes hebt opgezet dat het verkeer over twee of meer servers wordt verdeeld. Hiervoor zijn allerlei technieken, apparaten en methodes. Ik ga er hier dan ook verder op in.

File synchronisatie
File syncVanwege media files en andere instellingen is het zinvol om het file-systeem te synchroniseren. Het is mogelijk om twee webserver naar 1 share te laten kijken of de synchronisatie plaats te laten vinden door Windows File Replication Service (FRS) en eventueel nog third-party oplossingen. Daar heb ik de volgende ideeën bij: Share, dan gaat een webserver via het netwerk zijn bestanden benaderen, dit lijkt me een performance verlies en daarnaast moet je wat trucjes uithalen omdat Umbraco wat webserver unieke files plaatst. Synchronisatie lijkt me een logischere stap omdat de webserver dan lokaal zijn bestanden ophaalt en het eenvoudiger is om de unieke bestanden buiten de synchronisatie te houden. Persoonlijk ga ik dan voor Windows FRS omdat dit ingebouwd is. Hiervoor heb je wel een Active Directory nodig, maar dat is zo opgezet. Stel Active Directory in, bouw een FRS op en laat de root folder van de site synchroniseren. Hier heb je een beschrijving van een FRS opbouwen. Belangrijk bij het synchroniseren is dat het volgende wordt uitgesloten: het bestand umbraco.config en de folders TEMP en Logs

Umbraco installatie ‘pingen’
Load balancedAls de files worden gesynchroniseerd dan moet Umbraco zelf nog een seintje krijgen om de flat-file en geheugen cache te verversen. Anders blijven de servers de oude informatie serveren. De site waarop je de content update krijgt automatisch een seintje van zichzelf, maar de andere Umbraco installaties moeten een seintje krijgen. Om zo’n seintje door te geven moet de installatie bij de andere Umbraco installaties kunnen komen via http/https en vooral bij de volgende pagina: “/umbraco/webservices/CacheRefresher.asmx

Daarnaast moet je de Umbraco installaties ook van elkaar op de hoogte brengen dat ze bestaan. Dit kan door het volgende bestand aan te passen “./config/umbracoSettings.config” Hierin moet de volgende waardes opgenomen/gewijzigd worden:

<distributedCall enable="true">
    <user>0</user>
    <servers>
       <server>server1.mywebsite.com</server>
        <server>server2.mywebsite.com</server>
        <server>server3.mywebsite.com</server>
    </servers>
</distributedCall>

Vergeet vooral niet de distributed call op true te zetten en vervolgens maak je een entry voor elke server aan. Dit bestand hoef je maar 1x aan te passen want als je de distributie goed hebt geregeld wordt deze file door de synchronisatie in alle Umbraco installaties geplaatst. Eventueel kan je het uitbreiden door het via een bepaald protocol of poort te laten lopen:

<server forceProtocol="http|https" forcePortnumber="80|443">server3.mywebsite.com</server>

In principe is dit genoeg om het te laten werken, maar het zal een hoop getest moeten worden. De informatie van deze blog-post is uit een heleboel websites gehaald, maar vooral eentje is even het noemen als bron waard: Umbraco in Load Balanced Environments