Aller au contenu

Réplication d'une base de données entre deux nas Synology d'un réseau local. Application à la redondance d’un site Wordpress.


Jeff777

Messages recommandés

Objectif :

L'objet principal de ce tutoriel est la réplication d'une base de données entre deux nas Synology d'un réseau local. Cette réplication peut avoir diverses utilisations, dans ce tutoriel je l'ai appliquée à la redondance d’un site Wordpress.

Préambule :

Il existe de nombreux tutoriels sur le web concernant la réplication d'une base de données SQL ou MariaDB et celui-ci en est largement inspiré. En le mettant en place sur mes deux nas Synology je me suis heurté à plusieurs problèmes. Il m'a fallu combiner les informations de plusieurs sites avant d'obtenir le résultat voulu. Depuis plusieurs mois que cette réplication est fonctionnelle, j'ai pu évaluer sa résilience et je dois dire que je suis surpris du résultat. Que ce soit l'arrêt d'un des deux nas ou la modification ou la mise à jour d'un des sites la synchronisation des deux bases reste effective. J’ai même récemment écrasé la base de données en important, à l’aide de phpMyAdmin, une ancienne sauvegarde sur l’un des nas et celle-ci a été immédiatement répliquée sur le deuxième nas.

Pour l’application à la mise en place d’une redondance d’un site Wordpress présent sur les deux Nas d’un même réseau, en plus de la réplication de la base de données Wordpress, il faut synchroniser bilatéralement le contenu du répertoire wp-content.

EDIT du 9/1/2022 :  Pour l'accès au site en redondance totale, il faut faire, sur les deux nas, un virtual host avec le même nom wordpress.ndd. (Avec dsm7, faire un portail de serveur du paquet wordpress).

N'étant pas un professionnel de l'informatique, mon vocabulaire peut s'avérer inadapté et la méthode employée peut sans doute être simplifiée. N'hésitez pas en m'en faire part, je modifierai en conséquence.

Prérequis :

Deux nas présents sur le même réseau local. 

Sur l’un des nas (nas1), MariaDB10, phpMyAdmin et Wordpress ont été installés et un site Wordpress est fonctionnel et accessible de l’extérieur.

EDIT du 9/1/2022 : avoir une sauvegarde du site (répertoire wordpress) y compris de la base de données wordpress. Personnellement j'utilise le plugin gratuit "Updraft plus".

Sur le nas2 Webstation et les différentes versions de PHP et Apache sont installées.

