Commandes SQL liées à la réplication <<< |
FAQ de la réplication | Correction de problèmes courants >>> |
4.10 Réplication de MySQL 4 Administration du serveur Manuel de Référence MySQL 4.1 : Version Française . Introduction à la réplication . Présentation de l'implémentation de la réplication . Comment mettre en place la réplication . Fonctionnalités de la réplication et problèmes connus . Options de réplication dans le fichier my.cnf . Commandes SQL liées à la réplication ->FAQ de la réplication . Correction de problèmes courants |
4.10.7 FAQ de la réplicationQ : Comment puis-je configurer un esclave si le maître fonctionne déjà, et que je ne veux pas le stopper? R : Il y a plusieurs solutions. Si vous avez effectué une sauvegarde du maître à un moment et enregistré le nom et l'offset du binlog (issu du résultat de la commande SHOW MASTER STATUS ) correspondant à la sauvegarde, faites ceci :
Q : Est ce que l'esclave doit être connecté en permanance au serveur? R : Non, il n'est pas obligé. Vous pouvez éteindre l'esclave et le laisser déconnecter plusieurs heures ou jours, puis le reconnecter pour le voir récupérer les modifications et rattrapper le temps. Puis, se déconnecter à nouveau. De cette façon, vous pouvez, par exemple, configurer un esclave via une connexion modem, qui n'utilise que de brève période de connexions. L'implication de cela est qu'il n'est jamais garantit que l'esclave soit synchronisé avec le maître, à moins que vous ne preniez des mesures pour cela. Dans le futur, nous allons avoir l'option de bloquer le maître jusqu'à ce que au moins un des esclaves soit synchronisé.Q : Comment puis-je forcer le maître à bloquer les modifications jusqu'à ce que l'esclave ait tout rattrappé? R : Exécutez les commandes suivantes :
Q : Comment faire tourner les logs? R : En version 3.23.28, vous devez utiliser la commande PURGE MASTER LOGS TO après avoir déterminé quels logs peuvent être effacés, et optionnellement, avoir fait la sauvegarde des premiers. Dans les versions plus anciennes, le processus était bien plus douloureux, et ne pouvait être réalisé sans arrêter tous les esclaves, pour pouvoir réutiliser les noms des points de contrôle. Vous devez stopper les threads esclaves, éditer le fichier d'index de log à la main, effacer tous les vieux logs, redémarrer le serveur, redémarrer les esclaves, puis effacer les fichiers de logs.Q : Comment puis-je passer à une configuration de réplication à chaud? R : Si vous faîtes une mise à jour depuis les versions antérieures à la 3.23.26, vous devez simplement verrouiller les tables maîtres, laisser les esclaves rattrapper le temps, puis utiliser la commande FLUSH MASTER sur le master, et FLUSH SLAVE sur l'esclave pour redémarrer les logs, et redémarrer la nouvelle version du maître et de l'esclave. Notez que l'esclave peut être inactif pour un certain temps : comme le maître note toutes les modifications, l'esclave sera capable de rattrapper, dès qu'il peut se reconnecter.Depuis la version 3.23.26, nous avons verrouillé le protocole de réplication pour les modifications, ce qui fait que vous pouvez modifier le maître et les esclaves à la volée vers une nouvelle version de la série des 3.23 et vous pouvez même avoir différentes versions de MySQL comme esclave et comme maître, tant qu'ils sont plus récents que la 3.23.26. Q : Quels sont vos conseils concernant la réplication bi-bidirectionnelle?R : La réplication MySQL ne supporte aucun protocole de verrouillage entre le maître et l'esclave pour garantir l'atomicité d'une modification entre les serveurs. En d'autres termes, il est possible pour un client A de faire une modification sur le serveur 1 et que dans le même temps, avant que cela ne se soit propagé au serveur 2, un client B se connecte au serveur 2, et fasse une modification sur le serveur 2 qui ne débouchera pas sur le même état que celui dans lequel le serveur 1 est. C'est ainsi qu'il ne faut pas lier de cette façon deux serveurs, à moins que les modifications ne puisse se faire dans n'importe quel ordre, ou que vous sachiez prendre en charge des modifications anarchiques. Vous devez aussi réaliser que la réplication bi-directionnelle n'améliore pas beaucoup les performances, tout au moins au niveau des modifications. Les deux serveurs doivent faire la même quantité de modifications, ainsi qu'un serveur seul le ferait. La seule différence est qu'il va y avoir moins de verrous, car les modifications qui proviennent d'un autre serveur seront optimisé par l'esclave. Cet avantage peut aussi être annulé par les délais réseau.Q : Comment puis-je utiliser la réplication pour améliorer les performances de mon système ? R : Vous devez configurer un serveur en maître et y diriger toutes les écritures, puis configurer les autres en esclaves dans la limite de vos moyens, et y distribuer les lectures. Vous pouvez aussi démarrer les esclaves en mode --skip-bdb , --low-priority-updates et --delay-key-write=ALL pour accélérer les esclaves. Dans ce cas, l'esclave va utiliser les tables non transactionnelles MyISAM au lieu des tables BDB pour obtenir plus de vitesse.Q : Que dois-je faire pour préparer mon code client à la réplication? R : Si la partie de votre code qui réalise les accès aux bases de données a été proprement modularisée, la convertir en une configuration qui supporte la réplication ne sera pas un problème : modifiez simplement votre base pour qu'elle aille lire sur les esclaves et le maître, mais ne fasse que des modifications avec le maître. Si votre code n'a pas ce niveau d'abstraction, l'installation du système de réplication vous donnera alors la motivation ou la raison pour le faire. Vous devriez commencer par créer une couche d'abstraction ou un module avec les fonctions suivantes :
Notez que, bien sur, vous pouvez utiliser différents nom pour les fonctions. Ce qui est important, c'est que vous ayez des interfaces unifiées pour vous connecter en lecture ou en écriture, et pour exécuter des lectures et écritures. Q : Quand et combien de réplications de MySQL permettront d'améliorer les performances de mon système?R : La réplication MySQL est particulièrement avantageuse pour les systèmes qui gèrent des lectures fréquentes, et des écritures plus rares. En théorie, en utilisant uniquement un maître et beaucoup d'esclaves, vous pouvez augmenter les performances de votre système jusqu'à saturation de la bande passante ou du maître, pour les modifications. Afin de déterminer le nombre d'esclaves que vous pouvez obtenir voir les performances de votre système s'améliorer, vous devez bien connaître les types de requêtes que vous utilisez, et empiriquement déterminer la relation entre le nombre de lectures et d'écritures (par secondes, ou maximum absolu), pour un maître et un esclave. L'exemple ci-dessous va vous montrer comment faire des calculs simples.Imaginons que votre charge système soit constituée de 10% d'écriture et de 90% de lectures. Nous avons aussi déterminé que le maximum de lectures max_reads = 1200 - 2 * max_writes , ou, en d'autres mots, notre système peut voir des pics de 1200 lectures par secondes sans aucune écritures, notre temps d'écriture moyen est deux fois plus temps qu'une lecture, et la relation est linéaire. Supposons que notre maître et notre esclave sont de la même capacité, et que nous avons N esclaves et un maître. Nous avons alors pour chaque serveur (maître ou esclave) : lectures = 1200 - 2 * écriture (issue des tests)lectures = 9* écriture / (N + 1) (lectures réparties, mais toutes les écritures vont à tous les serveurs) 9*écriture/(N+1) + 2 * écriture = 1200écriture = 1200/(2 + 9/(N+1) Si N = 0, ce qui signifie que nous n'avons pas de réplication, notre système peut gérer 1200/11, environs 109 écritures par secondes, ce qui signifie (que nous aurons 9 fois plus de lectures que d'écritures, étant donné la nature de notre application).Si N = 1, nous pouvons monter à 184 écriture par seconde. Si N = 8, nous pouvons monter à 400 écriture par seconde.Si N = 17, nous pouvons monter à 480 écriture par seconde. Eventuellement, si N se rapproche de l'infini (et notre budget de l'infini négatif), nous pourrons nous rapprocher de 600 écritures par secondes, en améliorant le système 5,5 fois. Toutefois, avec 8 serveurs, nous avons pu améliorer le système de 4 fois.Notez que nos calculs ont supposés une bande passante infinie, et que nous avons négligé des facteurs qui pourraient être significatifs pour notre système. Dans de nombreux cas, nous ne pourrions pas faire de calculs précis pour prédire l'état de notre système avec N esclaves de réplication. Toutefois, répondre aux questions ci-dessus vous permettra de décider si la réplication est une solution à votre problème ou pas.
R : Avec les fonctionnalités actuellement disponible, vous devez configurer un serveur et un esclave (ou plusieurs esclaves), et écrire un script qui va surveiller le maître pour voir si il fonctionne , et instruire votre applcation et les esclaves d'un changement de maître en cas d'échec. Voici des suggestions :
|
<< | FAQ de la réplication | >> |
Commandes SQL liées à la réplication | Réplication de MySQL | Correction de problèmes courants |