lsyncd Lsyncd - демон на Lua, позволяющий синхронизировать между собой каталоги между несколькими серверами по событиям изменения содержимого файловой системы.
Установка
Папки
Bash
Copy mkdir -p /etc/lsyncd && mkdir -p /var/log/lsyncd && mkdir -p /etc/lsyncd/conf.d/
Конфиг
Bash
Copy vi /etc/lsyncd/lsyncd.conf.lua
Для синка в обе стороны, обязательный параметр "temp_dir "
ssh - указывать не обязательно, если настройки стандартны
Lua
Copy settings {
logfile = "/var/log/lsyncd/lsyncd.log" ,
statusFile = "/var/log/lsyncd/lsyncd_status.log" ,
statusInterval = 20 ,
nodaemon = false
}
sync {
default.rsyncssh,
source = "/path/to/dir" ,
host = "new_server" ,
targetdir = "/path/to/dir/new_server" ,
excludeFrom = "/etc/lsyncd/linux_notes.exclude" ,
delay = 10 ,
delete = true ,
rsync = {
archive = true ,
compress = false ,
whole_file = false ,
sparse = true ,
update = true ,
temp_dir = "/tmp/" ,
links = true ,
times = true ,
protect_args = false ,
acls = true ,
verbose = true
},
ssh = {
port = 22 ,
_extra = { "/usr/bin/ssh -l user -p 22 -i /home/user/.ssh/id_rsa -o StrictHostKeyChecking=no" }
}
}
Синк одного файла
Lua
Copy sync {
default.rsyncssh,
source = "/etc/security" ,
host = "new_server" ,
targetdir = "/etc/security" ,
delay = 10 ,
delete = false ,
rsync = {
archive = true ,
compress = false ,
whole_file = false ,
sparse = true ,
update = true ,
temp_dir = "/tmp/" ,
links = true ,
times = true ,
protect_args = false ,
acls = true ,
verbose = true ,
_extra = {
"--include=limits.conf" ,
"--exclude=*"
}
},
ssh = {
port = 22
}
}
Исключения
Bash
Copy vi /etc/lsyncd/linux_notes.exclude
Настройки ядра
У inotify есть три параметра (см. ls /proc/sys/fs/inotify/):
max_queued_events — максимальное число событий в очереди; default = 16384;
max_user_instances — сколько инстансов inotify может запустить один пользоваетль; default = 128;
max_user_watches — сколько файлов может отслеживать один пользоваль; default = 8192.
Bash
Copy echo "
fs.inotify.max_user_watches = 16777216
fs.inotify.max_queued_events = 65536
" >> /etc/sysctl.conf
Bash
Copy echo 16777216 > /proc/sys/fs/inotify/max_user_watches
Bash
Copy echo 65536 > /proc/sys/fs/inotify/max_queued_events
Example
Синк на несколько серверов
Lua
Copy settings = {
delay = 1 ,
maxProcesses = 3 ,
logfile = "/var/log/lsyncd/lsyncd.log" ,
statusFile = "/var/log/lsyncd/lsyncd.stat" ,
}
targetlist = {
"1.0.0.2:/var/www/html" ,
"1.0.0.3:/var/www/html"
}
for _, server in ipairs (targetlist) do
sync { default.rsync,
source = "/var/www/html" ,
rsyncOps = "-rltvupgo"
target = server
}
end
Отдельный файл для каждого sync
Lua
Copy local confdir = '/etc/lsyncd/conf.d/'
local entries = readdir ( confdir )
for name, isdir in pairs ( entries ) do
if not isdir then
dofile ( confdir .. name )
end
end
https://github.com/axkibe/lsyncd/issues/441#issuecomment-293287126
Start/stop
Copy systemctl restart lsyncd
systemctl enable lsyncd
Errors
ssh_exchange_identification: read: Connection reset by peer
при большом количестве файлов для синхронизации, правим в файле /etc/ssh/sshd_config на сервере приемнике правим:
Copy MaxSessions 100
MaxStartups 100:30:1000
MaxSessions Задает максимальное количество открытых сеансов, разрешенных для одного сетевого подключения. По умолчанию 10.
MaxStartups . Запись параметра имеет форму "start:rate:full ". В нашем случае она означает отключение с вероятностью 30% при наличии 100 неаутентифицированных связей, с линейным ростом вероятности до 100% при достижении 1000.