Перейти до змісту

Рішення для дзеркального відображення - lsyncd

Передумови

  • Комп’ютер під керуванням Rocky Linux
  • Комфортний рівень зі зміною файлів конфігурації з командного рядка
  • Знання того, як користуватися редактором командного рядка (тут vi, але використовуйте свій улюблений редактор)
  • Вам потрібен доступ root або привілеї sudo (використання sudo -s з самого початку є хорошою ідеєю)
  • Пари відкритих і закритих ключів SSH
  • Репозиторії EPEL (додаткові пакети для Enterprise Linux) від Fedora
  • Вам потрібно буде ознайомитися з inotify, інтерфейсом монітора подій
  • Додатково: знайомство з tail

Вступ

Якщо ви шукаєте спосіб автоматичної синхронізації файлів і папок між комп’ютерами, lsyncd — чудовий варіант. Але ви повинні налаштувати все з командного рядка.

Це програма, яку варто вивчити будь-якому системному адміністратору.

Найкращий опис lsyncd міститься на сторінці довідки. Трохи перефразовуючи, lsyncd — це легке рішення для живого дзеркала, яке неважко встановити. Він не потребує нових файлових систем або блокових пристроїв і не перешкоджає продуктивності локальної файлової системи. Коротше кажучи, він відображає файли.

lsyncd спостерігає за інтерфейсом моніторингу подій локального дерева каталогів (inotify). Він агрегує та об’єднує події протягом кількох секунд і породжує один (чи більше) процес(ів) для синхронізації змін. За замовчуванням це rsync.

У цьому посібнику ви називатимете систему з оригінальними файлами «джерелом»; той, з яким ви синхронізуєтеся, буде «ціллю». Можна повністю віддзеркалити сервер за допомогою lsyncd, ретельно вказавши каталоги та файли, які потрібно синхронізувати.

Ви також захочете налаштувати пари публічних закритих ключів Rocky Linux SSH для віддаленої синхронізації. У наведених тут прикладах використовується SSH (порт 22).

Встановлення lsyncd

Встановлення lsyncd відбувається двома способами. Включено описи кожного методу. RPM, як правило, трохи відстає від вихідних пакетів, але лише трохи. Версія, встановлена ​​методом RPM на момент написання цієї статті, — 2.2.3-5, тоді як версія вихідного коду зараз — 2.3.1. Виберіть спосіб, який вам зручніше.

Встановлення lsyncd - метод RPM

Встановити версію RPM нескладно. Єдине, що вам потрібно спочатку встановити, це сховище програмного забезпечення EPEL від Fedora. Зробіть це за допомогою:

dnf install -y epel-release

Тепер встановіть lsyncd разом із усіма відсутніми залежностями:

dnf install lsyncd

Налаштуйте службу на запуск під час завантаження, але поки не запускайте її:

systemctl enable lsyncd

Встановлення lsyncd - вихідний метод

Встановлення з вихідного коду не складний процес.

Встановлення залежностей

Вам знадобляться деякі залежності для lsyncd і для створення пакунків із джерела. Використовуйте цю команду на своєму комп’ютері Rocky Linux, щоб переконатися, що у вас є потрібні залежності. Якщо ви збираєтеся створювати з вихідного коду, було б гарною ідеєю встановити всі інструменти розробки:

dnf groupinstall 'Development Tools'

Для Rocky Linux 9.0

lsyncd був повністю протестований у Rocky Linux 9.0 і працюватиме належним чином. Щоб установити всі необхідні залежності, вам потрібно буде ввімкнути додатковий репозиторій:

dnf config-manager --enable crb

Виконання цих дев’яти кроків перед наступними дозволить вам завершити збірку без повернення назад.

Ось залежності, необхідні для lsyncd:

dnf install lua lua-libs lua-devel cmake unzip wget rsync

Завантаження lsyncd і його збірка

Далі вам знадобиться вихідний код:

wget https://github.com/axkibe/lsyncd/archive/master.zip

Розпакуйте файл master.zip:

unzip master.zip

Це створить каталог під назвою «lsyncd-master». Вам потрібно перейти до цього каталогу та створити каталог під назвою build:

cd lsyncd-master

Потім:

mkdir build

Змініть каталоги, щоб отримати доступ до каталогу збірки:

cd build

Виконайте ці команди:

cmake ..
make
make install

Після завершення двійковий файл lsyncd буде встановлено та готовий до використання в /usr/local/bin

lsyncd Служба Systemd

За допомогою методу встановлення RPM служба systemd встановиться за вас, але якщо ви встановлюєте з джерела, вам потрібно буде створити службу systemd. Хоча ви можете запустити двійковий файл без служби systemd, ви хочете переконатися, що він справді запускається під час завантаження. Якщо ні, перезавантаження сервера припинить вашу синхронізацію. Якщо ви забудете знову запустити його вручну, це буде проблема!

Створення служби systemd відносно просте і заощадить ваш час у довгостроковій перспективі.

Створення службового файлу lsyncd

Ви можете створити цей файл будь-де, навіть у кореневому каталозі вашого сервера. Після створення ви можете перемістити його в правильне місце.

