Поиск по сайту:

Как синхронизировать каталоги с помощью Lsyncd в Ubuntu 20.04


На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установите Lsyncd
  4. Настройте Lsyncd для синхронизации локальных каталогов
  5. Настройка Lsyncd для синхронизации удаленных каталогов
  6. Заключение

Lsyncd — это простой и легкий инструмент, который позволяет зеркалировать ваш локальный каталог в другой каталог на удаленном сервере. Он работает, постоянно отслеживая изменения в указанном каталоге каждые несколько секунд, и если какие-либо изменения вносятся, они синхронизируются с удаленным сервером. Этот инструмент очень полезен для синхронизации данных из защищенной области в незащищенную область.

В этом руководстве мы покажем вам, как установить и использовать Lsyncd для синхронизации локальных и удаленных каталогов.

Предпосылки

  • Сервер под управлением Ubuntu 20.04.
  • На вашем сервере установлен пароль root.

Начиная

Перед запуском рекомендуется обновить системный пакет до последней версии. Вы можете обновить их с помощью следующей команды:

apt-get update -y
apt-get upgrade -y

После обновления всех пакетов перезагрузите систему, чтобы изменения вступили в силу.

Установить Lsyncd

По умолчанию пакет Lsyncd доступен в большинстве операционных систем Linux. Вы можете установить его, просто выполнив следующую команду:

apt-get install lsyncd -y

После установки Lsyncd вы можете проверить установленную версию Lsyncd с помощью следующей команды:

lsyncd --version

Вы должны получить следующий результат:

Version: 2.2.3

Настройте Lsyncd для синхронизации локальных каталогов

В этом разделе мы настроим Lsyncd для синхронизации каталога /etc/ с каталогом /mnt/ в локальной системе.

Сначала создайте каталог для Lsyncd с помощью следующей команды:

mkdir /etc/lsyncd

Затем создайте новый файл конфигурации Lsyncd и определите исходный и целевой каталоги, которые вы хотите синхронизировать.

nano /etc/lsyncd/lsyncd.conf.lua

Добавьте следующие строки:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 20,
   nodaemon   = false
}

sync {
        default.rsync,
        source = "/etc/",
        target = "/mnt"
}

Сохраните и закройте файл, когда закончите.

systemctl start lsyncd
systemctl enable lsyncd

Вы также можете проверить статус службы Lsyncd с помощью следующей команды:

systemctl status lsyncd

Вы должны увидеть следующий вывод:

? lsyncd.service - LSB: lsyncd daemon init script
     Loaded: loaded (/etc/init.d/lsyncd; generated)
     Active: active (running) since Fri 2020-05-01 03:31:20 UTC; 9s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 36946 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS)
      Tasks: 2 (limit: 4620)
     Memory: 12.5M
     CGroup: /system.slice/lsyncd.service
             ??36921 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua
             ??36952 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua

May 01 03:31:20 ubuntu20 systemd[1]: lsyncd.service: Succeeded.
May 01 03:31:20 ubuntu20 systemd[1]: Stopped LSB: lsyncd daemon init script.
May 01 03:31:20 ubuntu20 systemd[1]: Starting LSB: lsyncd daemon init script...
May 01 03:31:20 ubuntu20 lsyncd[36946]:  * Starting synchronization daemon lsyncd
May 01 03:31:20 ubuntu20 lsyncd[36951]: 03:31:20 Normal: --- Startup, daemonizing ---
May 01 03:31:20 ubuntu20 lsyncd[36946]:    ...done.
May 01 03:31:20 ubuntu20 systemd[1]: Started LSB: lsyncd daemon init script.

Вы можете проверить файл журнала Lsyncd для получения более подробной информации, как показано ниже:

tail -f /var/log/lsyncd/lsyncd.log

Вы должны увидеть следующий вывод:

/lsyncd/lsyncd.conf.lua
Fri May  1 03:30:57 2020 Normal: Finished a list after exitcode: 0
Fri May  1 03:31:20 2020 Normal: --- Startup, daemonizing ---
Fri May  1 03:31:20 2020 Normal: recursive startup rsync: /etc/ -> /mnt/
Fri May  1 03:31:20 2020 Normal: Startup of /etc/ -> /mnt/ finished.

Вы также можете проверить статус синхронизации с помощью следующей команды:

tail -f /var/log/lsyncd/lsyncd.status

Вы должны увидеть изменения в каталоге /mnt с помощью следующей команды:

