GNU/Linux >> Linux Esercitazione >  >> Linux

Configura Lsyncd localmente e su SSH per sincronizzare le directory

Questo articolo spiega come configurare Lsyncd strumento sia in locale che tramite SSH per mantenere sincronizzate le directory.

Lsyncd sta per Live Syncing Mirror Daemon ed è uno strumento utilizzato nei sistemi Linux per mantenere sincronizzate le directory. Queste directory possono essere trovate localmente, all'interno della stessa macchina, o in remoto, su macchine diverse. Per la sincronizzazione remota, questo articolo si concentra sull'utilizzo di SSH per realizzarla.

Il vantaggio di utilizzare Lsyncd è che si tratta di una soluzione gratuita e leggera che non influirà sulle prestazioni del filesystem. Monitora periodicamente i file per eventuali modifiche e quindi utilizza rsync per eseguire la sincronizzazione.

Requisiti

Per Lsyncd per funzionare correttamente devi avere rsync installato.

NOTA: Si consiglia di eseguire i seguenti comandi come sudo

Per installare rsync nei sistemi CentOS, Fedora o Red Hat usa:

yum install rsync

Per i sistemi Ubuntu o Debian utilizzare:

apt-get update
apt-get install rsync

Installa Lsyncd

Per installare lsyncd su un sistema CentOS, Fedora o Red Hat è necessario abilitare il repository EPEL prima di installare lsyncd . I seguenti comandi vengono utilizzati per completare l'installazione:

yum install epel-release
yum install lsyncd

Per un sistema Ubuntu o Debian, lsyncd tool è incluso nei repository predefiniti, quindi i seguenti comandi dovrebbero essere sufficienti per l'installazione:

sudo apt-get update
sudo apt-get install lsyncd

Per confermare che l'installazione è andata a buon fine e verificare la versione installata, utilizzare il comando seguente:

lsyncd -version

File di configurazione di Lsyncd

Il file di configurazione predefinito per Lsyncd viene creato automaticamente in /etc/lsyncd.conf al termine dell'installazione.

Questo file contiene tutti i parametri utilizzati per eseguire la sincronizzazione tra le directory, in locale o in remoto.

Ad esempio i file di configurazione puoi rivedere i contenuti in /usr/share/doc/lsyncd*/examples/ (il * si riferisce alla versione di Lsyncd installata).

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

Ai fini di questo articolo, i file di configurazione che possono essere utili esempi sono lrsync.lua per la sincronizzazione locale e lrsyncssh.lua per la sincronizzazione remota.

Un file di configurazione avrà la seguente struttura:

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"
}

Come accennato in precedenza, Lscynd usa il rsync strumento per eseguire la sincronizzazione, in modo da poter utilizzare il rsync flag per personalizzare il processo aggiungendo un rsync parametro alla sync dichiarazione:

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

Inoltre, è importante considerare che Lsyncd aggrega gli eventi per un valore predefinito di 20 secondi prima di verificare se sono state apportate modifiche. Questo tempo può essere modificato usando il delay parametro nella sync sezione del file di configurazione:

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

Sincronizza le directory locali

Per sincronizzare il contenuto della directory locale /path/source_dir nella directory locale /path/destination_dir è necessario apportare alcune modifiche al file di configurazione e si consiglia di creare un file di registro e un file di stato per tenere traccia dell'avanzamento dell'attività, sebbene sia un passaggio facoltativo:

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

Il passaggio successivo consiste nel modificare il file di configurazione in /etc/lsyncd.conf per specificare le directory di origine e di destinazione e, se creata, la posizione dei file di registro e di stato. La configurazione sarà la seguente:

-- 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"
}

Per attivare questa nuova configurazione avviare il servizio con il seguente comando:

systemctl start lsyncd

Dopo aver seguito le istruzioni di cui sopra, Lsyncd inizierà a sincronizzare i contenuti da /path/source_dir a /path/destination_dir .

AVVISO :È sicuro abilitare Lsyncd all'avvio all'avvio solo se si è certi che le directory di destinazione non vengano mai modificate da nessun altro Lsyncd. In caso contrario, non abilitare Lsyncd all'avvio e assicurarsi che il MOTD contenga una riga per mostrare che Lsyncd è installato e in uso. Ad esempio:

