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.

Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.

Explorons les possibilités ensemble »

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

Opinions