J'ai ce journal de rédigé depuis un moment alors pendant que j'y pense je vous le poste, ça pourrait en intéresser certains :
Ayant eu récemment besoin d'un système de réplication multi-maître asynchrone, j'ai fait tout un tas de recherches sur les différentes solutions libres existantes et souhaitait vous en faire un compte-rendu ici:
Rappel :
La réplication permet la copie automatique régulière des données d'un serveur maître vers un serveur esclave, dans la réplication de base on ne doit pas insérer de données coté esclave.
On parle de réplication multi-maître quand on peut avoir plusieurs maîtres dans le réseau de réplication. On peut donc insérer des données sur chaque maître.
On parle de réplication multi-maître asynchrone lorsque les maîtres peuvent être déconnectés un certain temps puis reconnectés et se resynchroniser. Cela implique une robuste gestion des conflits.
Les SGBD étudiés sont MySQL et PostgreSQL.
Solutions libres étudiées:
1) la réplication MySQL
Très bien documentée, la réplication offerte nativement par MySQL est une simple réplication maître/esclave. Elle survit à une déconnexion et on peut donc parler de réplication maître/esclave asynchrone.
Elle n'est cependant pas multi-maître et se bloque au moindre conflit rencontré lors de la réplication (ce qui arrive lors d'insertion de lignes conflictuelles sur l'esclave).
2) Postgres-R, la réplication PostgreSQL
Postgres-R est le futur système de réplication intégré à PostgreSQL, il n'est pas encore utilisable en production et nécessite une recompilation de PostgreSQL pour être testé.
N'étant pas encore au point et assez flou sur ses fonctionnalités, j'ai pas trop poussé les tests.
3) Symmetric DS
Solution en Java également disponible sous la forme de bibliothèque, permet la synchronisation entre différent SGBD, on peut répliquer depuis une base MySQL vers une base PostgreSQL. Tout un tas de SGBD libres ou proprio sont supportés.
Il est présenté comme supportant la réplication multi-maître mais en réalité il fait simplement une réplication dans les deux sens sans gestion des conflits, il arrive même que les deux bases se retrouvent différentes!
Donc pour tout ce qui est réplication multi-maître, à éviter. (à la rigueur pour de la réplication multi-maître synchrone mais ça reste risqué)
4)Bucardo
Solution en perl pour PostgreSQL.
Là, ça marche. Réplication multi-maitre réellement gérée, plusieurs scénarii de résolution des conflits sont disponibles comme "le serveur A a toujours raison", "le serveur B a toujours raison" ou encore "la modification la plus récente est à garder".
Il est également possible de coder sa propre fonction perl de résolution des conflits, et c'est là le plus intéressant, la fonction reçoit en paramètre les deux lignes en conflit et doit retourner la ligne à conserver, qui peut être un mélange des deux, ou même une ligne générée différemment par la fonction.
Dans mon cas j'ai finalement eu besoin d'une solution pour MySQL et je n'ai donc pas pu choisir Bucardo, du coup j'ai utilisé MySQL avec une série de script PHP permettant de gérer les conflits. Mais j'avais besoin d'un cas particulier de réplication multi-maître, je n'avais pas besoin du multi-maître quand les serveurs étaient connectés, juste durant les périodes de déconnexion.
Mon script sera peut-être disponible quelque part sur la toile une fois fini, je vous ferais signe si j'en ai connaissance. (j'ai fait ce script durant mon stage en entreprise de fin de DUT donc là c'est l'entreprise qui a le script, ils le releaseront peut-être mais pas sûr)
Liens :
Réplication MySQL : http://dev.mysql.com/doc/refman/5.0/fr/replication.html
Postgre-R : http://www.postgres-r.org/
SymmetricDS : http://symmetricds.codehaus.org/
Bucardo : http://bucardo.org/
# conflits sur clef auto incrémentée
Posté par PLuG . Évalué à 7.
Une astuce est aussi de configurer chaque serveur pour qu'il génère des clef primaires qui n'entrent pas en conflit (par exemple un serveur génère des clefs "paires" et l'autre des clefs "impaires"). cela se fait dans mysql.ini
server-id = 1
auto-increment-increment = 2
auto-increment-offset = 1
server-id = 1
auto-increment-increment = 2
auto-increment-offset = 2
en fait le GROS problème de la réplication multi-maitre asynchrone est qu'en cas de crash il est extremement compliqué de garantir la restauration exhaustive de toutes les transactions en cours. la réplication asynchrone n'aide pas, et le multi maitre complique encore les choses. Quel backup garder ? comment etre sur d'avoir tous les journaux necessaires ? comment les rejouer après une restauration de serveur ?? bref c'est bien pour certaines applis mais compliqué a opérer correctement.
# Pas tout à fait
Posté par Guillaume Smet (site web personnel) . Évalué à 5.
Non, pas du tout : il n'y a aucune volonté d'intégrer Postgres-R dans PostgreSQL.
Les travaux actuels sur l'intégration d'une réplication à l'intérieur de PostgreSQL ne sont pas basés dessus (et ce ne sera pas du multi-master).
Dernièrement, on entend pas mal parler de http://www.rubyrep.org/ aussi. Ca peut valoir le coup d'oeil.
# Propriété intelectuelle & stagiaire
Posté par Seb0uil . Évalué à 6.
Sauf que, après avoir remué un peu mes souvenirs de DUT, et cherché avec un célèbre ami, j'ai trouvé quelques informations sur http://www.adbs.fr/stagiaires-et-droits-de-propriete-intelle(...)
Petit extrait :
* Les droits d'auteur du stagiaire
Le stagiaire n'est pas un salarié [note 5] et son statut est défini par la loi du 31 mars 2006 pour l'égalité des chances [réf. i]. Mais ni cette loi, ni aucun des textes pris pour son application, ne contient de dispositions sur le droit d'auteur.
Le droit d'auteur s'interprétant toujours en faveur de l'auteur, le stagiaire reste titulaire des droits sur ses créations, tant qu'il n'a pas expressément autorisé par écrit l'entreprise qui l'accueille à utiliser ses créations sauf, bien sûr, si sa contribution alimente une œuvre collective.
Donc sauf particularité dans la convention de stage, tu peux releaser ca comme tu l'entends :)
[^] # Re: Propriété intelectuelle & stagiaire
Posté par MCMic (site web personnel) . Évalué à 5.
Voilà donc un zip avec la dernière version dont je dispose : http://dl.free.fr/getfile.pl?file=/r9uVAlxU (ce lien n'est pas éternel, si quelqu'un est disposé à faire un miroir... )
Le fichier replication_config.php est à adapter à votre cas, là c'était pour répliquer un joomla (mais ça marchait pas complètement d'ailleurs, vu que joomla utilise les sessions)
Pour l'utilisation :
La bibliothèque s'utilise comme une sur-couche aux fonctions MySQL:
On inclut replication_classe.php
Il faut également démarrer une session avec session_start() en tout début de fichier PHP.
On configure le script pour nos serveurs grâce au fichier replication_config.php
On créer un objet de la classe replication_interface : "$replication = new replication_interface();"
Ensuite il suffit de d'appeler $replication->executerRequete() au lieu de mysql_query(), $replication->selectionBase() au lieu de mysql_select_db() et $replication->executerRequete_db() au lieu de mysql_query(requete,base) (équivalent à un selectionBase() puis un executerRequete()).
La fonction « $replication->insert_id() » est à utiliser au lieu de mysql_insert_id().
La fonction « $replication->affected_rows() » est à utiliser au lieu de mysql_affected_rows().
Le script nécessite l'installation du paquet pear "SQL_Parser"
Mon script nécessite la configuration d'une réplication MySQL des bases devant être synchronisées
Pour le paquet pear SQL_Parser, j'ai créé deux patchs corrigeant des bugs, qui sont nécessaires pour que mon script marche : http://pear.php.net/bugs/bug.php?id=16215
http://pear.php.net/bugs/bug.php?id=16139
[^] # Re: Propriété intelectuelle & stagiaire
Posté par mornik . Évalué à 2.
Si je pose la question c'est plus pour la pertinence de sa conservation sur un site (exemple si tes patchs sont intégrés au paquet PEAR etc ..)
[^] # Re: Propriété intelectuelle & stagiaire
Posté par MCMic (site web personnel) . Évalué à 1.
En plus c'est pas impossible que d'ici un an ou deux il devienne obsolète si des fonctionnalités de réplication multi-maître asynchrônes sont incluses dans les SGBD libres existants.
[^] # Re: Propriété intelectuelle & stagiaire
Posté par Raphaël G. (site web personnel) . Évalué à 1.
http://rapsys.free.fr/mysql/scripts/replication.tar.gz
Et franchement, tu pourrais avoir toi aussi une page perso chez free ou autre qui est vraiment plus stable qu'un pauvre lien dl qui dure 24h...
Pense que des gens liront ce billet dans encore 2-3ans !
[^] # Re: Propriété intelectuelle & stagiaire
Posté par MCMic (site web personnel) . Évalué à 1.
Ils ont ouvert dl.free.fr pour le dépôt de fichier donc j'ai voulu respecter leur choix.
le lien est valable 30 jours à compter du téléchargement le plus récent, c'est pas non plus 24h, n'exagère pas.
Cela dit, merci beaucoup pour ton miroir.
# Et Sequoia ?
Posté par Xavier MOGHRABI (site web personnel) . Évalué à 2.
cf : http://www.continuent.com/community/lab-projects/sequoia
D'après la description :
"Sequoia offers a multi-master approach for replication."
[^] # Re: Et Sequoia ?
Posté par Guillaume Smet (site web personnel) . Évalué à 2.
C'est plus que pointu et on a rencontré pas mal de problèmes de bloquage dans certains cas bizarres avec des vraies applications. On a corrigé ce qu'on a pu dans Sequoia mais certains problèmes n'étaient pas assez reproductibles pour qu'on puisse comprendre d'où ça vient.
Sequoia est plus ou moins abandonné par Continuent et il n'y a qu'Emmanuel Cecchet qui continue à travailler dessus.
Par ailleurs :
- Sequoia ne règle pas vraiment le problème du multi-master dans le sens où tu ne vas pas réussir à scaler tes écritures (elles sont répliquées en logiciel sur chaque noeud) ;
- Sequoia introduit un overhead non négligeable et ça dégrade quand même bien les performances sur une utilisation web standard (plein de petites requêtes).
Je n'ai pas eu le temps de regarder Tungstene le nouveau produit de Continuent. Ils ont annoncé du nouveau côté Open Source pour les prochaines semaines.
# Extension Weave de Mozilla
Posté par polytan . Évalué à 1.
J'ai lu ton journal il y a quelques jours déjà et je me demande si ta problématique ne serait pas identique au greffon weave de mozilla firefox.
En effet, celui-ci permet d'avoir une BDD multi-maitre (chaque clients firefox sur un même compte recensant liens visités, marques-pages,flux-rss,mot de passe,etc) et asynchrone (tous les postes ne sont pas connectés en même temps).
J'utilise ce greffon au quotidien et je me demande si le code ne te serait pas intéressant à regarder car dans la pratique, c'est la même problématique que toi, non ?
D'ailleurs, je ne sais pas si on peut le voir, le code...
[^] # Re: Extension Weave de Mozilla
Posté par polytan . Évalué à 1.
[^] # Re: Extension Weave de Mozilla
Posté par MCMic (site web personnel) . Évalué à 1.
Le problème dans mon cas était que durant la déconnexion d'un poste, la BDD coté serveur était modifiée.
Je vois pas bien dans quel cas weave a à fusionner deux versions de la BDD ayant évolué différemment.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.