Al riavvio, procedi come segue:

rsync controlla se ti trovi in ​​una situazione di "remoto/server":

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

Avvia Lsyncd con:

systemctl start lsyncd.service

Necessità di sincronizzare più directory locali?

Per sincronizzare più di una coppia di directory è possibile aggiungere più sync istruzioni nel file di configurazione:

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

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

Sincronizza le directory remote tramite SSH

Per eseguire una sincronizzazione remota utilizzando Lsyncd, il server di origine deve disporre dell'accesso SSH senza password al server di destinazione. Questo viene fatto creando chiavi SSH nel sorgente server.

Genera chiavi per l'accesso SSH senza password

Usa il seguente comando sul server di origine per generare le chiavi:

ssh-keygen -t rsa

Ti verrà chiesto di inserire il file in cui desideri salvare la chiave; a meno che tu non abbia una configurazione speciale, lasciala vuota per usare la posizione predefinita. Dopo questo, un altro prompt chiederà una passphrase; lascialo vuoto perché hai bisogno di un accesso completo senza password.

Ora che le chiavi sono state generate, copia la chiave nella destinazione server. Per copiarlo nelle authorized_keys file nel server di destinazione, utilizza le seguenti istruzioni sulla origine server dove sono state generate le chiavi:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Per verificare che la connessione senza password sia stata eseguita, accedi alla destinazione server dalla sorgente uno:

ssh DESTINATION_SERVER_IP

Se riesci ad accedere senza che ti venga richiesta una password, il processo è riuscito.

Ora che hai effettuato l'accesso, crea una directory sull'host remoto che funzionerà come cartella di destinazione ed esci dalla sessione SSH:

mkdir /path/remote_destination_dir
exit
exit

Modifica il file di configurazione

La struttura del file di configurazione rimarrà come spiegato nella sezione relativa alla sincronizzazione delle directory locali, ma verranno apportate alcune modifiche al sync dichiarazione:

  • Il default.rsync la proprietà verrà modificata in default.rsyncssh per abilitare la rsync strumento su SSH.
  • Il target la proprietà verrà sostituita con due proprietà per specificare la destinazione remota:host e targetdir .

Il file di configurazione sarà simile a questo:

[...]
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"
}
[...]

Una volta apportate le modifiche al file di configurazione, avviare il servizio come spiegato sopra:

systemctl start lsyncd

Se il servizio Lsyncd è già in esecuzione, riavvialo:

sudo service lsyncd restart

AVVISO: È sicuro consentire a Lsyncd di avviarsi all'avvio solo se si è certi che le directory di destinazione non vengano mai modificate da nessun altro Lsyncd. In caso contrario, non abilitare Lsyncd all'avvio e assicurarsi che il MOTD contenga una riga per mostrare che Lsyncd è installato e in uso. Ad esempio:

Al riavvio, procedi come segue:

rsync controlla se ti trovi in ​​una situazione di "remoto/server"

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

Avvia Lsyncd con

systemctl start lsyncd.service

Esclusione di directory da Lsyncd

A volte è necessario escludere alcune cartelle selezionate in una directory specifica. Gli esempi includono:

  • File multimediali montati su NFS.
  • File di registro. Quando sincronizzati, i file di registro creano molte chiacchiere inutili e l'utilizzo della larghezza di banda. In alcuni casi, ciò può causare notevoli ritardi nella sincronizzazione.
  • File temporanei utilizzati dai processi in esecuzione.

Per escludere solo le cartelle è necessario inserire il percorso relativo della cartella esclusa. Ad esempio:

  • /var/www è la directory di destinazione sincronizzata con gli slave
  • /var/www/vhosts/www.example.com/wp-content/uploads è la directory che viene montata dal tuo server NFS o che altrimenti non desideri sincronizzare.
  • Crea un'esclusione nella configurazione di lsyncd. Supponendo che tu stia utilizzando Lsyncd 2.1.5 su CentOS 6, assicurati innanzitutto di avere un file di esclusione in posizione all'interno della configurazione di Lsyncd come mostrato di seguito accanto alla riga "excludeFrom:
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

