GNU/Linux >> Tutoriels Linux >  >> Linux

Configurez Lsyncd localement et via SSH pour synchroniser les répertoires

Cet article explique comment configurer le Lsyncd outil à la fois localement et via SSH pour garder les répertoires synchronisés.

Lsyncd signifie Live Syncing Mirror Daemon, et c'est un outil utilisé dans les systèmes Linux pour synchroniser les répertoires. Ces répertoires peuvent être trouvés localement, au sein de la même machine, ou à distance, sur différentes machines. Pour la synchronisation à distance, cet article se concentre sur l'utilisation de SSH pour l'accomplir.

L'avantage d'utiliser Lsyncd est qu'il s'agit d'une solution gratuite et légère qui n'affectera pas les performances du système de fichiers. Il surveille périodiquement les fichiers pour tout changement, puis utilise rsync pour effectuer la synchronisation.

Exigences

Pour Lsyncd pour fonctionner correctement, vous devez avoir rsync installé.

REMARQUE : Il est recommandé d'exécuter les commandes suivantes en tant que sudo

Pour installer rsync dans les systèmes CentOS, Fedora ou Red Hat, utilisez :

yum install rsync

Pour les systèmes Ubuntu ou Debian, utilisez :

apt-get update
apt-get install rsync

Installer Lsyncd

Pour installer lsyncd sur un système CentOS, Fedora ou Red Hat, il est nécessaire d'activer le référentiel EPEL avant d'installer lsyncd . Les commandes suivantes sont utilisées pour effectuer l'installation :

yum install epel-release
yum install lsyncd

Pour un système Ubuntu ou Debian, le lsyncd L'outil est inclus dans les référentiels par défaut, donc les commandes suivantes devraient suffire pour l'installation :

sudo apt-get update
sudo apt-get install lsyncd

Pour confirmer que l'installation a réussi et vérifier la version installée, utilisez la commande suivante :

lsyncd -version

Fichiers de configuration Lsyncd

Le fichier de configuration par défaut pour Lsyncd est créé automatiquement dans /etc/lsyncd.conf lorsque l'installation est terminée.

Ce fichier contient tous les paramètres permettant d'effectuer la synchronisation entre répertoires, soit en local, soit à distance.

Par exemple, les fichiers de configuration dont vous pouvez consulter le contenu dans /usr/share/doc/lsyncd*/examples/ (le * fait référence à la version de Lsyncd installée).

cd /usr/share/doc/lsyncd-2.2.2/examples/
ls -lh
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

Pour les besoins de cet article, les fichiers de configuration qui peuvent être des exemples utiles sont lrsync.lua pour la synchronisation locale, et lrsyncssh.lua pour la synchronisation à distance.

Un fichier de configuration aura la structure suivante :

cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
[...]
-- User configuration file for lsyncd.
-- Simple example for default rsync.
settings {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
}

sync{
    default.rsync,
    source="src",
    target="trg"
}

Comme mentionné précédemment, Lscynd utilise le rsync outil pour effectuer la synchronisation, vous pouvez donc utiliser le rsync flags pour personnaliser le processus en ajoutant un rsync paramètre au sync déclaration :

[...]
sync {
    default.rsync,
    source="src",
    target="trg",
    rsync = {
        archive = false,
        compress = true,
        links = false,
        owner = false,
        perms = false,
        verbose = true
    }
}
[...]

De plus, il est important de considérer que Lsyncd agrège les événements pendant 20 secondes par défaut avant de vérifier si des modifications ont été apportées. Ce temps peut être modifié en utilisant le delay paramètre dans le sync section du fichier de configuration :

sync {
    default.rsync,
    source = "src",
    target = "trg",
    delay = 5,
}

Synchroniser les répertoires locaux

Pour synchroniser le contenu du répertoire local /path/source_dir vers le répertoire local /path/destination_dir nous devons effectuer quelques modifications dans le fichier de configuration et il est recommandé de créer un fichier journal et un fichier d'état pour suivre l'avancement de la tâche, bien qu'il s'agisse d'une étape facultative :

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

L'étape suivante consiste à modifier le fichier de configuration dans /etc/lsyncd.conf pour spécifier les répertoires source et cible et, s'ils sont créés, l'emplacement des fichiers journaux et d'état. La configuration sera la suivante :

-- User configuration file for lsyncd.
-- Simple example for default rsync, but executing moves through on the target.
-- For more examples, see /usr/share/doc/lsyncd*/examples/
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
    default.rsync,
    source = "/path/source_dir",
    target = "/path/destination_dir"
}

Pour activer cette nouvelle configuration, lancez le service avec la commande suivante :

systemctl start lsyncd

Après avoir suivi les instructions ci-dessus, le Lsyncd commencera à synchroniser le contenu de /path/source_dir vers /path/destination_dir .