Putty et WinSCP installés sur un PC de réseau avec accès au deux nas en mode vrai root (voir tuto https://www.nas-forum.com/forum/topic/57289-tuto-acc%C3%A8s-ssh-et-root-via-dsm-6/).

Pour que le nas2 puisse prendre le relais du nas1 en cas de défaillance de ce dernier, il faudra utiliser l'IPV6 et mettre en place le tuto suivant :

Application du protocole IPV6. Accès redondant à votre réseau local

 Sans cela une intervention manuelle sera nécessaire afin de modifier la redirection des ports du routeur vers le nas2.

 

Préparation du nas 2:

Installer MariaDB10, phpMyAdmin et Wordpress sur le nas 2

Sur le bureau, cliquer sur MariaDB10, cocher la case « activer la connexion TCP/IP » et sélectionner le port 3306. Faire de même sur le Nas 1. Les pare-feux des deux nas doivent être réglés pour n’autoriser l’accès à ce port que depuis le réseau local.

phpMyAdmin : après installation, si la base de données phpMyAdmin n’apparaît pas, vous devez avoir une notification dans la partie basse, il suffit de suivre les instructions pour créer la base.

Pour la suite, il faut autoriser la connexion de phpMyAdmin entre nas. Pour cela utiliser WinSCP en root et éditer le fichier /volume1/web/phpMyAdmin/config.inc.php

Nota : Pour dsm7 remplacer web par web_packages

Et ajouter la ligne suivante après la ligne 35 :

$cfg['AllowArbitraryServer'] = true;

Profitez-en pour renseigner la clé $cfg['blowfish_secret'] =' '  en insérant 32 caractères entre les apostrophes  si ce n’est pas déjà fait.

Faire cette opération sur les deux nas.

 

Synchronisation du dossier wp-content

Dans mon cas j'ai synchronisé le répertoire volume1/web_packages/wordpress/wp-content du nas1 sous dsm7 avec le répertoire volume1/web/wordpress/wp-content du nas2 sous dsm6. Pour cela j'ai utilisé Cloud Sync(dsm7) avec WebDAV(dsm6).

Si les deux Nas ont la même version du dsm, il y a plusieurs façons de faire une synchronisation bilatérale des dossiers wp-content.

EDIT du 9/1/2022 : J'ai validé ce tuto avec deux nas sous DSM7. Pour la synchronisation du dossier web_packages/wordpress/wp-content j'ai utilisé "Synology Drive ShareSync".

A la création de la synchronisation, bien paramétrer une synchronisation unidirectionnelle du nas1 vers le nas2, avec effacement des fichiers du nas2 non présents sur le nas1. Un fois la synchronisation terminée (coche verte : cela peut prendre du temps) rendre la synchronisation bidirectionnelle.

Nous voilà prêts pour la réplication des BdD.

 

Réplication des bases de données wordpress Master-Slave

Pour cette réplication on trouve de nombreux tutoriels sur internet. Je me suis largement inspiré de celui-ci : http://www.responsive-mind.fr/replication-mysql-master-master/

Sur les deux nas  accéder en root à phpMyAdmin. Dans l’accueil, onglet réplication vous devez avoir ceci :

Capture.thumb.JPG.20773b18ef447bb17e9555d34d1a1f86.JPG

EDIT du 12/12/2023 dans une nouvelle version de PhpMyAdmin on a : Réplication de l'original et Réplication des répliques

Nous allons donc commencer par faire une réplication nas1 (maître) vers nas2 (esclave).

Sur le nas 1  cliquer dans réplication maître sur « configurer »

Dans le menu déroulant sélectionner « Ignorer toutes les bases de données, répliquer : » et dessous  sélectionner wordpress.

Copier les 4 lignes à ajouter à la fin du fichier my.cnf…..sauf que ce fichier n’existe pas encore !

On crée donc un fichier texte que l’on renommera my.cnf une fois édité avec les 4 lignes sans oublier d’ajouter :  [mysqld] en tête de fichier.

Pour les étourdis (comme moi) : Lorsque l’on renomme le fichier ne pas oublier de prendre également l’extension txt, pour cela bien démasquer les extensions.

Avec WinSCP en root placer ce fichier dans /var/packages/MariaDB10/etc/ où l’on trouvera : my_port.cnf et synology.cnf  . Les trois fichiers doivent avoir les mêmes droits 0644 et appartenir au même propriétaire : root.

A ce moment-là redémarrer MariaDB10 pour prise en compte :
Dans putty en root sur le nas, lancer la commande : /usr/syno/bin/synopkg restart MariaDB10

On revient sur phpMyAdmin du nas 1, sélectionner la BdD wordpress (la structure apparait dans la fenêtre de droite) puis l’onglet SQL.

Entrer la commande suivante :

GRANT REPLICATION SLAVE ON *.* TO 'synchro'@'192.168.1.15' IDENTIFIED BY 'motdepasse'

synchro : utilisateur de replication vous êtes libre du nom.

192.168.1.15 : à adapter c’est l’IP locales du nas 2

Motdepasse : au choix (je vous avouerais que j’ai gardé le même pour tous les mots de passe de ce tuto)

N’oubliez pas les apostrophes.

Nous allons maintenant vider les caches des privilèges et des tables, tout en les verrouillant en lecture seule, à l’aide des commandes suivantes (re-cliquer sur SQL pour entrer la commande):

FLUSH PRIVILEGES;

FLUSH TABLES WITH READ LOCK;

Laisser cette instance de phpMyAdmin ouverte et ouvrir une seconde instance

La BdD wordpress étant sélectionnée sur cette nouvelle instance, aller dans l’onglet exportation et cliquer sur exécuter pour télécharger la BdD. Refermer cette instance.

Revenir sur l’instance précédente

De retour sur l’onglet SQL taper :

 SHOW MASTER STATUS;

Nous obtenons ceci :

Capture2.thumb.JPG.1df2d9bedb6e766c5b7eeb3ca5bc2748.JPG

On note la position (ici 185432) et le nom du fichier ( ici mysql-bin.000003)

Sur phpMyAdmin du nas 2 créer une BdD wordpress (nouvelle base de données donner-lui le même nom wordpress puis créer). Sélectionner wordpress à gauche puis l’onglet Importer. Choisir le fichier qui vient d’être téléchargé wordpress.sql puis cliquer sur exécuter en bas. L’importation est assez longue.

Wordpress étant toujours sélectionné, entrer les instructions suivantes dans l’onglet SQL :

STOP slave;

CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='synchro', MASTER_PASSWORD='motdepasse', MASTER_LOG_POS=185432, MASTER_LOG_FILE='mysql-bin.000003';

START slave;

On revient sur phpMyAdmin du nas1, wordpress toujours sélectionné, déverrouiller les tables :

UNLOCK TABLES;

Il ne reste plus qu’à redémarrer MariaDB10 sur les deux nas ( /usr/syno/bin/synopkg restart MariaDB10 dans putty) puis à vérifier le résultat dans l’onglet réplication.

Sur le nas 1(accueil, onglet réplication, afficher l’état du maître) :

Capture5.thumb.JPG.888fe4c1e04c62c96b588049ae732641.JPG

Sur le nas 2 (accueil, onglet réplication, afficher l’état du slave) :

 image.png.3a2537e03eef35276d178783bfc88e30.png

Remarquez la première ligne : « waiting for master to send event » ainsi que Yes  en face de « Slave_IO_Running »   et « Slave_SQL_Running » . Master_Log_File et Master_Position sont identiques au valeurs master du nas1.

Si vous avez une erreur vous pouvez tenter de réparer à l’aide de l’instruction sous ce tableau : gestion des erreurs/ignorer l’erreur courante. Parfois ça marche 😉 sinon il faudra recommencer à

FLUSH PRIVILEGES;

FLUSH TABLES WITH READ LOCK;

car vous avez probablement manqué quelque chose.

Si vous avez n'avez pas d'erreur, la réplication du nas 1 vers le nas 2 est maintenant effective. Mais pour une parfaite redondance des sites il faut maintenant faire la même chose dans l’autre sens.

 

Réplication Master-Master

Nous allons commencer par créer le fichier my.cnf dans le nas2 de la même façon que pour le nas1. Puis on redémarre MariaDB10.

Dans phpMyAdmin du nas 2, wordpress étant sélectionné entrer les instructions suivantes dans l’onglet SQL :

 GRANT REPLICATION SLAVE ON *.* TO 'synchro'@'192.168.1.10' IDENTIFIED BY 'motdepasse';

SHOW MASTER STATUS;

Puis reporter les info file et position sur phpMyAdmin du nas 1:

STOP slave;

CHANGE MASTER TO MASTER_HOST='192.168.1.15', MASTER_USER='synchro', MASTER_PASSWORD='motdepasse', MASTER_LOG_POS=123456, MASTER_LOG_FILE='mysql-bin.789123';

START slave;

Redémarrer le service MariaDB10 sur les deux nas et vérifier les informations obtenues dans phpMyAdmin onglet "réplication"/état du serveur slave de chaque nas :

« waiting for master to send event » ainsi que Yes  en face de « Slave_IO_Running »   et « Slave_SQL_Running »: 

 

Capture6.thumb.JPG.5a3bdcd34797f5f2e3e2d3de26561e72.JPGCapture7.thumb.JPG.0adca241301a01d774ab514287e07fdf.JPG

 

EDIT du 9/1/2022 : Idem, si vous avez une erreur vous pouvez tenter de réparer à l’aide de l’instruction sous ce tableau : gestion des erreurs/ignorer l’erreur courante.

Voilà. Si tout à bien fonctionné toute modification sur l'un des sites sera reproduite sur le second.

Si vous notez des erreurs ou des maladresses ou si vous réalisez d'autre applications de la réplication de bases de données n'hésitez pas à poster ici.

Modifié par Jeff777
Validation du tuto entre deux nas sous dsm7.
Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Pour info : pas de désynchronisation lors du passage de l'un des nas de DSM6 à DSM7 🙂

Edit pas de désynchronisation lors du passage de l'un des nas de DSM7 à DSM7.1

Modifié par Jeff777
Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Bonjour.

Je ne suis pas un expert et je commence tout juste à me préoccuper de la sauvegarde de mes bases de données.

2 serveur NAS 220+

Base MariaDB/Mysql sur NAS 1 et idem sur NAS 2 (pas sur le même réseau)

Je voudrais répliquer l'ensemble de mes bases en master/master mais pas de wordpress.

Possible de m'aiguiller ?

 

Merci beaucoup

Eric

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @evpf29

C'est sympa de t'intéresser à mon tuto. Jusqu'à aujourd'hui il n'y avait pas grand monde d'intéressé.

il y a 28 minutes, evpf29 a dit :

Je ne suis pas un expert

moi non plus. ça c'est dit 😉

Comme tout nouvel inscrit tu pourrais passer par une petite présentation ici . Tu nous indique tes compétences en informatique et ton matériel , ce sera utile pour te dépanner( tu viens succinctement de le faire mais si on veut connaître ces éléments sur un autre post, c'est dans les présentations que l'on cherchera).

Ensuite, je ne suis pas certain de ce que tu souhaites faire. Tu parle de sauvegarde puis de réplication.

Pour la sauvegarde tu n'a pas besoin de ce tuto. Le paquet Hyperbackup  peut sauvegarder les bases de données. Pour la réplication master/master c'est à dire la synchronisation bilatérale de bases de données signifiant que toute modification dans l'une est reportée dans l'autre, oui ce tuto pourrait être applicable à certaines conditions.

Je l'ai appliqué sur la base wordpress mais tu peux le faire sur les bases de données du nas gérée par PhpMyAdmin dont mysql. Je ne sais pas si c'est le cas de tes bases de données.

Ensuite tes deux nas ne sont pas sur le même réseau. S'il peuvent communiquer entre eux ça doit être réalisable mais là je ne vais pas pouvoir beaucoup t'aider si le tuto ne fonctionne pas.

J'essaierai de t'aider de toute façon dans la limite de mes moyens.

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 14 minutes, evpf29 a dit :

ils communiquent entre eux sans problème, sont déja en synchro tous les 2. Sauf pour les bdd.

Super. En plus ce sont des bases mysql (la présentation est utile 😉).

Donc ça devrait marcher. Il faut suivre le tuto ligne à ligne il y a pas mal d'occasions de se planter en voulant aller trop vite. Après l'avoir mis en place je ne l'ai réutilisé que deux fois suite à un changement de nas et au passage à DSM7. Pensant le connaître j'ai pris quelques raccourcis et j'ai du tout reprendre.

La difficulté c'est que tu vas gérer un nas à distance, pas simple mais faisable.  Edit : Tu le feras en VPN je suppose.

Tiens moi au courant.

Modifié par Jeff777
Lien vers le commentaire
Partager sur d’autres sites

Le 04/02/2022 à 10:12, evpf29 a dit :

je n'arrive pas à me connecter en root avec winscp

Bonjour,

Tu as appliqué le tuto que j'ai indiqué  (il est marqué DSM6 mais depuis que je suis passé sur DSM7 il marche aussi bien. Mais je ne l'ai pas réinstallé sous DSM7) :

