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í nadefault.rsyncssh
pro aktivacirsync
nástroj přes SSH.target
vlastnost bude nahrazena dvěma vlastnostmi pro určení vzdáleného cíle:host
atargetdir
.
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‘
Možnost 2:Použijte symbolický odkaz
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.
Související články
- 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.