1 votes

MySQL dans une topologie en étoile

J'ai une base de données centrale avec toutes les données dans MySQL 5.1-lastest-stable. Je veux connecter plusieurs clients dans une relation maître-maître.

Question
Comment puis-je configurer une topologie en étoile avec un serveur central au milieu et plusieurs bases de données clients pour que les modifications apportées à un client soient propagées ? premièrement vers le serveur central et de là vers toutes les autres bases de données des clients ?

Informations sur la base de données
J'utilise inno-db pour toutes les tables et j'ai activé le binary-log.
En dehors de cela, j'ai appris à faire du master-master entre deux bases de données.
Toutes les tables ont des clés primaires entières autoincrémentées. Le décalage et le début de l'auto-incrément sont adaptés aux différents clients. Les bases de données n'ont jamais de conflits de clés primaires.

Pourquoi est-ce que je veux ce
J'ai un logiciel client (pas un site web ou php) qui se connecte à une base de données MySQL locale sur l'ordinateur portable, qui doit se synchroniser avec une base de données centrale, de sorte que toutes les personnes qui utilisent le programme sur leur ordinateur portable voient toutes les modifications apportées par d'autres personnes.
Je ne veux pas me connecter directement à la base de données centrale, car si la connexion Internet est interrompue entre l'ordinateur portable et la base de données centrale, mon application meurt.
Dans cette configuration, l'application continue, l'ordinateur portable ne reçoit simplement pas les mises à jour des autres personnes jusqu'à ce que la connexion à la base de données centrale soit rétablie.

9voto

Adam Points 11

Il existe une raison spécifique pour laquelle ce que vous proposez est impossible à réaliser avec MyISAM et InnoDB.

Une topologie en étoile justifie que le maître soit le centre de l'univers, et non l'esclave. La réplication MySQL n'a pas été conçue pour qu'un esclave puisse lire simultanément à partir de plusieurs maîtres. Il ne peut lire qu'à partir d'un seul maître à la fois. Le site CHANGER LE MAÎTRE EN connecte un esclave à un, et un seul, maître.

Selon le livre Comprendre les mécanismes internes de MySQL , page 219, paragraphe 2, sous le sous-titre "Multi-Master" dit ce qui suit :

La réplication MySQL n'était pas à l'origine écrit avec un support multi-maître en tête l'esprit. Un esclave est nativement capable de répliquer un seul maître. Un patch assez patch assez simple peut être créé pour permettre un esclave de recueillir des mises à jour de plusieurs maîtres sans résolution de conflit. résolution de conflits. Cela a été fait à un moment donné, mais pour un certain nombre de raisons n'a pas dans la branche principale du projet l'arbre des sources. Un patch plus complexe pour permettant une certaine résolution des conflits a été conflit était prévu à un moment donné, mais pour un certain nombre pour un certain nombre de raisons, il n'a pas été développement. Il peut toujours être être implémentée dans le futur.

Le livre MySQL haute performance : Optimisation, sauvegardes, réplication et plus encore a un encadré en haut de la page 364 (Chapitre 8 : Topologies de réplication) dont le titre est "MySQL ne supporte pas la réplication multimaster" . La boîte comporte les paragraphes suivants :