ls /mnt/

Вы должны увидеть, что все файлы и каталоги из каталога /etc добавляются в каталог /mnt:

acpi                    dconf           hosts            logrotate.conf       newt                     rc2.d          subuid-
adduser.conf            debconf.conf    hosts.allow      logrotate.d          nginx                    rc3.d          sudoers
alternatives            debian_version  hosts.deny       lsb-release          nsswitch.conf            rc4.d          sudoers.d
apache2                 default         init             lsyncd               ntp.conf                 rc5.d          sysctl.conf
apparmor                deluser.conf    init.d           ltrace.conf          openal                   rc6.d          sysctl.d
apparmor.d              depmod.d        initramfs-tools  lvm                  opt                      rcS.d          systemd
apport                  dhcp            inputrc          machine-id           os-release               resolv.conf    terminfo
apt                     dnsmasq.d       insserv.conf.d   magic                overlayroot.conf         rmt            timezone
at.deny                 docker          iproute2         magic.mime           PackageKit               rpc            tmpfiles.d
bash.bashrc             dpkg            iscsi            mailcap              pam.conf                 rsyslog.conf   ubuntu-advantage
bash_completion         e2scrub.conf    issue            mailcap.order        pam.d                    rsyslog.d      ucf.conf
bash_completion.d       environment     issue.net        manpath.config       passwd                   screenrc       udev
bindresvport.blacklist  ethertypes      kernel           mdadm                passwd-                  securetty      ufw
binfmt.d                fonts           kernel-img.conf  mime.types           perl                     security       update-manager
byobu                   fstab           landscape        mke2fs.conf          php                      selinux        update-motd.d
ca-certificates         fuse.conf       ldap             modprobe.d           pki                      sensors3.conf  update-notifier
ca-certificates.conf    fwupd           ld.so.cache      modules              pm                       sensors.d      vdpau_wrapper.cfg
calendar                gai.conf        ld.so.conf       modules-load.d       polkit-1                 services       vim
console-setup           groff           ld.so.conf.d     mtab                 pollinate                shadow         vmware-tools
cron.d                  group           legal            multipath            popularity-contest.conf  shadow-        vtrgb
cron.daily              group-          letsencrypt      multipath.conf       profile                  shells         vulkan
cron.hourly             grub.d          libaudit.conf    mysql                profile.d                skel           wgetrc
cron.monthly            gshadow         libnl-3          nanorc               protocols                sos.conf       X11
crontab                 gshadow-        locale.alias     netplan              pulse                    ssh            xattr.conf
cron.weekly             gss             locale.gen       network              python3                  ssl            xdg
cryptsetup-initramfs    hdparm.conf     localtime        networkd-dispatcher  python3.8                subgid         zsh_command_not_found
crypttab                host.conf       logcheck         NetworkManager       rc0.d                    subgid-
dbus-1                  hostname        login.defs       networks             rc1.d                    subuid

Настройте Lsyncd для синхронизации удаленных каталогов

В этом разделе мы настроим Lsyncd для синхронизации каталога /etc/ в локальной системе с каталогом /opt/ в удаленной системе.

Перед началом вам необходимо настроить аутентификацию на основе ключей SSH между локальной системой и удаленным сервером, чтобы локальная система могла подключаться к удаленному серверу без пароля.

В локальной системе выполните следующую команду, чтобы сгенерировать открытый и закрытый ключи:

ssh-keygen -t rsa

Вы должны увидеть следующий вывод:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:c7fhjjhAamFjlk6OkKPhsphMnTZQFutWbr5FnQKSJjE 
The key's randomart image is:
+---[RSA 3072]----+
| E ..            |
|  ooo            |
| oo= +           |
|=.+ % o . .      |
| oSo. o    |
|ooo=B o .o o o   |
|=o.... o    o    |
|+.    o .. o     |
|     .  ... .    |
+----[SHA256]-----+

Приведенная выше команда сгенерирует закрытый и открытый ключи внутри каталога ~/.ssh.

Далее вам нужно будет скопировать открытый ключ на удаленный сервер. Вы можете скопировать его с помощью следующей команды:

ssh-copy-id 

Вам будет предложено ввести пароль удаленного пользователя root, как показано ниже:

's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ''"
and check to make sure that only the key(s) you wanted were added.

Как только пользователь будет аутентифицирован, открытый ключ будет добавлен к файлу author_keys удаленного пользователя, и соединение будет закрыто.