AVERTISSEMENT :Il n'est sûr d'activer Lsyncd pour démarrer au démarrage que si vous êtes certain que les répertoires de destination ne sont jamais modifiés par quoi que ce soit d'autre Lsyncd. Sinon, n'activez pas Lsyncd au démarrage et assurez-vous que le MOTD contient une ligne indiquant que Lsyncd est installé et utilisé. Par exemple :

Au redémarrage, procédez comme suit :

rsync vérifie si vous êtes dans une situation "distant/serveur":

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Démarrez Lsyncd avec :

systemctl start lsyncd.service

Besoin de synchroniser plusieurs répertoires locaux ?

Pour synchroniser plus d'une paire de répertoires, il est possible d'ajouter plus de sync instructions dans le fichier de configuration :

[...]
sync{
default.rsync,
    source = "/path/source_1",
    target = "/path/target_1"
}

sync{
    default.rsync,
    source = "/path/source_2",
    target = "/path/target_2"
}
[...]

Synchroniser les répertoires distants via SSH

Pour effectuer une synchronisation à distance à l'aide de Lsyncd, le serveur source doit disposer d'un accès SSH sans mot de passe au serveur cible. Cela se fait en créant des clés SSH dans la source serveur.

Générer des clés pour l'accès SSH sans mot de passe

Utilisez la commande suivante sur le serveur source pour générer les clés :

ssh-keygen -t rsa

Vous serez invité à entrer le fichier dans lequel vous souhaitez enregistrer la clé ; sauf si vous avez une configuration spéciale, laissez-le vide pour utiliser l'emplacement par défaut. Après cela, une autre invite vous demandera une phrase de passe ; laissez ce champ vide car vous avez besoin d'une connexion complète sans mot de passe.

Maintenant que les clés sont générées, copiez la clé vers la destination serveur. Pour le copier dans les authorized_keys fichier sur le serveur de destination, utilisez les instructions suivantes sur la source serveur où les clés ont été générées :

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Pour tester que la connexion sans mot de passe est établie, connectez-vous à la destination serveur à partir de la source un :

ssh DESTINATION_SERVER_IP

Si vous parvenez à vous connecter sans être invité à entrer un mot de passe, le processus a réussi.

Maintenant que vous êtes connecté, créez un répertoire sur l'hôte distant qui fonctionnera comme dossier de destination et quittez la session SSH :

mkdir /path/remote_destination_dir
exit
exit

Modifier le fichier de configuration

La structure du fichier de configuration restera comme expliqué dans la section sur la synchronisation des répertoires locaux, mais quelques modifications seront apportées au sync déclaration :

  • Le default.rsync la propriété sera changée en default.rsyncssh pour activer le rsync outil sur SSH.
  • La target propriété sera remplacée par deux propriétés pour spécifier la destination distante :host et targetdir .

Le fichier de configuration ressemblera à ceci :

