PDA

Bekijk Volledige Versie : Redunante webapplicatie



Shadowfox
25/10/07, 13:34
Welke oplossing zouden jullie kiezen om een redunante opstelling te maken voor een PHP/MYSQL webapplicatie?

Wegens een 'reden' (niet van belang) was van de week de webserver niet bereikbaar voor de klant. Zodoende kon hij geen mutaties doen in zijn webapplicatie welke wel nodig waren op dat moment. Typisch een geval waar onbereikbaarheid niet toelaatbaar is. De applicatie zelf kan het prima af in een shared omgeving in feite.

Hoe zou je nu de data zowel database als files in sync (bi-directioneel) kunnen houden op twee verschillende locaties in andere netwerken.

Database en datafiles realtime synchronizeren?
Hoe? Waarschijnlijk twee keer eigen platform nodig?

Hoe los je dat (automatish ) op met de DNS?
Twee IP's bij een A-record plaatsen?

Andere ideeen?

Liefst Linux-based...

Randy
25/10/07, 15:24
Raid-1 kun je prima over LAN/WAN uitvoeren. Dan op beide servers een Loadbalancing tool installeren, eventueel in een XEN omgeving.

Kenneth
25/10/07, 17:08
En voor MYSQL replication gebruiken :)

Shadowfox
25/10/07, 18:14
Raid-1 kun je prima over LAN/WAN uitvoeren. Dan op beide servers een Loadbalancing tool installeren, eventueel in een XEN omgeving.

Twee virtuele machines is inderdaad praktischer gezien het om een relatief kleine applicatie gaat maar hoe je dat RAID1 over WAN in gedachte? Je kan bijvoorbeeld niet alle data syncen anders overschijf je bijvoorbeeld je IP-configuratie of iets dergelijks.

Wat betreft MySQL had ik al wel replication in gedachten maar is dat ook synchroon? Dat kon ik niet zo snel eruit halen namelijk als bijvoorbeeld de master down is geweest. Gaat de slave de informatie terug syncen? Wel heb je volledige toegang nodig om het in te stellen.

Kenneth
25/10/07, 18:36
Twee virtuele machines is inderdaad praktischer gezien het om een relatief kleine applicatie gaat maar hoe je dat RAID1 over WAN in gedachte? Je kan bijvoorbeeld niet alle data syncen anders overschijf je bijvoorbeeld je IP-configuratie of iets dergelijks.

Wat betreft MySQL had ik al wel replication in gedachten maar is dat ook synchroon? Dat kon ik niet zo snel eruit halen namelijk als bijvoorbeeld de master down is geweest. Gaat de slave de informatie terug syncen? Wel heb je volledige toegang nodig om het in te stellen.

Zover ik weet stuurt inderdaad de slave gewoon de data terug (anders heb je niet veel aan je replica hé ;))

Randy
25/10/07, 18:59
Twee virtuele machines is inderdaad praktischer gezien het om een relatief kleine applicatie gaat maar hoe je dat RAID1 over WAN in gedachte? Je kan bijvoorbeeld niet alle data syncen anders overschijf je bijvoorbeeld je IP-configuratie of iets dergelijks.

Wat betreft MySQL had ik al wel replication in gedachten maar is dat ook synchroon? Dat kon ik niet zo snel eruit halen namelijk als bijvoorbeeld de master down is geweest. Gaat de slave de informatie terug syncen? Wel heb je volledige toegang nodig om het in te stellen.

Je synct alleen wat je nodig hebt. In dit geval de /home en eventueel stukjes van de /var. Apart mounten dus!

Shadowfox
25/10/07, 19:25
Replica is mijn inziens een kopij van het origineel ;) Master -> slave != bi-directioneel.

Ja, dan wordt het dus bestanden syncen beide kanten op.

Database beide kanten op syncen, als dat mogelijk is. Dat wordt nog even uitzoeken.

HostingTotaal
25/10/07, 19:44
F5 Load balancer ertussen plaatsen 2e server erbij en klaar.

img: http://www.iu.nl/nl/load-balancing-figuur.gif

galious
25/10/07, 20:51
F5 Load balancer ertussen plaatsen 2e server erbij en klaar.