Теперь вы сможете войти на удаленный сервер без ввода пароля.

Чтобы проверить это, просто попробуйте войти на удаленный сервер через SSH:

ssh 

Если все прошло хорошо, вы сразу войдете в систему.

Далее вам нужно будет отредактировать файл конфигурации Lsyncd и определить переменные rsyncssh и target host:

nano /etc/lsyncd/lsyncd.conf.lua

Измените файл, как показано ниже:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 20,
   nodaemon   = false
}

sync {
        default.rsyncssh,
        source = "/etc/",
	host = "remote-server-ip",
        targetdir = "/opt"
}

Сохраните и закройте файл, когда закончите. Затем перезапустите службу Lsyncd, чтобы начать синхронизацию.

systemctl restart lsyncd

Вы можете проверить статус синхронизации с помощью следующей команды:

tail -f /var/log/lsyncd/lsyncd.log

Вы должны увидеть следующий вывод:

Fri May  1 04:32:05 2020 Normal: --- Startup, daemonizing ---
Fri May  1 04:32:05 2020 Normal: recursive startup rsync: /etc/ -> 45.58.38.21:/opt/
Fri May  1 04:32:06 2020 Normal: Startup of "/etc/" finished: 0

Вы должны увидеть изменения в каталоге /opt на удаленном сервере с помощью следующей команды:

ls /opt

Вы должны увидеть, что все файлы и каталоги из каталога /etc добавляются в каталог удаленных серверов /opt:

acpi                    dconf           hosts            logrotate.conf       newt                     rc2.d          subuid-
adduser.conf            debconf.conf    hosts.allow      logrotate.d          nginx                    rc3.d          sudoers
alternatives            debian_version  hosts.deny       lsb-release          nsswitch.conf            rc4.d          sudoers.d
apache2                 default         init             lsyncd               ntp.conf                 rc5.d          sysctl.conf
apparmor                deluser.conf    init.d           ltrace.conf          openal                   rc6.d          sysctl.d
apparmor.d              depmod.d        initramfs-tools  lvm                  opt                      rcS.d          systemd
apport                  dhcp            inputrc          machine-id           os-release               resolv.conf    terminfo
apt                     dnsmasq.d       insserv.conf.d   magic                overlayroot.conf         rmt            timezone
at.deny                 docker          iproute2         magic.mime           PackageKit               rpc            tmpfiles.d
bash.bashrc             dpkg            iscsi            mailcap              pam.conf                 rsyslog.conf   ubuntu-advantage
bash_completion         e2scrub.conf    issue            mailcap.order        pam.d                    rsyslog.d      ucf.conf
bash_completion.d       environment     issue.net        manpath.config       passwd                   screenrc       udev
bindresvport.blacklist  ethertypes      kernel           mdadm                passwd-                  securetty      ufw
binfmt.d                fonts           kernel-img.conf  mime.types           perl                     security       update-manager
byobu                   fstab           landscape        mke2fs.conf          php                      selinux        update-motd.d
ca-certificates         fuse.conf       ldap             modprobe.d           pki                      sensors3.conf  update-notifier
ca-certificates.conf    fwupd           ld.so.cache      modules              pm                       sensors.d      vdpau_wrapper.cfg
calendar                gai.conf        ld.so.conf       modules-load.d       polkit-1                 services       vim
console-setup           groff           ld.so.conf.d     mtab                 pollinate                shadow         vmware-tools
cron.d                  group           legal            multipath            popularity-contest.conf  shadow-        vtrgb
cron.daily              group-          letsencrypt      multipath.conf       profile                  shells         vulkan
cron.hourly             grub.d          libaudit.conf    mysql                profile.d                skel           wgetrc
cron.monthly            gshadow         libnl-3          nanorc               protocols                sos.conf       X11
crontab                 gshadow-        locale.alias     netplan              pulse                    ssh            xattr.conf
cron.weekly             gss             locale.gen       network              python3                  ssl            xdg
cryptsetup-initramfs    hdparm.conf     localtime        networkd-dispatcher  python3.8                subgid         zsh_command_not_found
crypttab                host.conf       logcheck         NetworkManager       rc0.d                    subgid-
dbus-1                  hostname        login.defs       networks             rc1.d                    subuid

Заключение

В приведенном выше руководстве мы узнали, как установить и настроить Lsyncd для локальной и удаленной синхронизации. Теперь вы можете использовать Lsyncd в производственной среде для целей резервного копирования. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.