[...]
settings = {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

servers = {
 "REMOTE_IP"
}
sourceList =
{
        "PATH_TO_FOLDER_TO_BE_SYNCED",
}
for _, source in ipairs( sourceList ) do
        for _, server in ipairs(servers) do

sync {
    default.rsyncssh,
    source = "/path/source_dir",
    host = "DESTINATION_SERVER_IP",
    targetdir = "/path/remote_destination_dir"
}
[...]

Une fois les modifications apportées au fichier de configuration, lancez le service comme expliqué ci-dessus :

systemctl start lsyncd

Si le service Lsyncd est déjà en cours d'exécution, redémarrez-le :

sudo service lsyncd restart

AVERTISSEMENT : Il n'est sûr d'activer Lsyncd pour démarrer au démarrage que si vous êtes certain que les répertoires de destination ne sont jamais modifiés par quoi que ce soit d'autre Lsyncd. Sinon, n'activez pas Lsyncd au démarrage et assurez-vous que le MOTD contient une ligne indiquant que Lsyncd est installé et utilisé. Par exemple :

Au redémarrage, procédez comme suit :

rsync vérifie si vous êtes dans une situation "distant/serveur"

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Démarrer Lsyncd avec

systemctl start lsyncd.service

Exclure des répertoires de Lsyncd

Parfois, vous devez exclure certains dossiers sélectionnés dans un répertoire spécifique. Les exemples incluent :

  • Fichiers multimédias montés NFS.
  • Fichiers journaux. Lorsqu'ils sont synchronisés, les fichiers journaux créent beaucoup de bavardages inutiles et d'utilisation de la bande passante. Dans certains cas, cela peut entraîner des retards importants dans la synchronisation.
  • Fichiers temporaires utilisés par les processus en cours d'exécution.

Pour exclure des dossiers, vous devez uniquement indiquer le chemin relatif du dossier exclu. Par exemple :

  • /var/www est le répertoire de destination synchronisé avec les esclaves
  • /var/www/vhosts/www.example.com/wp-content/uploads est le répertoire qui est monté à partir de votre serveur NFS, ou que vous ne voulez pas synchroniser autrement.
  • Créez une exclusion dans la configuration lsyncd. En supposant que vous utilisez Lsyncd 2.1.5 sur CentOS 6, assurez-vous d'abord qu'un fichier d'exclusion est en place dans la configuration de Lsyncd, comme indiqué ci-dessous à côté de la ligne "excludeFrom :
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

Excluez ensuite le chemin relatif au répertoire source spécifié pour la synchronisation. Étant donné que le répertoire cible est /var/www et que le répertoire que nous voulons exclure est /var/www/vhosts/www.example.com/wp-content/uploads, notre entrée serait :

cat /etc/lsyncd-excludes.txt
vhosts/www.example.com/wp-content/uploads

ATTENTION :Assurez-vous que le fichier d'exclusion ne contient aucune ligne vide. Si c'est le cas, lsyncd traite cela comme "exclure /" et tout est alors exclu.

Lsyncd sur les solutions NFS

Lsyncd est couramment utilisé pour répliquer des fichiers dans une architecture maître-esclave. Bien que cela fonctionne très bien pour gérer les mises à jour de contenu/code, pour les fichiers multimédias ou fournis par les utilisateurs, il est souvent plus facile d'utiliser NFS pour partager un dossier entre les différents serveurs Web. Soyez très prudent pour exclure les dossiers partagés sur NFS de Lsyncd. Dans le pire des cas, lorsque votre serveur maître est redémarré mais que le partage NFS ne parvient pas à se monter, cela pourrait entraîner la suppression par Lsyncd du contenu de votre partage NFS.

Il existe plusieurs façons de gérer cela.

Option 1 :Exclure des répertoires de Lsyncd

Pour plus de détails, consultez la section "Exclure des répertoires de Lsyncd"

Rsync par défaut ne fonctionne pas avec les cibles des liens symboliques. Nous pouvons l'utiliser pour protéger le contenu monté par NFS.

Au lieu de :

/var/www <– dossier racine pour la réplication Lsyncd/uploads <– Point de montage du partage NFS

Montez le partage NFS dans un autre dossier, par exemple /nfsmount, puis procédez comme suit (en supposant que le contenu des téléchargements a déjà été copié dans /nfsmount/uploads) :

cd /var/www
rm -Rf uploads
ln -s /nfsmount/uploads uploads

Maintenant, votre contenu monté par NFS est situé en toute sécurité en dehors de l'arborescence de répertoires répliquée par Lsyncd.

Option 3 :Définir les paramètres rsync

Rsync prend en charge une option -x qui indique à rsync de ne pas franchir les limites du système de fichiers. Mais avant de continuer, il y a plusieurs notes dont vous devez être conscient avant d'essayer ceci :

  • Cela ne fonctionnera pas avec les volumes Cloud Block Storage, les volumes LVM supplémentaires, etc.
  • Cela ne fonctionnera pas si Lsyncd réside sur le même serveur que le serveur NFS. Cette option suppose que vous disposez d'un serveur NFS dédié
  • Cela ne fonctionne que si la source est un système de fichiers unique

Pour Lsyncd 2.0.x :ajoutez cette option aux options que Lsyncd passe à rsync en modifiant la ligne rsyncOpts dans /etc/lsyncd.lua :

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsyncOpts="-avzx"
}

Pour Lsyncd 2.1.x :avec Lsyncd 2.1.x, rsyncOpts a été changé en rsync={options} avec l'utilisation d'options avec un nom complet plutôt qu'une simple lettre comme avant. Ajoutez ce qui suit à /etc/lsyncd.conf :

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsync={ one_file_system=true }
 }

Conclusions

L'utilisation de Lsyncd pour synchroniser les dossiers locaux et distants est une alternative économique et efficace et, grâce aux multiples options disponibles pour le fichier de configuration, il peut être personnalisé pour répondre à vos besoins.

Articles liés

  • Utiliser rsync pour synchroniser les fichiers

Utilisez l'onglet Commentaires pour faire des commentaires ou poser des questions. Vous pouvez également démarrer une conversation avec nous.


Linux
  1. Comment définir le fuseau horaire et synchroniser l'heure du serveur avec NTP sous Linux

  2. Comment synchroniser les répertoires locaux et distants sous Linux

  3. Désactiver la connexion racine directe et l'accès utilisateur via SSH au serveur

  4. Comment différencier les répertoires sur ssh

  5. ZFS envoie/reçoit sur ssh sous Linux sans autoriser la connexion root

Synchronisation des fichiers et répertoires Linux avec rsync

Comment utiliser la commande rsync pour copier des données localement et via SSH

Comment configurer la clé publique et privée SSH sous Linux

Tunnellisation et proxy SSH

4 façons de transférer des fichiers entre des systèmes distants et locaux via SSH

Comment utiliser SSHFS Mount avec des répertoires distants via SSH