Edit Sinon avec putty tu peux te connecter en root ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @evpf29 

Pas facile de te dépanner je m'absente maintenant pour 20 jours.

Et je ne sais pas exactement où tu en es.

Essaie d'effacer le fichier my.cnf puis  redémarres les nas et vérifies dans l'onglet réplication de phpmyadmin sur les deux nas que tout est redevenu comme initialement.

 

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...

Salut @Jeff777

J'ai récemment domotisé ma maison via Jeedom. La base de données de Jeedom est hébergée sur mon NAS principal.
Vu que le niveau de criticité est élevé (sécurité de l'habitat), je pensais mettre en place une réplication sur mon NAS secondaire, le DS118, qui ne sert habituellement que de support de sauvegarde de mes différents équipements.
Comme ça en cas de défaillance du NAS principal, j'aurai simplement à changer l'adresse de l'hôte de la base de données dans Jeedom.

Question, est-il possible d'avoir une réplication unilatérale ? je souhaiterais que tous les changements sur le DS918+ soient répercutés sur le DS118, mais interdire l'inverse.
Pour autant, la base de données sur le DS118 ne doit pas être en lecture seule, en cas de bascule d'un NAS à l'autre Jeedom doit disposer de tous les droits nécessaires. Si possible sans autre intervention de ma part.

Merci !

Modifié par .Shad.
Lien vers le commentaire
Partager sur d’autres sites

il y a 50 minutes, .Shad. a dit :

Dur de libérer du temps avec les enfants.

Je comprends...moi c'est maintenant les petits enfants. Mais ça c'est pas du permanent 😉

Pour info. J'ai maintenant 3 sites Wordpress redondants. Deux identiques (avec et sans l'appli Wordpress de Synology) et un nouveau sans l'appli de Synology.

