lsyncd

Lsyncd - демон на Lua, позволяющий синхронизировать между собой каталоги между несколькими серверами по событиям изменения содержимого файловой системы.

Установка

apt instal lsyncd

Папки

mkdir -p /etc/lsyncd && mkdir -p /var/log/lsyncd && mkdir -p /etc/lsyncd/conf.d/

Конфиг

vi /etc/lsyncd/lsyncd.conf.lua

Для синка в обе стороны, обязательный параметр "temp_dir"

ssh - указывать не обязательно, если настройки стандартны

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

Синк одного файла

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

Исключения

vi /etc/lsyncd/linux_notes.exclude
.git/*
.*

Настройки ядра

У inotify есть три параметра (см. ls /proc/sys/fs/inotify/):

max_queued_events — максимальное число событий в очереди; default = 16384;

max_user_instances — сколько инстансов inotify может запустить один пользоваетль; default = 128;

max_user_watches — сколько файлов может отслеживать один пользоваль; default = 8192.

echo "
fs.inotify.max_user_watches = 16777216
fs.inotify.max_queued_events = 65536
" >> /etc/sysctl.conf
sysctl -p
echo 16777216 > /proc/sys/fs/inotify/max_user_watches
echo 65536 > /proc/sys/fs/inotify/max_queued_events

Example

Синк на несколько серверов

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

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

systemctl restart lsyncd
systemctl enable lsyncd

Errors

ssh_exchange_identification: read: Connection reset by peer

при большом количестве файлов для синхронизации, правим в файле /etc/ssh/sshd_config на сервере приемнике правим:

MaxSessions 100
MaxStartups 100:30:1000

MaxSessions Задает максимальное количество открытых сеансов, разрешенных для одного сетевого подключения. По умолчанию 10.

MaxStartups. Запись параметра имеет форму "start:rate:full". В нашем случае она означает отключение с вероятностью 30% при наличии 100 неаутентифицированных связей, с линейным ростом вероятности до 100% при достижении 1000.

Last updated