PDA

Bekijk Volledige Versie : Master Master replicatie mysql



DucatiSt2
23/04/09, 13:36
Hoi,

Voor een website is er een mysql database op een dedicated linux server. Om de transacties op de website te kunnen uitvoeren is een dedicated windows server actief met daarop een gesynchroniseerde kopie van de website db. Na het uitvoeren van de transacties schrijft de windows machine de resultaten terug naar zijn eigen db, bedoeling is dat deze resultaten vervolgens weer met de linux machine gesynchroniseerd worden zodat ze op de website terecht komen. Volgens google kan hier een master master replicatie domein voor gebruikt worden.

Heeft iemand hier ervarningen mee ? Zijn er problemen te verwachten gezien de verschillende os-en ? Wat als 1 van de twee db's down is, vindt na de opstart alsnog de synchronizatie plaats ? Zijn er wellicht betere oplossingen ?

wonko
23/04/09, 14:18
master-master zou hier kunnen werken; de vraag is natuurlijk waarom je niet gewoon met één database verbindt (de windows-machine een verbinding laten leggen naar je mysql-db op linux).

Verschillen in OS zouden geen probleem mogen geven. Na het wegvallen van één van beide nodes kan het, als er niet teveel verschil op zit, automatisch terug in orde komen. Anders moet je de data terug syncroniseren.

maxnet
23/04/09, 14:56
Wat als 1 van de twee db's down is, vindt na de opstart alsnog de synchronizatie plaats ?

Als deze echt down is, vindt na het opnieuw opstarten synchronisatie plaats en dat gaat in de meeste gevallen goed.

Vervelender is als deze niet echt down is, maar alleen de verbinding tussen de twee servers een dipje heeft.
Vervolgens blijven beide server vrolijk verder draaien, zonder dat ze weten wat de ander doet.

Als beide servers naar de database schrijven, dan kan je in een situatie terechtkomen dat er plotseling twee verschillende records met dezelfde primary key zijn, maar met een andere inhoud.
Eentje die toegevoegd is op de ene server, en eentje op de andere.
Het met de hand herstellen van deze corruptie, is geen fijn klusje.

DucatiSt2
23/04/09, 14:59
bedankt voor je antwoord Wonko.

De reden van scheiding is
- de windows machine kan enige tijd zelfstandig opereren zonder synchronisatie met de linux server. Transacties hebben een uitvoeringsdatum stempel, als er geen nieuwe transacties binnenkomen is het mogelijk dat er nog genoeg te doen is.
- het zou fijn zijn als de website blijft werken als de windows server om wat voor reden niet bereikbaar is.
- status van de transactie moet altijd weggeschreven kunnen worden, dubbele transacties gaan de klant niet blij maken. Backup scenario via een eigen db/file zou een mogelijkheid zijn, maar replicatie leek me hier een mooie oplossing voor.
- bepaalde data mag uit veiligheidseisen niet op de (publieke) linux server. De windows server verzamelt deze en is zo goed mogelijk afgeschermd (op ip, ports e.d.) tegen verkeer van buitenaf.

Is het ook mogelijk aan te geven dat bepaalde tabellen niet gesynchroniseerd hoeven te worden? De tutorials die ik zie gaan over de complete db en bieden niet de mogelijkheid om een tabel te excluden. Evt. kan ik de niet-te-synchen tables wel in een andere db zetten, maar.. als het niet hoeft.

DucatiSt2
23/04/09, 15:11
De linux server maakt de records aan. De windows server maakt alleen updates en schrijft nieuwe records weg welke niet relevant zijn voor de linux server. Het probleem met de prim. keys was ik inderdaad ook tegengekomen, ook in combinatie met auto-increment. Echter dat probleem denk ik zo niet tegen te komen.

DucatiSt2
24/04/09, 10:20
Andere vraag.. hoe zit het met security. Stel de ene server staat in datacenter A en de andere in B, gaat er dan onversleutelde sql commands over het lijntje tussen de twee?

wonko
24/04/09, 10:47
als je dat nergens encrypteert, dan gaat de data idd in "mysql-plain-text-formaat" over de lijn.

DucatiSt2
24/04/09, 10:59
ok, via ssh-tunnels kun je de data encrypted uitwisselen.
http://www.jaisenmathai.com/blog/2008/10/10/secure-mysql-replication-between-colos-over-an-ssh-tunnel/

maxnet
24/04/09, 14:34
Is het ook mogelijk aan te geven dat bepaalde tabellen niet gesynchroniseerd hoeven te worden?

Weet niet of het op tabel niveau kan, maar in iedergeval wel op database niveau.
Je kan de vertrouwelijke tabellen dus onder een andere database naam plaatsen, en in de configuratie aangeven dat statements m.b.t. die database niet in de binlog mogen komen. Dan worden ze ook niet gerepliceerd.


ok, via ssh-tunnels kun je de data encrypted uitwisselen.


MySQL heeft zelf ook ondersteuning voor encryptie, je moet het alleen wel even instellen.
Zoek even in de officiele handleiding op "SSL".

DucatiSt2
25/04/09, 17:58
ok bedankt maxnet, ik zal het opzoeken.