img: http://www.iu.nl/nl/load-balancing-figuur.gif

Voor wat betreft het uitvallen van een server ja, voor betreft het gesynchroniseerd houden van de bestanden en databases, nee. Dan zul je toch echt DB-replicatie moeten opzetten, en je static-bestanden op 2 servers moeten updaten, RAID1 over LAN/WAN, een rsync script of iets dergelijks op moeten zetten.

Groeten,

Martin

crazycoder
25/10/07, 23:36
Database en datafiles realtime synchronizeren?
Hoe? Waarschijnlijk twee keer eigen platform nodig?

Hoe los je dat (automatish ) op met de DNS?
Twee IP's bij een A-record plaatsen?

Andere ideeen?

Er is voldoende budget voor een stevige oplossing?

Hoe redundant moet het worden gemaakt?

Waar je ook voor kies, er blijven zwakke plekken..

Sander-
26/10/07, 00:36
Bestandssynchronisatie via een NAS/SAN oplossing (duurder/betrouwbaarder) of DRDB of RSync (Goedkoper, ook redelijk betrouwbaar mits goed ingericht). Database synchronisatie via MySQL Master-Master replication. Werkt prima, zoek maar even naar wat howto's. Eerste installatie is moeilijk, als je het draaiend hebt gaat het prima.

En dan zou ik er toch een hardwarematige load-balancer oid voorzetten, of ook een softwarematige met behulp van ldirectord, deze kun je dan ook ewer redundant uitvoeren dmv heartbeat. Echter moeten ze dan wel in het zelfde netwerk zitten vanwege de ip-changes.

Mark17
26/10/07, 01:43
In hoeverre is het aanpassen van het script/site een optie? Met wat relatief kleine ingrepen kun je alles redundant maken, deze ingrepen kosten alleen wel tijd (en daardoor geld). Dit kan namelijk zonder problemen met PHP/MySQL (Linux/Windows) in een shared hosting omgeving (2 keer), enige wat wenselijk is is een cron ondersteuning of iets vergelijkbaars voor windows.

gjtje
26/10/07, 09:40
Is leuk hoor zo'n load balancer op één locatie, maar als het netwerk plat is dan heb je er niks aan.

Je zal toch echt naar een oplossing toe moeten waarbij je op twee locaties dezelfde IP's kan opbrengen al naar gelang welke van de twee locaties up en bereikbaar is. Hiervoor heb je eigen IP space nodig, twee stevige switches/loadbalancers, een provider die mee wilt werken en de overige spullen voor synchronisatie.

Jesperw
26/10/07, 10:10
Is leuk hoor zo'n load balancer op één locatie, maar als het netwerk plat is dan heb je er niks aan.

Je zal toch echt naar een oplossing toe moeten waarbij je op twee locaties dezelfde IP's kan opbrengen al naar gelang welke van de twee locaties up en bereikbaar is. Hiervoor heb je eigen IP space nodig, twee stevige switches/loadbalancers, een provider die mee wilt werken en de overige spullen voor synchronisatie.
Je kunt natuurlijk ook kiezen voor een goed netwerk met redundancy tot aan je servers. Een setup in meerdere netwerken is niet flexibel, heeft ook haken en ogen en maakt het onnodig duur.

Ik zou in dit geval adviseren om te kijken naar ofwel 2 servers met synchronisatie (Of mooier, 4 of 5 machines om 't echt netjes te doen). Of een goede virtuele server op een goed platform.

Shadowfox
26/10/07, 11:37
In hoeverre is het aanpassen van het script/site een optie? Met wat relatief kleine ingrepen kun je alles redundant maken, deze ingrepen kosten alleen wel tijd (en daardoor geld). Dit kan namelijk zonder problemen met PHP/MySQL (Linux/Windows) in een shared hosting omgeving (2 keer), enige wat wenselijk is is een cron ondersteuning of iets vergelijkbaars voor windows.

Daar dacht ik ook aan... Ik sla de bestanden tegelijk op twee locaties op... Ik doe mijn query's tegelijk naar beide database...

Als een down is en er wordt verder gewerkt, hoe krijg je het weer goed in sync... Autoincrements ;)