J'ai eu un peu de soucis pour ce dernier, j'ai du faire une erreur quelque part avec les privilèges des utilisateurs. Je m'en suis sorti avec PhpMyAdmin....contrairement à ce que j'ai pu lire je trouve cette appli très pratique.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Je viens seulement de voir ton message, la prochaine fois poste dans la bonne section et notifie plutôt un modérateur, ensuite nous on ce charge de remonté le problème plus haut 🙂

Tu l’as résolut ou pas ? Car je te vois actif il y a 10h sur l’ancien compte, concernant le mail c’est le même début, mais en @gmail.com, je ne vois pas non plus de restriction sur ton compte.

Envois un MP.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour tout le monde. je suis en train de mettre en place une réplication d'un ERP installé sur un nas 1 vers un NAS2.  j'ai suivi le tuto et en finalité j'ai bien une réplication de mon ERP. seul petit souci, dans mon NAS1 (maitre) la position SQL et file mysql-bin  change et je ne sais pas pourquoi.  Du coup mon nas 2 (esclave) ne pointe plus vers les bonnes infos du maitre. Savez vous pourquoi la position SQL et file mysql-bin changent ????   mercià vous

File mysql-bin.000029
Position 11700
Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, TO37 a dit :

Savez vous pourquoi la position SQL et file mysql-bin changent ????