vi /root/lsyncd.service`

Вміст цього файлу буде:

[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target

[Service]
Restart=always
Type=simple
Nice=19
ExecStart=/usr/local/bin/lsyncd -nodaemon -pidfile /run/lsyncd.pid /etc/lsyncd.conf
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/lsyncd.pid

[Install]
WantedBy=multi-user.target

Встановіть щойно створений файл у правильне розташування:

install -Dm0644 /root/lsyncd.service /usr/lib/systemd/system/lsyncd.service

Нарешті, перезавантажте демон systemctl, щоб systemd «бачила» новий службовий файл:

systemctl daemon-reload

Конфігурація lsyncd

Для будь-якого методу встановлення lsyncd вам потрібен файл конфігурації: /etc/lsyncd.conf. У наступному розділі описано, як створити та перевірити файл конфігурації.

Зразок конфігурації для тестування

Ось приклад спрощеного файлу конфігурації, який синхронізує /home з іншим комп’ютером. Наш цільовий комп’ютер матиме локальну IP-адресу: 192.168.1.40

  settings {
   logfile = "/var/log/lsyncd.log",
   statusFile = "/var/log/lsyncd-status.log",
   statusInterval = 20,
   maxProcesses = 1
   }

sync {
   default.rsyncssh,
   source="/home",
   host="root@192.168.1.40",
   excludeFrom="/etc/lsyncd.exclude",
   targetdir="/home",
   rsync = {
     archive = true,
     compress = false,
     whole_file = false
   },
   ssh = {
     port = 22
   }
}

Трохи розбиваючи цей файл:

  • logfile і statusFile будуть створені автоматично під час запуску служби.
  • statusInterval - це кількість секунд, яку необхідно зачекати перед записом у файл statusFile.
  • maxProcesses — це кількість процесів, які lsyncd дозволено створювати. Якщо ви не використовуєте це на завантаженому комп’ютері, достатньо 1 процесу.
  • У розділі синхронізації default.rsyncssh говорить про використання rsync через SSH
  • source= - це шлях до каталогу, з якого ми синхронізуємо.
  • host= - це наш цільовий комп'ютер, з яким ми синхронізуємо
  • excludeFrom= повідомляє lsyncd, де знаходиться файл виключень. Він повинен існувати, але може бути порожнім.
  • targetdir= - це цільовий каталог, до якого ми надсилаємо файли. У більшості випадків це буде відповідати джерелу, але не завжди.
  • Потім у нас є розділ rsync =, і це параметри, з якими ми запускаємо rsync.
  • Розділ ssh = вказує порт SSH, який прослуховує цільовий комп’ютер

Якщо ви додаєте більше ніж один каталог для синхронізації, ви повинні повторити весь розділ «синхронізації», включаючи всі відкриваючі та закриваючі дужки для кожного каталогу.

Файл lsyncd.exclude

Як зазначалося раніше, файл excludeFrom має існувати. Створіть це зараз:

touch /etc/lsyncd.exclude

Наприклад, якщо ви синхронізуєте папку /etc на своєму комп’ютері, у процесі lsyncd буде багато файлів і каталогів, які потрібно виключити. Кожен виключений файл або каталог знаходиться у файлі, по одному на рядок:

/etc/hostname
/etc/hosts
/etc/networks
/etc/fstab

Перевірка

Коли все налаштовано, ви можете перевірити все. Переконайтеся, що наш systemd lsyncd.service запуститься:

systemctl start lsyncd

Якщо після виконання цієї команди не з’являється жодних помилок, перевірте статус служби, щоб переконатися, що:

systemctl status lsyncd

Якщо він показує, що служба запущена, використовуйте tail, щоб побачити кінці двох файлів журналу та переконайтеся, що все відображається нормально:

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

Якщо припустити, що все виглядає правильно, перейдіть до каталогу /home/[user], де [user] є користувачем комп’ютера, і створіть там файл із * touch*.

touch /home/[user]/testfile

Перейдіть на цільовий комп’ютер і подивіться, чи з’явився файл. Якщо так, то все працює. Налаштуйте lsyncd.service для запуску під час завантаження з:

systemctl enable lsyncd

Пам'ятайте про обережність

Щоразу, коли ви синхронізуєте набір файлів або каталогів з іншим комп’ютером, уважно подумайте про вплив цього на цільовий комп’ютер. Припустімо, ви повертаєтесь до Файлу lsyncd.exclude у нашому прикладі вище, чи можете ви уявити, що могло б статися, якби вам не вдалося виключити /etc/fstab?

fstab — це файл, який налаштовує накопичувачі на будь-якому комп’ютері Linux. Диски та етикетки майже напевно відрізняються на різних машинах. Наступне перезавантаження цільового комп’ютера, ймовірно, не вдасться.

Висновки та література

lsyncd — потужний інструмент для синхронізації каталогу комп’ютера. Як ви бачите, його неважко встановити та не складно обслуговувати.

Ви можете дізнатися більше про lsyncd, відвідавши Офіційний сайт

Author: Steven Spencer

Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova