GNU/Linux >> Znalost Linux >  >> Linux

Nastavte Lsyncd lokálně a přes SSH pro synchronizaci adresářů

Tento článek vysvětluje, jak nastavit Lsyncd nástroj lokálně i přes SSH k udržení synchronizace adresářů.

Lsyncd je zkratka pro Live Syncing Mirror Daemon a je to nástroj používaný v systémech Linux k udržování synchronizace adresářů. Tyto adresáře lze nalézt lokálně, na stejném počítači nebo vzdáleně na různých počítačích. Pro vzdálenou synchronizaci se tento článek zaměřuje na použití SSH k jejímu provedení.

Výhoda použití Lsyncd je, že se jedná o bezplatné a lehké řešení, které neovlivní výkon souborového systému. Pravidelně monitoruje soubory pro případné změny a poté používá rsync pro provedení synchronizace.

Požadavky

Pro Lsyncd pro správnou funkci potřebujete rsync nainstalováno.

POZNÁMKA: Doporučuje se spouštět následující příkazy jako sudo

Chcete-li nainstalovat rsync v systémech CentOS, Fedora nebo Red Hat použijte:

yum install rsync

Pro systémy Ubuntu nebo Debian použijte:

apt-get update
apt-get install rsync

Instalovat Lsyncd

Chcete-li nainstalovat lsyncd na systému CentOS, Fedora nebo Red Hat je nutné před instalací lsyncd povolit úložiště EPEL . K provedení instalace se používají následující příkazy:

yum install epel-release
yum install lsyncd

Pro systém Ubuntu nebo Debian lsyncd nástroj je součástí výchozích repozitářů, takže pro instalaci by měly stačit následující příkazy:

sudo apt-get update
sudo apt-get install lsyncd

Chcete-li potvrdit, že instalace proběhla úspěšně a ověřit nainstalovanou verzi, použijte následující příkaz:

lsyncd -version

Konfigurační soubory Lsyncd

Výchozí konfigurační soubor pro Lsyncd je vytvořen automaticky na /etc/lsyncd.conf po dokončení instalace.

Tento soubor obsahuje všechny parametry používané k provádění synchronizace mezi adresáři, buď lokálně nebo vzdáleně.

Například konfigurační soubory si můžete prohlédnout v /usr/share/doc/lsyncd*/examples/ (* označuje nainstalovanou verzi Lsyncd).

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

Pro účely tohoto článku mohou být užitečné příklady konfiguračních souborů lrsync.lua pro místní synchronizaci a lrsyncssh.lua pro vzdálenou synchronizaci.

Konfigurační soubor bude mít následující strukturu:

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

Jak již bylo zmíněno, Lscynd používá rsync nástroj k provedení synchronizace, takže budete moci použít rsync příznaky pro přizpůsobení procesu přidáním rsync parametr k sync prohlášení:

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

Je také důležité vzít v úvahu, že Lsyncd agreguje události výchozích 20 sekund, než ověří, zda byly provedeny nějaké změny. Tento čas lze upravit pomocí delay parametr v sync sekce konfiguračního souboru:

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

Synchronizovat místní adresáře

Chcete-li synchronizovat obsah místního adresáře /path/source_dir do místního adresáře /path/destination_dir potřebujeme provést nějaké změny v konfiguračním souboru a je doporučeno vytvořit soubor protokolu a stavový soubor pro sledování průběhu úlohy, i když je to volitelný krok:

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

Dalším krokem je úprava konfiguračního souboru v /etc/lsyncd.conf k určení zdrojového a cílového adresáře a pokud je vytvořen, umístění souborů protokolu a stavových souborů. Konfigurace bude následující:

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

Chcete-li aktivovat tuto novou konfiguraci, spusťte službu následujícím příkazem:

systemctl start lsyncd

Po provedení výše uvedených pokynů začne Lsyncd synchronizovat obsah z /path/source_dir do /path/destination_dir .

UPOZORNĚNÍ :Povolit spuštění Lsyncd při bootování je bezpečné pouze tehdy, pokud jste si jisti, že cílové adresáře se nikdy nezmění žádným jiným Lsyncd. Jinak nepovolujte Lsyncd při spouštění a ujistěte se, že MOTD obsahuje řádek, který ukazuje, že Lsyncd je nainstalován a používán. Například:

Při restartu proveďte následující kroky:

rsync zkontrolujte, zda jste v situaci „vzdálený server/server“:

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

Spusťte Lsyncd pomocí:

systemctl start lsyncd.service

Potřebujete synchronizovat více místních adresářů?

Pro synchronizaci více než jednoho páru adresářů je možné přidat více sync příkazy v konfiguračním souboru:

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

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

Synchronizace vzdálených adresářů přes SSH

Chcete-li provést vzdálenou synchronizaci pomocí Lsyncd, zdrojový server musí mít přístup SSH bez hesla k cílovému serveru. To se provádí vytvořením klíčů SSH ve zdroji server.

Generovat klíče pro přístup bez hesla SSH

Použijte následující příkaz na zdrojovém serveru pro vygenerování klíčů:

ssh-keygen -t rsa

Budete vyzváni k zadání souboru, do kterého chcete klíč uložit; pokud nemáte speciální konfiguraci, ponechte ji prázdnou, chcete-li použít výchozí umístění. Poté vás další výzva požádá o heslo; ponechte toto pole prázdné, protože potřebujete úplné přihlášení bez hesla.

Nyní, když jsou klíče vygenerovány, zkopírujte klíč do cíle server. Chcete-li jej zkopírovat do authorized_keys soubor na cílovém serveru, použijte následující pokyny pro zdroj server, kde byly klíče vygenerovány:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Chcete-li otestovat, zda je připojení bez hesla dokončeno, přihlaste se do cíle serveru ze zdroje jeden:

ssh DESTINATION_SERVER_IP

Pokud se můžete přihlásit, aniž byste byli vyzváni k zadání hesla, proces byl úspěšný.

Nyní, když jste přihlášeni, vytvořte na vzdáleném hostiteli adresář, který bude fungovat jako cílová složka, a ukončete relaci SSH:

mkdir /path/remote_destination_dir
exit
exit

Upravte konfigurační soubor

Struktura konfiguračního souboru zůstane tak, jak je vysvětleno v části pro synchronizaci lokálních adresářů, ale budou provedeny některé změny v sync prohlášení:

  • default.rsync vlastnost se změní na default.rsyncssh pro aktivaci rsync nástroj přes SSH.
  • target vlastnost bude nahrazena dvěma vlastnostmi pro určení vzdáleného cíle:host a targetdir .

Konfigurační soubor bude vypadat takto:

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

Po provedení změn v konfiguračním souboru spusťte službu, jak je vysvětleno výše:

systemctl start lsyncd

Pokud je služba Lsyncd již spuštěna, stačí ji restartovat:

sudo service lsyncd restart

UPOZORNĚNÍ: Povolit spuštění Lsyncd při spouštění je bezpečné pouze tehdy, pokud jste si jisti, že cílové adresáře se nikdy nezmění žádným jiným Lsyncd. Jinak nepovolujte Lsyncd při spouštění a ujistěte se, že MOTD obsahuje řádek, který ukazuje, že Lsyncd je nainstalován a používán. Například:

Při restartu proveďte následující kroky:

rsync zkontrolujte, zda jste v situaci „vzdálený server/server“

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

Spusťte Lsyncd pomocí

systemctl start lsyncd.service

Vyloučení adresářů z Lsyncd

Někdy je potřeba vyloučit některé vybrané složky v konkrétním adresáři. Příklady:

  • Soubory médií připojené pomocí NFS.
  • Soubory protokolu. Při synchronizaci vytvářejí soubory protokolu spoustu zbytečného klábosení a využití šířky pásma. V některých případech to může způsobit značné zpoždění synchronizace.
  • Dočasné soubory používané spuštěnými procesy.

Chcete-li vyloučit pouze složky, musíte zadat relativní cestu k vyloučené složce. Například:

  • /var/www je cílový adresář synchronizovaný s podřízenými jednotkami
  • /var/www/vhosts/www.example.com/wp-content/uploads je adresář, který je připojen z vašeho serveru NFS nebo který jinak nechcete synchronizovat.
  • Vytvořte výjimky v konfiguraci lsyncd. Za předpokladu, že používáte Lsyncd 2.1.5 na CentOS 6, nejprve se ujistěte, že máte v konfiguraci Lsyncd umístěn soubor výjimek, jak je znázorněno níže vedle řádku „excludeFrom:
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

Dále vylučte cestu vzhledem ke zdrojovému adresáři určenému pro synchronizaci. Protože cílový adresář je /var/www a adresář, který chceme vyloučit, je /var/www/vhosts/www.example.com/wp-content/uploads, náš záznam by byl:

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

UPOZORNĚNÍ:Ujistěte se, že soubor výjimek neobsahuje žádné prázdné řádky. Pokud ano, lsyncd to považuje za „exclude /“ a pak se vše vyloučí.

Lsyncd na řešeních NFS

Lsyncd se běžně používá k replikaci souborů v architektuře master-slave. I když to funguje skvěle pro zpracování aktualizací obsahu/kódu, pro uživatelem přidané nebo mediální soubory, je často jednodušší použít NFS ke sdílení složky mezi různými webovými servery. Buďte velmi opatrní, abyste z Lsyncd vyloučili složky sdílené přes NFS. V nejhorším případě, kdy se váš hlavní server restartuje, ale sdílení NFS se nepodaří připojit, může to vést k tomu, že Lsyncd vymaže obsah vaší sdílené složky NFS.

Existuje několik způsobů, jak to zvládnout.

Možnost 1:Vyloučení adresářů z Lsyncd

Další podrobnosti naleznete v části ‚Vyloučení adresářů z Lsyncd‘

Rsync ve výchozím nastavení nefunguje s cíli symbolických odkazů. Můžeme to použít k ochraně obsahu připojeného přes NFS.

Místo:

/var/www <– kořenová složka pro replikaci Lsyncd/uploads <– Sdílený přípojný bod NFS

Připojte sdílenou složku NFS do jiné složky, řekněme /nfsmount, a poté proveďte následující (za předpokladu, že obsah nahrávání již byl zkopírován do /nfsmount/uploads):

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

Nyní je váš obsah připojený k systému NFS bezpečně umístěn mimo strom adresářů replikovaných pomocí Lsyncd.

Možnost 3:Nastavení parametrů rsync

Rsync podporuje volbu -x, která říká rsync, aby nepřekračoval hranice souborového systému. Než však budete pokračovat, existuje několik poznámek, které byste si měli být vědomi, než to zkusíte:

  • Toto nebude fungovat se svazky Cloud Block Storage, extra svazky LVM atd.
  • Toto nebude fungovat, pokud je Lsyncd umístěn na stejném serveru jako server NFS. Tato možnost předpokládá, že máte vyhrazený server NFS
  • Toto funguje pouze v případě, že zdrojem je jeden souborový systém

Pro Lsyncd 2.0.x:Přidejte tuto volbu k možnostem, které Lsyncd předává rsync úpravou řádku rsyncOpts v /etc/lsyncd.lua:

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

Pro Lsyncd 2.1.x:S Lsyncd 2.1.x byl rsyncOpts změněn na rsync={options} s použitím voleb s celým jménem, ​​nikoli pouze s písmenem jako dříve. Přidejte následující do /etc/lsyncd.conf:

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

Závěry

Použití Lsyncd k synchronizaci místních a vzdálených složek je ekonomickou a efektivní alternativou a díky mnoha možnostem konfiguračního souboru jej lze přizpůsobit tak, aby vyhovoval vašim potřebám.

  • Použití rsync k synchronizaci souborů

Pomocí karty Zpětná vazba můžete přidat komentáře nebo položit otázky. Můžete s námi také zahájit konverzaci.


Linux
  1. Jak nastavit časové pásmo a synchronizovat čas serveru s NTP v Linuxu

  2. Jak nastavit SSH tunelování

  3. Zakažte přímé přihlášení roota a uživatelský přístup přes SSH k serveru

  1. Jak synchronizovat místní a vzdálené adresáře v Linuxu

  2. Jak porovnávat adresáře přes ssh

  3. ZFS odesílá/přijímá přes ssh na linuxu bez povolení přihlášení roota

  1. Jak stahovat a nahrávat soubory přes SSH

  2. Jak nastavit klíče SSH

  3. Jak nainstalovat a nastavit sftp server v Ubuntu 20.04