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
.
Pour les besoins de ce tutoriel, vous avez besoin:
- deux serveurs, VPS, ou Droplets si chez Digital Ocean;
- d’une connexion SSH par clé, sans mot de passe, entre les deux serveurs.
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 lsyncd
Code 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.lua
Code 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.lua
Code 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_watches
Code 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.
Synopsis » Créer un serveur High Availability (HA)
- Créer un serveur High Availability : la réplication des bases de données
- Créer un serveur High Availability : la réplication des fichiers
- Serveur High Availability : créer un load balancer avec une IP flottante
Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.