Quindi escludere il percorso relativo alla directory di origine specificata per la sincronizzazione. Poiché la directory di destinazione è /var/www e la directory che vogliamo escludere è /var/www/vhosts/www.example.com/wp-content/uploads, la nostra voce sarebbe:

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

ATTENZIONE:assicurati che il file di esclusione non contenga righe vuote. In tal caso, lsyncd tratta questo come "exclude /" e quindi tutto viene escluso.

Lsyncd su soluzioni NFS

Lsyncd è comunemente usato per replicare file in un'architettura master-slave. Sebbene funzioni alla grande per la gestione degli aggiornamenti di contenuto/codice, per i file multimediali o forniti dagli utenti, spesso è più semplice utilizzare NFS per condividere una cartella tra i vari server Web. Fai molta attenzione ad escludere da Lsyncd le cartelle condivise su NFS. Nel peggiore dei casi, in cui il tuo server master viene riavviato ma la condivisione NFS non riesce a montare, ciò potrebbe comportare la cancellazione da parte di Lsyncd del contenuto della tua condivisione NFS.

Ci sono un paio di modi per gestirlo.

Opzione 1:esclusione delle directory da Lsyncd

Per maggiori dettagli vedere la sezione "Esclusione di directory da Lsyncd"

Rsync per impostazione predefinita non funziona con le destinazioni dei collegamenti simbolici. Possiamo usarlo per proteggere il contenuto montato su NFS.

Invece di:

/var/www <– cartella principale per la replica Lsyncd/uploads <– Punto di montaggio della condivisione NFS

Monta la condivisione NFS in una cartella diversa, ad esempio /nfsmount, quindi procedi come segue (supponendo che il contenuto dei caricamenti sia già stato copiato in /nfsmount/uploads):

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

Ora il contenuto montato su NFS si trova al sicuro al di fuori dell'albero delle directory replicato da Lsyncd.

Opzione 3:imposta i parametri rsync

Rsync supporta un'opzione -x che dice a rsync di non attraversare i confini del file system. Ma prima di procedere, ci sono diverse note di cui devi essere a conoscenza prima di provare questo:

  • Questo non funzionerà con volumi Cloud Block Storage, volumi LVM extra, ecc.
  • Questo non funzionerà se Lsyncd risiede sullo stesso server del server NFS. Questa opzione presuppone che tu abbia un server NFS dedicato
  • Funziona solo se l'origine è un singolo filesystem

Per Lsyncd 2.0.x:aggiungi questa opzione alle opzioni che Lsyncd passa a rsync modificando la riga rsyncOpts in /etc/lsyncd.lua:

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

Per Lsyncd 2.1.x:Con Lsyncd 2.1.x, rsyncOpts è stato modificato in rsync={options} con l'uso di opzioni con un nome completo anziché solo una lettera come prima. Aggiungi quanto segue a /etc/lsyncd.conf:

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

Conclusioni

L'utilizzo di Lsyncd per mantenere sincronizzate le cartelle locali e remote è un'alternativa economica ed efficiente e, grazie alle molteplici opzioni disponibili per il file di configurazione, può essere personalizzato in base alle proprie esigenze.

  • Utilizzo di rsync per sincronizzare i file

Utilizza la scheda Feedback per inserire commenti o porre domande. Puoi anche avviare una conversazione con noi.


Linux
  1. Come configurare il tunneling SSH

  2. Come scaricare e caricare file su SSH

  3. Come impostare le chiavi SSH

  4. Come installare e configurare il server sftp in Ubuntu 20.04

  5. Invia/ricevi ZFS su ssh su Linux senza consentire l'accesso root

Mantenere sincronizzati file e directory Linux con rsync

Come utilizzare il comando rsync per copiare i dati localmente e su SSH

Come configurare la chiave pubblica e privata SSH in Linux

Tunneling e proxy SSH

4 modi per trasferire file tra sistemi remoti e locali su SSH

Come utilizzare il montaggio SSHFS con directory remote su SSH