PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Master-Master Replikation: kann man einen weiteren Slave hinzufügen?



Poison Nuke
20.09.09, 18:38
Hallo,

ich habe ja eine Master-Master Replikation für mein Forum laufen...läuft nun bisher auch relativ stabil ohne weitere Probleme.

Ich habe auch noch einen dritten dedizierten Server der seinerseits ein reiner Slave sein sollte, damit ich eine immer aktuelle Datenbank habe auf die ich einfacher zum testen zugreifen kann.

Nur irgendwie wunderte ich mich dann, warum da irgendwie einige Einträge in der Datenbank fehlten, bis bei einem größeren ALTER TABLE auf dem anderen Master ich mich erst recht wunderte warum dieser ALTER TABLE nicht zum Slave durchkam.

Dann fiel mir auf das der Slave wirklich nur rein die Änderungen bekommt die der eine Master macht zu dem er verbunden ist.


Wenn man mehrere Slaves verketten will, müsste man die Option

"--log-slave-updates" verwenden. Nur da stellt sich jetzt die Frage, wenn man das bei einer Master-Master Repli macht, dann ergibt sich ja theoretisch ein schöner Ping-Pong Effekt und binnen Sekunden dürfte sich die Datenkbank vervielfacht haben, weil jedes Update das der eine Master macht, sendet der andere Master ebenfalls wieder als Update an den Master zurück und immer so weiter.


Liege ich also richtig das es unmöglich ist, eine Master-Master Repli weiter zu replizieren auf einen dritten slave? Oder gibt es da einen sicheren Ausweg?

mbo
21.09.09, 00:58
Du sprichst von MySQL?
Die Replikation benötigst Du für ein Forum mit DB unter HA als aktiv/aktiv?

Mich erschreckt, dass nur die "eigenen" aktiven Vorgänge des Masters an den Slave gesendet werden, denn die anderen sind für ihn ja auch aktiv.

Spontan file mir nur ein Proxy ein, aber dann bräuchtest Du zwei ... Vielleicht kommt mir nach dem dritten Bier und zwei Stunden schlaf noch ein geistesblitz ...

Poison Nuke
21.09.09, 10:37
Hio,

stimmt vergessen zu erwähnen, handelt sich um aktuelles MySQL in einem sagen wir aktiv/aktiv Setup, wobei das bei einer Master-Master Replication schon fast zuviel der Ehre ist :rolleyes:



Wie stellst du dir das mit dem Proxy vor? Es müsste halt höchsten möglich sein ein Slave zwei Master zu geben...aber das geht meines Wissens auch nicht. Dürfte für den Slave auch interessant werden...bei umfassenden Updates hat man dann am Ende vllt sogar 3 verschiedene Datenbanken :ugly:

marce
21.09.09, 10:52
Du könntest eine Kette / Ring erstellen, also a -> b -> c -> a

Dann hast Du halt kein eindeutiges Master-Master-Paar mehr. Um eine reine Master-Master-Kombination auf einen zusätzlichen Slave zu replizieren gibt's AFAIK nur die Möglichkeit, über externe Scripte zu arbeiten.

http://dev.mysql.com/doc/refman/5.1/de/replication-features.html

#

Die Verbindung mit Servern in einer Master/Slave-Zirkelbeziehung ist sicher, wenn Sie die Option --log-slave-updates benutzen. Das bedeutet, dass Sie eine Konfiguration wie die folgende erstellen können:

A -> B -> C -> A

Allerdings funktionieren viele Anweisungen in einer solchen Konfiguration nicht einwandfrei, sofern Ihr Code nicht so formuliert ist, dass potenzielle Probleme berücksichtigt werden, die aufgrund von auf verschiedenen Servern in unterschiedlicher Reihenfolge durchgeführten Updates entstehen können.

Serverkennungen werden in Binärlogereignisse kodiert, d. h., Server A erkennt, wenn ein Ereignis, das er liest, ursprünglich von ihm selbst erstellt worden ist, und führt es dann nicht aus (es sei denn, Server A wurde mit der Option --replicate-same-server-id gestartet, die aber nur in wenigen Fällen wichtig ist). Es kommt also nicht zu Endlosschleifen. Eine solche Zirkelkonfiguration funktioniert nur, wenn Sie keine Updates durchführen, durch die es zu Konflikten zwischen Tabellen kommt: Wenn Sie Daten sowohl auf A als auch auf C einfügen, sollten Sie keinesfalls einen Datensatz auf A einfügen, dessen Schlüssel unter Umständen mit einem Datensatz auf C kollidiert. Ebenso wenig sollten Sie dieselben Datensätze auf zwei Servern aktualisieren, wenn die Reihenfolge, in der die Updates durchgeführt werden, von Bedeutung ist.

Poison Nuke
21.09.09, 10:59
hm, das wäre also ein Triple Master Setup. Irgendwie ist mir das zu risikoreich. Wenn da ein Master ausfällt und man das eine Zeit nicht mitbekommt dann stauen sich zig Updates an und der erste Master in der Kette bekommt dann nicht die Updates von Master B und wenn Master A ein UPDATE ausführen muss dann wird der Datenbestand aufjedenfall asynchron.

Nene, das ist mir def. zu gewagt.

Ich finde es jetzt schon risikoreich wegen der Asynchronität, falls beide Master gleichzeitig ein Update ausführen auf eine zelle oder gar eine ganze Tabelle und dadurch verschiedene Datensätze entstehen.

marce
21.09.09, 11:01
tja, leider ist das einzige, "sichere" Szenario momentan bei MySQL ein ded. Master, auf den alle Schreiboperationen laufen und Slaves, von denen nur gelesen wird. Leider ist das nicht mit jeder Applikation so einfach zu realiseren.

Wobei man das Problem auch bei anderen DBs (naturgemäß) hat - solange man keine Locks setzt, was einem zwar das eine Problem vom Hals schafft, dafür aber wieder viele andere hervorbringt...