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:
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).
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:
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.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
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).