Les bases se sont sans doute désynchronisées. Vous dites que la réplication se fait toujours ? 

Ma seule expérience est sur des bases de sites web et j'ai pu remarquer que c'était assez solide

Lien vers le commentaire
Partager sur d’autres sites

Il y a 15 heures, Jeff777 a dit :

Les bases se sont sans doute désynchronisées. Vous dites que la réplication se fait toujours ? 

Ma seule expérience est sur des bases de sites web et j'ai pu remarquer que c'était assez solide

Merci Jeff777 pour ton retour. lorsque que je remets la commande change master........ avec les bonnes infos ça marche mais en bout de quelques dizaines de minutes la position et le nom du fichier bin changent et donc plus de synchro

il y a 1 minute, TO37 a dit :

Merci Jeff777 pour ton retour. lorsque que je remets la commande change master........ avec les bonnes infos ça marche mais en bout de quelques dizaines de minutes la position et le nom du fichier bin changent et donc plus de synchro

ça change sur le master et je ne voit pas d’où cela peut venir

Lien vers le commentaire
Partager sur d’autres sites

il y a 2 minutes, Jeff777 a dit :

@TO37

Est-ce que dans PhpMyAdmin onglet réplication tu as un warning ?

non j'ai rien.

Capture.JPG

j'ai même le serveur 2 connecté

Capture.JPG

est ce qu'il y a un fichier my.cnf à faire sur le serveur 2 esclave ?

sur ton tuto je suis allé jusqu’à la fin du chapitre 'master vers esclave' mais j'ai pas fait 'master vers master'. pas besoin si je veux simplement une réplique de mon nas 1 maitre vers mon esclave 2 ???

je n'ai pas choisit d'utilisateur comme synchro, je suis resté en root pour le moment pour mes tests. je pense pas que cela puisse jouer ???

Lien vers le commentaire
Partager sur d’autres sites

Visiblement tu n'es synchronisé que dans un seul sens (ce serveur n'est pas configuré pour la réplication de la réplique).

Tu n'es pas allé au bout du tuto. Reprends la seconde partie Réplication Master-Master

Tu devrais avoir ceci : File et position de l' original identiques, dans l'autre nas, à Master_log_file et Read_master_log_pos des répliques et ceci dans les deux sens  :

Capture.jpg

Capture1.jpg

Modifié par Jeff777
Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Jeff777 a dit :

Visiblement tu n'es synchronisé que dans un seul sens (ce serveur n'est pas configuré pour la réplication de la réplique).

Tu n'es pas allé au bout du tuto. Reprends la seconde partie Réplication Master-Master

Tu devrais avoir ceci : File et position de l' original identiques, dans l'autre nas, à Master_log_file et Read_master_log_pos des répliques et ceci dans les deux sens  :

Capture.jpg

Capture1.jpg

merci pour ta réponse. même si je veux simplement envoyer les infos de mon nas 1 vers mon nas 2 (grosso modo juste une sauvegarde de 1 vers 2), je suis obligé de faire cette étape master master ???

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.