Nous utilisons le terme multimaître réplication très spécifiquement à décrire un esclave avec plus d'une maître. Indépendamment de ce que l'on a pu on vous a dit, MySQL (contrairement à certains d'autres serveurs de bases de données) ne supporte pas la configuration illustrée illustrée par la figure 8-6. Cependant, nous vous montrons quelques façons d'émuler réplication multimaître plus loin dans ce chapitre .

Malheureusement, de nombreuses personnes utilisent ce terme pour décrire toute configuration où il y a plus d'un maître dans l'ensemble de la topologie, comme la topologie " arborescente " présentée plus loin dans ce chapitre. D'autres personnes l'utilisent pour pour décrire ce que nous appelons la réplication maître-maître maître, où les serveurs sont mutuellement maître et esclave.

Ces problèmes de terminologie causent beaucoup confusion et même des disputes, donc nous pensons qu'il est préférable d'être prudent avec noms. Imaginez simplement combien il sera difficile difficile de communiquer si MySQL ajoute le support d'un esclave avec deux maîtres ! Quel terme utiliserez-vous pour décrire cela si vous n'avez pas réservé "réplication multimaître" pour cet cette fin ?

Bien que les techniques d'émulation énumérées aux pages 373-375 sous le sous-titre "Emulation de la réplication multimaître" soient théoriquement possibles (en utilisant le moteur de stockage BLACKHOLE) et qu'elles aient été mises en œuvre avec succès par d'autres pour émuler seulement deux maîtres, elles ne pourront jamais supporter la topologie que vous proposez.

Je m'étais adressé cette question avant . En fait, la réponse que j'ai donnée ici est constamment appliquée avec succès. C'est pourquoi les vendeurs d'assurance peuvent apporter un ordinateur portable au domicile d'une personne et recueillir des données sur une personne qui demande une assurance. Le vendeur peut éventuellement se connecter à un ordinateur central pour télécharger la demande d'un nouveau client. À son tour, l'ordinateur central peut télécharger les dernières informations de l'actuaire afin de calculer au prorata le coût de la police pour le demandeur. Le principe est le même que pour la connexion d'un ordinateur portable à un ordinateur central, un ordinateur portable à la fois.

4voto

Paco Points 6156

Ce n'est pas possible, Mysql ne supporte que la réplication circulaire multi-maître-maître.

Cet article décrit très bien cette réplication.

0voto

Kromey Points 3561

IMPORTANTE MISE À JOUR Je me suis trompé. Bien qu'en théorie tout ce que j'ai dit ici soit valable, MySQL ne supporte pas réellement la réplication multi-maître, pour des raisons que j'ignore. D'autres serveurs de bases de données supportent ce type de topologie, cependant, donc si une véritable topologie en étoile maître-maître est nécessaire, il faudra également changer de serveur.

Je ne suis pas d'accord avec @lg, je pense que c'est possible. (Désolé d'avance que cette "réponse" manque de précisions, je n'ai pas de base de données MySQL devant moi et je n'ai jamais fait cela auparavant, mais il y a plus ici que ce qui tiendrait dans un commentaire).

Dans la réplication MySQL maître-maître, les deux serveurs jouent à la fois le rôle de maître et d'esclave ; de même, dans la répétition circulaire maître-maître-etc, tous les serveurs sont à nouveau à la fois maître et esclave.

D'un autre point de vue, MySQL est tout à fait capable d'avoir un serveur maître répliquant vers plusieurs esclaves - nous avions cette configuration (maître vers 3 esclaves) dans mon précédent emploi.

Puisque nous savons qu'un maître peut aussi être un esclave, et qu'un maître peut avoir plusieurs esclaves, et que nous savons (d'après le fonctionnement de la réplication circulaire) que les déclarations répliquées peuvent être placées dans le binlog (pour que le prochain esclave les reprenne) y qu'un serveur peut identifier ses propres déclarations dans un binlog dans son propre maître (c'est ce qui empêche le "premier" serveur dans un scénario de réplication circulaire de répliquer à nouveau ses propres déclarations et de les faire tourner en boucle infinie), il semble tout à fait raisonnable de configurer un seul maître servant plusieurs esclaves, qui est lui-même un esclave de plusieurs maîtres (ce qui, encore une fois, est possible, car MySQL supporte la réplication multi-maître dans le but d'une sauvegarde unique en temps réel pour plusieurs serveurs).

J'admets que je ne peux pas vous donner de détails sur la façon de mettre en place ce système, et je reconnais volontiers que vous n'obtiendrez probablement pas beaucoup (voire pas du tout) de soutien pour cette configuration très peu orthodoxe, mais voici quelques conseils pour vous aider à démarrer :

  1. Tous les serveurs devraient être configurés pour enregistrer les déclarations répliquées (selon la réplication circulaire habituelle, comme l'article auquel @lg a fait référence).
  2. Les serveurs "rayons" (faute d'un meilleur terme) doivent être configurés dans une relation maître-maître avec le serveur central "hub".

Cela devrait être facile à tester -- vous dites que vous en avez déjà deux configurés dans une relation maître-maître, alors configurez maintenant un troisième dans une relation maître-maître avec celui que vous voulez être le "hub" central, puis voyez si la réplication fonctionne comme vous le voulez (bien que vous vous souveniez de l'étape 1 -- le maître-maître typique, je crois, ne met pas les déclarations répliquées dans le binlog).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X