Créer un serveur High Availability : la réplication des fichiers

Nous avons vu il y a quelques jours comment répliquer nos bases de données à la volée d’un serveur à l’autre.

Voyons aujourd’hui comment répliquer les fichiers en temps réel avec lsyncd.

Créer un serveur High Availability : la réplication des fichiers photo

Pour les besoins de ce tutoriel, vous avez besoin:

Mon serveur principal s’appelle MASTER. Le serveur de sauvegarde s’appelle BACKUP.

Copier tous les fichiers d’un serveur à l’autre avec rsync

rsync est le moyen le plus simple de copier tous les fichiers d’un répertoire sur votre serveur de sauvegarde.

Nous copions donc tous les fichiers qui se trouvent dans /var/www/html de notre serveur MASTER vers BACKUP :

rsync --progress -av --delete --stats --checksum --human-readable /var/www/html/* root@10.134.4.220:/var/www/html/Code language: JavaScript (javascript)

Cela permet d’avoir deux copies identiques très rapidement, surtout si vos deux VPS sont dans le même datacenter : vous pouvez alors utiliser l’IP interne du serveur – vitesse décuplée assurée (et cela ne compte pas dans la bande passante allouée).

La réplication des fichiers du site avec lsyncd

Je choisis d’utiliser lsyncd pour assurer la réplication des fichiers du site. C’est un petit service qui surveille le contenu d’un répertoire et qui fait un rsync toutes les 20 secondes vers votre autre VPS.

1. Sur le serveur MASTER, on installe lsyncd:

apt-get install lsyncdCode language: JavaScript (javascript)

2. Et on crée ses répertoires et son fichier de configuration :

mkdir /etc/lsyncd
mkdir /var/log/lsyncd
nano /etc/lsyncd/lsyncd.conf.luaCode language: JavaScript (javascript)

3. Munissez-vous de l’adresse IP interne du serveur BACKUP (10.134.4.220 chez moi).

4. Ajoutez le code suivant dans le fichier :

settings  {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd-status.log",
    statusInterval = 20,
    delete = true
}
      sync {
      default.rsync,
      source="/var/www/html/",
      target="10.134.4.220:/var/www/html/",
      rsync = {
        acls = true,
        verbose = true,
	compress = true,
	owner = true,
	group = true,
	perms = true,
        _extra = {"-a"},
        rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" }
      }Code language: JavaScript (javascript)

Il est important de changer l’adresse IP de la ligne 11 pour y mettre celle de votre serveur de destination (serveur BACKUP). Je mets l’adresse IP interne pour ne pas “manger” la bande passante mensuelle.

Vous pouvez maintenant lancer lsyncd avec:

service lsyncd start

et vérifier son état de fonctionnement:

service lsyncd status

Si lsyncd est correctement configuré, lancé et actif, vous devriez avoir quelque chose comme ceci :

lsyncd.service - LSB: lsyncd daemon init script
   Loaded: loaded (/etc/init.d/lsyncd; bad; vendor preset: enabled)
   Active: active (running) since Thu 2017-03-09 16:01:33 UTC; 2s ago Docs: man:systemd-sysv-generator(8) Process: 16275 ExecStop=/etc/init.d/lsyncd stop (code=exited, status=0/SUCCESS) Process: 16285 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS) Tasks: 1 Memory: 26.8M CPU: 1.001s CGroup: /system.slice/lsyncd.service └─16292 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.luaCode language: JavaScript (javascript)

Notez la mention active (running), en vert.

Pour vérifiez si tout fonctionne : créez un fichier dans le répertoire /var/www/html sur votre server MASTER. Quelques secondes plus tard, ce fichier apparait sur le serveur BACKUP.

Résoudre l’erreur “Error: Terminating since out of inotify watches”

Si jamais il y a trop de fichiers à transférer d’un coup, il se peut que lsyncd ait du mal à faire face à un nombre de fichiers trop important, d’un seul coup.

On peut alors obtenir le message d’erreur suivant dans les logs:

      Sat Feb 25 08:35:22 2017 Error: Terminating since out of inotify watches.
      Consider increasing /proc/sys/fs/inotify/max_user_watchesCode language: JavaScript (javascript)

Le message d’erreur est très explicite. Il suffit d’éditer /etc/sysctl.conf:

nano /etc/sysctl.conf

ajoutez ensuite cette ligne à la fin du fichier:

fs.inotify.max_user_watches=32768

activez les changements de manière permanente:

sysctl -p /etc/sysctl.conf

et enfin, relancez le service et vérifiez son état de service :

service lsyncd restart
service lsyncd status

Voilà. Vos fichiers sont maintenant répliqués en temps réel.

Rien ne vaut un petit rsync de temps en temps pour vérifier que tout est bien à jour. Cela peut s’avérer utile lors de gros changements dans la structure d’un site.

Vous souhaitez enrichir votre site avec de nouvelles fonctionnalités ? Ensemble, donnons vie à vos idées, simplement et efficacement.

Parlons de vos besoins spécifiques »

Matt

Développeur certifié WordPress & WooCommerce chez Codeable, administrateur système et enseignant-chercheur, je mets mon expertise au service de vos projets web.

Ma priorité : des sites performants, fiables et sécurisés, pensés pour offrir la meilleure expérience utilisateur. J’accompagne chaque client avec écoute et pédagogie, pour transformer vos idées en solutions concrètes et durables.

Profitez de solutions WordPress et WooCommerce sur-mesure, pensées pour optimiser durablement votre site.
Explorez les leviers pour booster l’impact de votre site web.

Opinions