Ik denk dat MySQL master-master de beste oplossing nog is. De bestanden worden toch maar een keer ingelezen en daardoor een extra backup van de originele data. Maar goed, je weet nooit wanneer iets down gaat... Stel je voor dat het tijdens inlezen gebeurd ;)

Een omschakeltijd van een kwartier is acceptabel over het algemeen.

Alles redunant tot aan de server klinkt leuk en aardig maar heb toch al te vaak meegemaakt dat het niet werkt :)

Vooralsnog lijken mij 2 VPS op twee locaties met een MySQL master-master en rsync de voordeligste oplossing.

Alleen de balancing nog oplossen... Misschien zijn daar ook diensten voor.

gjtje
26/10/07, 14:54
Ik zou in ieder geval zorgen dat je op beide locaties dezelfde IP's kan gebruiken. DNS load balancing klinkt leuk maar door al het gecache door providers zitten gebruikers uiteindelijk nog steeds tegen dode servers aan te kletsen. Een load balancer op één locatie die het verdeeld over servers op twee locaties maakt deze LB een spof, en die wil je juist uitsluiten.
Er is genoeg soft/hardware dat bij een fail-over IP's kan overzetten.

Het blijft een risico alles binnen één netwerk te plaatsen, hoeveel providers met routers op meerdere locaties hebben al niet eens gehad dat door een mis configuratie alsnog alles plat ging omdat de routers onderling ruzie kregen. Ze zullen allemaal beweren dat dit bij hen nooit voorkomt, totdat het gebeurt.
Maar goed, soms is een bepaald risico incalculeren al voldoende, alles afdekken is leuk maar vraagt wel een enorm budget. ;)

Mark17
27/10/07, 15:00
Daar dacht ik ook aan... Ik sla de bestanden tegelijk op twee locaties op... Ik doe mijn query's tegelijk naar beide database...

Zelf zou ik het dus iets anders aanpakken, ik doe de query eerst naar de ene database en daar haal ik vervolgens alle data uit die ik nodig heb voor ik hem bij de andere uitvoer (via een simpele xml api, zodat er geen externe mysql connectie nodig is).


Als een down is en er wordt verder gewerkt, hoe krijg je het weer goed in sync... Autoincrements ;)

Het is mogelijk om enkel even of oneven via autoincrements toe te laten kennen op een bepaalde server. Hier maak je gebruik van tegen errors. Daarnaast kun je alle zaken die mislukken tijdelijk opslaan in een bestand en zodra de verbinding hersteld is als nog uitvoeren (immers is de kans relatief klein dat beide mysql servers tegelijk onbereikbaar zijn als ze op verschillende servers in verschillende datacentra en verschillende netwerken staan).


Ik denk dat MySQL master-master de beste oplossing nog is. De bestanden worden toch maar een keer ingelezen en daardoor een extra backup van de originele data. Maar goed, je weet nooit wanneer iets down gaat... Stel je voor dat het tijdens inlezen gebeurd ;)

Een omschakeltijd van een kwartier is acceptabel over het algemeen.

Een kwartier lijkt mij veel te lang (max. 5 minuten is te doen).


Alles redunant tot aan de server klinkt leuk en aardig maar heb toch al te vaak meegemaakt dat het niet werkt :)

Vooralsnog lijken mij 2 VPS op twee locaties met een MySQL master-master en rsync de voordeligste oplossing.

master-master bij MySQL lijkt mij juist niet de beste optie, je wilt namelijk eigenlijk alles af vangen wat maar mogelijk is en dat lukt je niet zomaar op die methode.


Alleen de balancing nog oplossen... Misschien zijn daar ook diensten voor.
Round robin kun je eens naar kijken (hoewel het geen echte loadbalancer is!).

Om het goed te doen ben je eenmalig gauw een week tot twee weken bezig voor het script (extra controles/testen/debuggen/nog eens testen). Binnenkort kan ik een voorbeeld geven van een systeem wat op basis van boven genoemde methode werkt (alleen dat is dus nog met Round robin en geen echte loadbalancer).