sterretje-cluster:cluster-hosting_opbouw-omgeving

This is an old revision of the document!


Het hart van de omgeving is de storage server. Hier ligt alle data van alle andere servers opgeslagen. De lokale disken van de andere servers bevatten alleen het OS. Het voordeel van deze opzet is dat als er een server uit mocht vallen, deze zeer snel te vervangen is door een reserveserver. Omdat er geen data op de uitgevallen server staat, hoeft er geen restore uitgevoerd te worden en kan de reserverserver zeer snel weer online zijn. De storage server zelf is o.a. geselecteerd op z'n betrouwbaarheid, zodat de kans dat deze uitvalt zeer gering is.

Middels NFS over een prive netwerk is de storage server gekoppeld aan de frontproxy-, applicatie- en database servers. Deze servers zijn op hun beurt via een publiek netwerk (en een tussenliggende router) aan het internet verbonden. Op de router gebeurt afscherming, zodat alleen http verkeer (webserving) en ssh verkeer (uploaden bestanden) tussen het internet en de servers mogelijk is. Daarnaast vindt op de hosts zelf ook afscherming plaats, zodat er geen ongeoorloofd verkeer tussen verschillende servers in hetzelfde cluster mogelijk is.

In onderstaand overzicht zijn 4 servers getekend, in werkelijkheid zijn dit er in het appcluster nu bijna 30. Het geheel van alle servers tezamen vormt het hosting cluster.

upload-, proxy,app,db- en storageservers

Een belangrijk concept in het cluster is dat van een “instantie”. Een instantie is de combinatie van een proces en resources behorende bij zo'n proces (met name storage en een eigen IP adres) Bekendste voorbeeld is een database instantie. Daar heb je dus het database proces en de on-disk data files waar het database proces op werkt. Maar, ook van andere diensten kan je een instantie hebben. Denk aan een webserver instantie. Een proces (“apache”) in combinatie met storage (o.a. de documentroot van een website) waar dat proces wat mee doet.

Dit concept is zo belangrijk, omdat de individuele nodes (servers) in het cluster “instantie agnostisch” zijn opgezet. Dwz er is geen binding tussen een node en een instantie. Een instantie kan draaien op node A, maar net zo goed op node B. (bedenk dat de storage van een instantie niet op de lokale disken van een node ligt, maar op de gesharede disken van de fileserver)

Sterker nog, er kunnen meerdere instanties van hetzelfde type (webservers, database servers) draaien op dezelfde node. Bijvoorbeeld, in het appcluster hebben we een node aangewezen als plekje waar normaliter alle shared databases moeten draaien. Op dit moment draaien daar 4 database instanties op. Als we hardware zouden hebben met heel veel CPU en geheugen, dan zou niets ons letten om alle instanties van het hele cluster op die ene superkrachtige node te draaien.

Dit kan omdat we ervoor zorgen dat een instantie nooit “unieke” resources van een node in kan pikken. Bijvoorbeeld: apache laten we nooit binden aan het 0.0.0.0 adres, maar alleen maar een een specifiek, bij die instantie behorend ip adres. Net zo voor databases. Die willen vaak graag een socket in /tmp aanmaken. Dat gaat mooi niet door, want zo'n socket kan maar 1x aangemaakt worden. In de start/stop scripts zorgen we er dus voor dat zo'n socket niet in de globale /tmp directory aangemaakt wordt, maar in een directory behorende bij de instantie.

Tegelijkertijd hebben we onze eigen versies van de normale start/stop scripts (dwz de scripts die je normaal in /etc/init.d vindt); onze versies doen extra zaken. Waaronder het dynamisch opbrengen van het IP adres behorende bij een instantie, op de node waar je op dat moment de instantie opstart. Bij het afluiten van de instantie wordt het IP adres ook weer verwijderd.

De grap nu van die instanties is dat het dus heel makkelijk is om een individuele node even tijdelijk uit de running te halen. Simpel alle instanties die op die node draaien even “overhupsen” naar een andere node. Stoppen aan de ene kant, weer opstarten aan de andere kant en de dienst draait weer verder. Dit kan binnen seconden geregeld zijn. Hiermee is het mogelijk om b.v. nodes voorzien van kernel of OS upgrades, zonder dat de diensten die aan de buitenwereld geleverd worden down gebracht hoeven te worden.

  • sterretje-cluster/cluster-hosting_opbouw-omgeving.1475753360.txt.gz
  • Last modified: 2020/10/17 11:11
  • (external edit)