[Java/MySQL] Multi-master replication

Pagina: 1
Acties:

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ik ben bezig met het ontwikkelen van Multimaster replication voor MySQL, op basis van javagroups. Ze hebben zelf een HSQLdb aangepast, een 100% java database engine, deze ondersteunt nu replication.

Het viel me op dat er noch voor MySQL, noch voor PostgreSQL, noch voor iedere andere gratis database engine werkende multi-master replication is. Ik heb eens gekeken welke database dit fatsoenlijk kunnen, en kwam tot de conclusie dat dit eigenlijk alleen met de grote jongens kan (DB2, Oracle), op linux welteverstaan.

Ik zit al een tijdje met een situatie waarin ik met een beperkt budget een failover-oplossing wil bouwen: twee servers (masters) die beiden actief een java applicatie draaien, gebaseerd op dezelfde database. Shared storage is te duur (co-located servers), en creeert een SPOF. De standaard MySQL replication is niet goed genoeg aangezien bij uitval van de master, de slave de nieuwe master moet worden. Als vervolgens de oude master weer on-line komt, moet dit de slave worden. Dit kan allemaal wel met scripts... maar betrouwbaar is het nog lang niet als ik de usenet posts er op na sla.

Toen dacht ik na het zien van JavaGroups en hun eerste koppeling met HSQLdb dat dit ook mogelijk moet zijn voor de Java/MySQL combo.

Ik ontwikkeling een layer die tussen mijn app en MySQL draait. Deze layer verwerkt alle queries, en zorgt voor replication, db switching, failover. High Availability dus.

Als ik de broncode van de aangepaste HSQLdb bekijk, is te zien dat het redelijk eenvoudig is om dit te implementeren. (Zie de twee losse java files in de HSQLDB/R file die te vinden is op sourceforge). De basisfuncties hebben ze al in HSQLdb/r gedemonstreerd:
- Replicatie tussen een variabel aantal databases, geen master-slave maar peer-to-peer.
- Veranderingen die worden doorgevoerd op een database, worden op alle nodes doorgevoerd.
- Nieuwe nodes vragen automatisch de actuele database op van een andere node. Als er geen andere nodes zijn, wordt de huidige node de master node.
(Zie voor de details deze pagina)


Het mooie is dat JavaGroups een kant-en-klaar en met name stabiel framework bied om replication op te bouwen. JavaGroups ondersteunt namelijk:
Reliability includes (among other things)
- lossless transmission of a message to all recipients (with retransmission of missing messages)
- fragmentation of large messages into smaller ones and reassembly at the receiver's side
- ordering of messages, e.g. messages m1 and m2 sent by P will be received by all receivers in the same order, and not as m2, m1 (FIFO order)
- atomicity: a message will be received by all receivers, or none.

Group Membership includes
- Knowledge of who the members of a group are and
- Notification when a new member joins, an existing member leaves, or an existing member has crashed
Ik loop al wat langer met dit idee. De grote db's zijn simpelweg te duur. Nu heb ik eindelijk een solide framework gevonden voor distributed locking.

Welke java programmeurs of MySQL experts zijn hier ook mee bezig, of hebben interesse om hier eens naar te kijken?

Ik wil de ontwikkelde tools overigens zelf inzetten, maar tevens voor het grote publiek beschikbaar stellen (open source).

Verwijderd

hee, dat javagroups zit er op het eerste gezicht best interessant uit! Ik ga het zo eens download en testen.

  • B-Man
  • Registratie: Februari 2000
  • Niet online
En, heb je inmiddels naar JavaGroups gekeken ?

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ben inmiddels begonnen met een eerste opzet:

- Extra FILE_TRANSFER protocol, om een gezipte versie van een database (state) naar een cluster node te verzenden
- Aangepaste STATE_TRANSFER die automatisch bij het joinen van een channel de state van een andere cluster node trekt. Plug&play cluster dus.

Alle nodes kunnen bijgewerkt worden (mogen dus UPDATE's te verwerken krijgen). Ik ga vermoedelijk niet werken met distributed locking, maar in eerste instantie simpelweg met FIFO & queueing. FIFO is echter niet genoeg voor distributed transactions; hiervoor wil ik echter een extra protocol maken dat gedistribueerde transacties mogelijk maakt.

Vanwege de gebrekkige doc's van Javagroups kost het wat tijd om het systeem door te krijgen, maar nu ik de logica snap wordt ik alleen maar enthousiaster. Binnenkort meer info.

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Zijn er inmiddels anderen die eens naar JavaGroups gekeken hebben?

Ik heb er inmiddels al aardig wat mee gedaan, en het is een erg handig systeem...

Nu zelf nog een UDP Unicast detectie systeem zoals TCPPING schrijven, en het is compleet...

Javagroups + UDP is echt ideaal voor distributed apps!

[ Voor 38% gewijzigd door B-Man op 30-12-2002 02:16 ]


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ik heb vandaag een UDPPING module in elkaar gedraaid, zodat er ook op internetcluster gecommuniceerd kan worden over UDP, dat een stuk sneller is dan TCP.

Als iemand hier er interesse in heeft, hoor ik het wel.
Pagina: 1